欢迎来到天天文库
浏览记录
ID:44240219
大小:29.00 KB
页数:5页
时间:2019-10-20
《微博爬虫研究与实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、微博爬虫研究与实现摘要研究了微博爬虫程序的4个关键模块:模拟登录、页面抓取、页面解析、任务调度。介绍了模拟登录的三种方法,通过账号密码登录、使用Cookie登录、使用第三方账号登录,并且探讨了三者登录方法的优缺点。探讨了IITMLParser和正则表达式在解析微傅页面时的运用方法和原则。提出了微博搜索爬虫的任务调度基本算法并且在此基础上进行改进增加了任务调度优化算法。在这些研究的基础上实现了一个微博搜索爬虫程序,该程序可以针对新浪微博和搜狐微博经关键词搜索的页面进行爬取。关键词微博;搜索;爬虫;模拟登录屮图分类号:TP309文献标识码
2、:A文章编号:1671-7597(2013)22-0054-012006年,美国网站“Twitter”推出了微博客服务,Twitter作为一个边缘项目诞生。2009年8月新浪推出微博产品,使用人数迅速增长,是目前最有影响力和最受关注的微博网站。微博使用的人数越来越多影响越来越大,微瞎为反腐、揭露社会恶行、声张正义提供了良好的渠道,然而微博仅仅是一个工具,好人可以用它做好事,坏人也可能用它做坏事。微博中不乏一些仇视社会的人或反动分子散步谣言蛊惑大众,影响社会稳定和谐。因此有必要对微博•中的敏感内容进行监控,及时掌握舆情动态做到早发现早纠
3、正。1微博爬虫的结构和流程首先管理中心发布配置文件,任务调度模块读取配置文件并开启多个线程调用页面抓取模块,页面抓取模块首先模拟登录微瞎网站,然后从微博服务器端获取页面源代码,之后交给页面解析模块解析入库。去重模块维护一个去重数据库,去重数据库中存储已爬取的最新微博的时间,任务调度模块根据该数据就可以避免重复爬取,页面解析模块也可以避免重复解析。2模拟登录搜狐微博的搜索页面只有用户登录之后才可以访问,因此如果不模拟登录爬虫程序虽然访问了正确的URL但是仍然爬不到想要的内容。新浪微博的搜索页面虽然不需要登录就可以访问,但是新浪微傅的搜索
4、页面有访问频率限制机制,每个账号平均30s访问一次,超过这个频率就会返回验证码,通过使用多个账号可以提高爬取效率,而这也需要模拟登录。研究和实现模拟登录要使用的主要工具是HttpClient和Httpfox。HttpClient是Java的一个开源包,用于模拟一个浏览器客户端的功能。Httpfox用來抓取浏览器和服务器之间通信的协议数据以分析微博网站的登录流程和传递的参数。3页面爬取新浪微博搜索页面的URL形式为:http://s・weibo.com/weibo/asdf&xsort二time&page二2,xsort=time表示实
5、时搜索,即搜索结果按时间排序,page二2表示搜索结果的第二页,asdf是搜索的关键词,通过改变这些参数的值我们就可以得到想要的结果。搜狐微博搜索页面的URL形式为,http://t.sohu.com/twsearch/LwSearch?key=asdf&pageNo=2o其中key的值是搜索的关键字,pageNo的值是搜索结果的页码,默认是实时搜索。按照上面的URL形式结合爬取的任务构造URL就可以爬取需耍的内容。4页面解析页面解析使用的工具主要是IITMLParser开发包和正则表达式。HTMLParser可以根据标签和标签属性的
6、值过滤HTML文档,也可以根据DOM的组织结构获取某个兀素的父节点或者子节点,比如,可以使用HTMLParser把一页中的微博区分开来。正则表达式则根据正则表达的值摘取指定内容中需要的内容,比如,有些字段值含在超链接里面,只能使用止则表达式摘取。两者各有所长,把两者结合起來可以很好的解析出微博数据。新浪微傅的解析方法表5-1,以userid字段内容的获取为例,在…之间的内容中使用正则表达式〃(?〈二uid二)(\d+)(?二&)〃即可获取userid的值。5任务调度任务调度模块主要解决如何高效地爬取多个任务问题。彩响微博爬虫效率主要
7、冇3个方面的因素。D访问频率的限制,由于限制是针对账号的,所以可以使用多个账号提高爬虫效率。2)串行爬取带來的问题,如果是串行爬取,首先爬完第一页后再爬第二页,在这段时间内微博会有更新,爬的第二页中就会包含之前爬的第一页的内容,极端情况下第二页的内容全是第一页的内容,解决办法就是并行爬取,一次开50个线程,把50页全部爬下来。3)并行爬取带來的重复爬取问题,第一轮爬取50页完毕后第二轮再爬取50页,而第一轮至第二轮可能只更新了2页内容,那么第二轮爬取就有48页是无效的。为了解决前两个问题,提出了调度的基本算法,程序软件开始运行时,爬虫
8、检测检测线程首先启动,读取上次程序退出时的任务列表以保证工作的延续性,然后开启新浪调度线程和搜狐调度线程,最后进入一个死循环每隔20s检查一下任务配置文件,根据任务配置文件的指示修改新浪调度线程和搜狐调度线程对应的任务列
此文档下载收益归作者所有