码迷,mamicode.com
首页 > Web开发 > 详细

VBS做网页采集(转载)

时间:2016-08-12 23:35:35      阅读:435      评论:0      收藏:0      [点我收藏+]

标签:

 

一、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 才是王道。

VBS做网页采集(转载)

标签:

原文地址:http://www.cnblogs.com/tinker/p/5766786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!