• VBS做网页采集(转载)


    一、vbs 解析 html 文档

    原文地址:http://www.cnblogs.com/52cik/p/vbs-parse-html.html

    关于VBS采集,网上流行比较多的方法都是正则,其实 htmlfile 可以解析 html 代码,但如果 designMode 没开启的话,有时候会包安全提示信息。
    但是开启 designMode (@预言家晚报 分享的方法) 的话,所有js都不会被执行,只是干干净净的dom文档,所以在逼不得已的情况下开启 designMode 一般情况保持默认即可。

    Set html = CreateObject("htmlfile") 
    Set http = CreateObject("Msxml2.ServerXMLHTTP") 
    html.designMode = "on" ' 开启编辑模式 
    http.open "GET", "http://www.cnblogs.com/", False 
    http.send 
    strHtml = http.responseText 
    html.write strHtml ' 写入数据 
    Set post_list = html.getElementById("post_list") 
    For Each el In post_list.children     WScript.Echo el.getElementsByTagName("a")(0).innerText 
    Next

    其实方法很简单,但是重点是会vbs的,却不一定都会 dom 操作,所以这个很纠结。
    我也没办法,只能靠你们自己了,我只是分享一下思路而已、

    这样解析 html 比正则方便快捷多了。

    二、vbs 解析 json jsonp 方法

    原文地址:http://www.cnblogs.com/52cik/p/vbs-parse-json.html

    昨天说了下用 htmlfile 来解析 html,今天依然用他来解析,htmlfile 是一个 COM 版的 BOM 和 DOM,所以解析 html, 执行 js 完全不在话下,
    今天就继续解析 json 和 jsonp 吧。

    我收集了三种常见 json jsonp 的格式,因为很多人找我说如何用正则提取某个字符串,我看了下,要么是json,要么是jsonp,
    正则简直浪费,比如那种空间里说说的数据,上百条的信息,你正则个P,而且还有回复里的格式也差不多的,所以最好的方法还是解析。

    先来看看常见的三种吧:
    酷我音乐用户信息 json 格式
    http://kzone.kuwo.cn/mlog/UserVal?uid=1237357&from=profile

    {"work":4,"fans":275,"lp":"{"id":1237357,"username":"乱码","pic":"http://img3.kuwo.cn/star/userhead/57/55/1315554310390_1237357m.jpg"}","art":4,"album":1,"fortune":342402,"article":0,"workVideo":1,"care":195,"workAudio":3,"view":1312997,"playlist":0,"listen":278962,"collect":1}

    拍拍手机查询接口 jsonp 格式

    http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=13012345678&amount=10000&callname=cb

    cb({mobile:'13012345678',province:'重庆',isp:'中国联通',stock:'1',amount:'10000',maxprice:'0',minprice:'0'});

    搜狐IP信息 js 格式

    http://pv.sohu.com/cityjson

    var returnCitySN = {"cip": "218.72.14.14", "cid": "330100", "cname": "浙江省杭州市"};

    这几种合适都可以通过 htmlfile 来解析,但是方法稍微有点差异。

    先来解析第一种 json 格式的吧。

    Set html = CreateObject("htmlfile") 
    Set http = CreateObject("Msxml2.ServerXMLHTTP") 
    http.open "GET", "http://kzone.kuwo.cn/mlog/UserVal?uid=1237357&from=profile", False 
    http.send 
    strHtml = http.responseText ' 得到数据 
    Set window = html.parentWindow 
    window.execScript "var json = " & strHtml, "JScript" ' 解析 json 
    Set kuwo = window.json ' 获取解析后的对象 
    WScript.Echo "访问量:", kuwo.view, " 财富:", kuwo.fortune

    可以得到如下信息。

    再来看看 jsonp 的解析,jsonp其实只是多了一个回调函数而已,所以我们自定义一个函数解析他就可以了。

    Set html = CreateObject("htmlfile") 
    Set http = CreateObject("Msxml2.ServerXMLHTTP") 
    callback = "cb" 
    url = "http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=13012345678&amount=10000&callname=" & callback 
    http.open "GET", url, False 
    http.send 
    strHtml = http.responseText ' 得到数据 
    ' cb({mobile:'13012345678',province:'重庆',isp:'中国联通',stock:'1',amount:'10000',maxprice:'0',minprice:'0'}); 
    ' <!--[if !IE]>|xGv00|8030d7c308afc4a32846a715ff79e9a3<![endif]--> 
    ' 得到的是这样的数据,所以要处理下 
    strHtml = Split(strHtml, vbLf)(0) ' 取第一行 
    Set window = html.parentWindow 
    window.execScript "function " & callback & "(o){json=o}", "JScript" ' jsonp 回调函数、 
    window.execScript strHtml, "JScript" ' 解析 json 
    Set json = window.json ' 获取解析后的对象 
    WScript.Echo json.mobile, json.isp, json.province

    可以得到如下信息。

    最后看下 js 格式解析,这个是最简单的,什么都不用做,但是你要知道他的变量名。

    Set html = CreateObject("htmlfile") 
    Set http = CreateObject("Msxml2.ServerXMLHTTP") 
    http.open "GET", "http://pv.sohu.com/cityjson", False 
    http.send 
    strHtml = http.responseText ' 得到数据 
    ' 得到 var returnCitySN = {"cip": "218.72.14.14", "cid": "330100", "cname": "浙江省杭州市"}; 
    Set window = html.parentWindow 
    window.execScript strHtml, "JScript" ' 解析 js 
    Set js = window.returnCitySN ' 获取解析后的对象 
    WScript.Echo js.cname, js.cip, js.cid

    可以得到如下信息。

    js 格式的是最简单的,但要注意,变量名是他定的,所以你在 获取解析后的对象 那一步,要写上他的变量名。
    json 格式,我们只要给他加上变量名然后解析即可。
    jsonp 相对麻烦点,因为要写一个自定义回调函数。

    总的来说,方法差不多,只是解析部分稍微有点不同而已。
    用 htmlfile 解析,是不是比 正则 方便?

    以后玩 POST 别再用落伍的 instr+mid 或者 正则 去解析 html json了, htmlfile 才是王道。

  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/tinker/p/5766786.html
Copyright © 2020-2023  润新知