做程序开发的码农面临编写爬虫程序是经常遇到的事情,码农本身就是一个苦逼的象征,除了开发一些cms类的管理软件之外,还可能需要编写一些类似百度蜘蛛和谷歌机器人的爬虫工作,没办法,身在江湖,老板一声令下,硬着头皮也要去做,如果说半个“不”字,直接回受到老板的冷落,甚至边沿化,为了保住程序员的饭碗,还是要去查阅资料,完成项目工作。
今天详细介绍下编写实时爬虫抓取微博热搜榜的数据。
首先,我们准备两个文件,一个asp程序编写的爬虫文件,另一个使用vb语言,也就是visal basic编程语言写一个定时工具,实时触发爬虫文件,然后把这两个文件放在阿里云服务器上,最好选择阿里云美国服务器,不至于为了写个爬虫程序,还要去ICP备案,那样太麻烦。
爬虫文件原理,通过xmlhttp异步请求微博热搜榜页面数据,设置以下对象:
set http=createobject("MSXML2.ServerXMLHTTP")
这个组件无需在云服务器注册,win系统自带这个服务应用组件,这个组件可以请求远程网页数据,目标url当然是微博热搜页面。
以下为具体代码:
function getHTTPPage(url) ’创建函数名称,并传递参数
dim Http
set http=createobject("MSXML2.ServerXMLHTTP") ‘创建组件对象
Http.open "GET",url,false ‘发送远程请求数据
Http.send()
if Http.readystate<>4 then ’数据返回状态
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"utf-8") ‘返回数据编码格式
set http=nothing
if err.number<>0 then err.Clear 、程序报错隐藏
end function
通过以上函数获取远程网页数据,然后对返回数据进行处理,返回数据中既包括我们需要的热搜词数据,也含有很多无用的格式以及其他噪音数据,我们利用数据截取字符串,来获取主体数据。
startnub=instr(C_baidu_all,"<tr class=""thead_tr"">")
endnub=instr(C_baidu_all,"<!--/内容-->")
这个类似数据采集的起始字符串特征,要唯一标示,然后结束字符串特征,获取中间的重要数据及格式。
再利用正则规则剔除内含的html格式,从而获取每行热搜词,并生成文件,把数据储存在文件中。
整个过程包含远程请求数据、处理数据、储存数据三个重要环节,每个环节都有很多细节要处理,感兴趣的码农可以查阅相关资料。
最后一步,还要利用basic桌面级编程语言写个定时器,定时请求爬虫文件,间隔时间执行,因为微博热搜词也在实时变化,用户的需求一直都在变,我们可以设置间隔多少分钟自动重新获取数据并保存下来。
visal basic编程环境中有个定时器控件,可以直接使用,还有webbrowser控件,主要用于请求网页的,类似内嵌的小型浏览器,具体用法可以参考文献。