ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:303.81KB ,
资源ID:9280357      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9280357.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(新浪微博数据爬取研究.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

新浪微博数据爬取研究.docx

1、新浪微博数据爬取研究新浪微博数据爬取研究作者:陈智 梁娟 谢兵 傅篱来源:物联网技术2016年第12期摘 要:新浪微博的快速发展促进了基于微博数据的研究发展,如何获取微博数据是开展相关研究的首要问题。文中就分析爬取新浪微博数据的方法,提出了一种基于Python的语言,直接设置已登录用户Cookie信息,模拟浏览器访问的新浪微博数据爬取方案,解决了不使用新浪微博开放平台API爬取微博数据的主要问题,所实现的爬虫程序编程简单、性能稳定,能有效获取微博数据。关键词:新浪微博;数据爬取;微博爬虫;Python中图分类号:TP391;TP311 文献标识码:A 文章编号:2095-1302(2016)1

2、2-00-040 引 言随着互联网的不断普及,人们越来越多地参与到互联网的社交活动中,微博作为典型的互联网社交活动,得到了迅速发展。新浪微博是国内出现最早,也是规模最大的微博社区,新浪微博数据中心发布的“2015微博用户发展报告”指出:“截止2015年9月,微博月活跃人数已达到2.22亿,较2014年同期相比增长33%;日活跃用户达到1亿,较去年同期增长30%。随着微博平台功能的不断完善,微博用户群逐渐稳定并保持持续增长。”1微博用户群的增长使得基于微博数据的社交网络分析2、用户行为分析3, 4和网络数据挖掘5等相关研究越来越受到人们的重视,而如何从微博爬取感兴趣的数据则成为研究者要解决的首要

3、问题。本文分析微博数据的爬取方式,提出一种基于Python模拟浏览器登录的微博数据爬取方案,并讨论针对微博反爬机制的相关处理。1 微博数据的爬取方式微博数据的爬取通常有两种方式,一种是调用新浪微博开放平台提供的微博开放接口,另一种是开发爬虫程序,模拟微博登录,分析获得的HTML页面,提取所需信息。1.1 调用微博开放接口新浪微博开放平台6提供了二十余类接口,覆盖了微博内容、评论、用户及关系的各种操作,理论上该方法是最直接、方便的方式。但新版的微博开放接口存在一些限制,对于小型研究团队或个人而言不是很方便,突出表现在以下几点:(1)微博开放接口使用Oauth2.0认证授权,如果希望得到另外一个用

4、户的个人信息和微博内容,则必须由该用户授权;(2)微博开放接口存在访问频次限制,对于测试用户的每个应用,每小时最多只能访问150次;(3)很多研究所需要的数据只能通过高级接口才能访问,需要专门申请和付费。正是因为这些限制的存在,自己设计开发网络爬虫程序获取微博数据就成了必不可少的备选或替代方案。1.2 开发微博爬虫程序设计开发微博爬虫程序需要分析新浪微博的特点、明确爬取数据的目的及用途,选择合理的开发语言,保证高效、稳定地获取微博数据。1.2.1 新浪微博的特点与一般网站相比,新浪微博具有以下特点:(1)新浪微博面向登录用户,在访问微博数据前,用户必须先登录;(2)微博博文的显示采用了延迟加载

5、机制,一次只显示一个微博页面的部分博文,当用户浏览博文滚动到底部时,才继续加载当页的其他博文;(3)新浪微博有较完备的反爬虫机制,一旦微博服务器认定爬虫程序,就会拒绝访问。基于新浪微博的上述特点,在设计微博爬虫时,需要对以上特点进行针对性处理。1.2.2 开发语言选择从快速获取微博数据的角度看,Python是开发微博爬虫的首选语言,其具有如下特点:(1)Python是一种解释型高级语言,具有文字简约、容易学习、开发速度快等特点;(2)Python具有较丰富的库及第三方库,在开发爬虫方面比其他语言方便。考虑新浪微博在一段时间后就会微调其数据格式,因此使用Python开发微博爬虫程序具有较高的易维

6、护性。2 微博爬虫的实现2.1 微博爬虫的框架结构本文讨论的微博爬虫程序包括爬虫调度器、URL管理器、页面加载器、HTML解析器和数据输出器五个功能模块,其框架结构如图1所示。图1 微博爬虫的框架结构2.1.1 爬虫调度器爬虫调度器是爬虫的控制程序,主要负责协调和调度微博爬虫的各个模块,其核心功能包括以下几项:(1)实现爬取微博数据的流程;(2)控制其他模块的执行;(3)模拟浏览器登录,为页面请求添加Headers信息;(4)控制微博访问频率,避免反爬虫机制拒绝访问。2.1.2 URL管理器微博爬虫采用广度优先遍历策略提取需要的数据,URL管理器需维护已经爬取的URL列表和等待爬取的URL列表

7、。在得到新URL之后,首先检查已经爬取的URL列表,如果该URL不在列表中,则将其添加到等待爬取的URL列表。2.1.3 页面加载器页面加载器根据爬虫调度器提供的Headers信息以及URL管理器提供的URL,向微博服务器发出请求,获得所请求的HTML页面。为了避免爬取过于频繁,导致微博服务器无法及时响应,或被服务器反爬虫机制拒绝访问,页面加载器采用定时机制限制加载页面的频率。2.1.4 HTML解析器HTML解析器对页面加载器提供的HTML页面进行解析,获取需要的数据。如某位微博用户发表的博文内容、转发数、点赞数、评论数等。同时HTML解析器会根据需要将新得到的URL反馈给爬虫调度器。2.1

8、.5 数据输出器数据输出器输出HTML解析器解析后的数据。输出的数据采用JSON格式,其格式与使用新浪微博开放平台API获取的数据格式基本一致,保证不同爬取方式得到的数据能够被统一分析和处理。2.2 模拟浏览器登录要访问微博数据,必须要先登录。可以用爬虫程序模拟微博用户登录7, 8。爬虫程序首先向微博用户服务器发送登录请求,然后接收服务器返回的密钥,再结合用户名、密码、服务器返回的密钥生成验证信息,登录服务器。只要保持与服务器的Session会话,就可以从服务器获取微博数据,从而进一步分析。这种做法实现比较复杂,并且需要了解服务器验证信息的细节。因此采用另一种相对简单的做法,即本文微博爬虫的做

9、法。首先在浏览器中登录微博,然后使用浏览器提供的开发者工具查看请求页面的请求头信息。例如使用Firefox登录微博后,利用Firefox提供的开发者工具可以看到如图2所示的请求头信息。从图2可以看出,“Referer”的内容是访问微博的URL,其中“”是当前用户在微博的唯一标识id;“Connection”的值为“keep-alive”,标识Cookie永不过期;“Cookie”的内容是成功连接微博服务器后保存在本地的Cookie,利用它可以简单、快速地访问新浪微博。首先需复制“”的内容,然后在Python中定义headers对象,设置Cookie和Connection,最后在每次访问微博页面

10、时,都将headers作为参数添加到Request对象中,得到微博页面。这样在Cookie的有效期内就可以直接访问微博,并提取自己需要的数据。采用这种做法,只需以下代码就可以实现微博的登录并简单获取页面数据:headers = Cookie: ,Connnection:keep-aliveurl = uhttp:/request = urllib.request.Request(url, headers=headers)rsponse = urllib.request.urlopen(request)page = response.read()2.3 微博页面解析爬虫程序成功登录到微博,获取微

11、博页面后,就可以对得到的HTML脚本进行解析,提取需要的数据。一条博文的数据主要包括发表博文的用户昵称、用户Uid、主页链接、博文内容、发表时间、转发数、评论数、点赞数等。除此以外,转发其他用户的微博是非常常见的现象,因此在提取博文数据时,也需要考虑被转发的微博用户的相关数据信息。进一步分析微博页面可以发现,每一条博文均是以开始,内部以标签形成树结构,其主结构如表1所列。一条博文博文的具体内容发博文用户的昵称、Uid、主页链接博文的发表时间博文内容被转发的博文信息博文的转发数、评论数、点赞数但博文的数据表示并不统一。发博文用户的昵称、Uid、主页链接以属性形式存放于标签中,博文的发表时间以属性

12、形式存放于标签中;博文内容直接以HTML文本形式存在标签内,博文的转发数、评论数、点赞数,存放于的结构中,具体数值以HTML文本形式存放在标签内。另外,博文的转发数、评论数、点赞数与被转发博文的转发数、评论数、点赞数在结构上也有一定的区别。正是因为存在这些差异,简单使用标签过滤很难有效取得需要的数据。为了方便微博数据的提取,本文使用lxml作为微博页面解析的工具。lxml是一个用于HTML/XML解析,并建立DOM的第三方Python库,它可以迅速、灵活地处理XML格式的文档,支持XPath和 XSLT,并且包含了ElementTree、html5lib、BeautfulSoup等库。HTML

13、解析器使用lxml,可以使用以下语句快速解析所获取的微博页面,建立节点化的DOM结构:import lxml.html.soupparser as soupparserimport lxml.etree as etreedom = soupparser.fromstring(html)etree.tostring(dom)此时只要根据分析到的微博页面结构,逐一访问DOM中的相关节点,就可以获得所需要的微博数据。2.4 延迟加载的处理新浪微博页面在刷新时,采用了Ajax的延迟加载(Lazy Load)技术,一开始不会把一页的所有博文都加载显示出来,而是只加载显示其中的15条博文,当滚动条滚动到页

14、面底部时,自动加载另外15条博文。所以一个完整的微博页面需要滚动加载2次才能获得全部45条博文。一种处理办法是多次发送模拟HTTP请求的GET方法,构建响应的URL,完成整页加载8;另一种处理办法是使用selenium模拟浏览器滚动条操作,在Ajax加载后再获取页面数据,这种方法的参考代码如下:from selenium import webdriverfrom mon.exceptions import TimeoutExceptionfrom mon.action_chains import ActionChainsdriver = webdriver.Firefox()driver.se

15、t_page_load_timeout(30)def scroll(driver):driver.execute_script( function () var y = document.body.scrollTop;var step = 100;window.scroll(0, y);function f() if (y document.body.scrollHeight) y += step;window.scroll(0, y);setTimeout(f, 50); else window.scroll(0, y);document.title += scroll-done;setTi

16、meout(f, 1000);)3 反爬虫机制及对策如果爬虫爬取过“猛”,就会为微博服务器带来不小的压力。新浪微博有比较完备的反爬虫机制,用以识别和拒绝爬虫访问。虽然新浪官方并没有提供具体的反爬虫机制说明,但是通过分析常用的反爬虫策略9,可以发现主要的爬虫识别方法有以下几种:(1)通过识别爬虫的User-Agent信息来拒绝爬虫;(2)通过网站流量统计系统和日志分析来识别爬虫;(3)通过实时反爬虫防火墙过滤爬虫。为了避免微博反爬虫机制拒绝访问,本文的微博爬虫采取了伪装User-Agent与降低请求访问频率来反爬虫对策。3.1 伪装User-AgentUser-Agent用于描述发出HTTP请求

17、的终端信息。浏览器及经过企业授权的知名爬虫如XX爬虫等都有固定的User-Agent信息,本文讨论的微博爬虫伪装浏览器通过微博登录来爬取特定数据。在请求头headers中,采用交替伪装User-Agent的方法来避免爬虫User-Agent的识别和访问流量统计异常。例如以下四个User-Agent信息,分别从使用Windows Edge、Firefox、Chrome和360浏览器访问微博时的请求头中提取。Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/5

18、37.36 Edge/13.10586Mozilla/5.0 (Windows NT 10.0; rv:47.0) Gecko/20100101 Firefox/47.0Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36在Python中定义

19、headers对象时,交替随机选择其中的一条添加到headers对象中,将爬虫的HTTP请求伪装成某个浏览器的访问。3.2 降低请求访问频率如果爬虫程序爬取过于频繁,则会降低微博服务器的响应效率,影响一般用户的正常使用。反爬虫防火墙往往会根据请求的访问频率来判断客户端是一般用户的人工操作还是爬虫程序的自动运行。因此适当降低爬虫程序的请求访问频率既可以避免连接超时错误的发生,还可有效应对反爬虫机制。4 结 语综上,本文实现的微博爬虫能够有效爬取新浪微博数据,实现简单、性能稳定,并能较好的避免反爬虫机制的检测。其具有如下主要特点:(1)直接获取已登录用户的Cookie,避免了模拟登录的繁琐;(2)

20、基于lxml解析微博数据,简化了数据筛选的操作;(3)使用selenium模拟滚动条滚动,解决了Ajax延迟加载页面的问题;(4)使用伪装User-Agnet以及延迟访问来避免反爬虫机制的过滤。但该设计的主要缺陷是没有使用多线程导致爬取效率不高,不适用于海量数据爬取,用户可根据需要进行适当改动。参考文献1新浪微博数据中心.2015微博用户发展报告R.2015.2曹玖新,吴江林,石伟,等.新浪微博网信息传播分析与预测J.计算机学报,2014(4):779-790.3叶勇豪,许燕,朱一杰,等.网民对“人祸”事件的道德情绪特点基于微博大数据研究J.心理学报,2016,48(3):290-304.4王

21、晰巍,邢云菲,赵丹,等.基于社会网络分析的移动环境下网络舆情信息传播研究以新浪微博“雾霾”话题为例J.图书情报工作,2015,59(7):14-22.5丁兆云,贾焰,周斌.微博数据挖掘研究综述J.计算机研究与发展,2014,51(4):691-706.6微博开放平台API文档EB/OL.http:/7周中华,张惠然,谢江.基于Python的新浪微博数据爬虫J.计算机应用,2014,34(11):3131-3134.8吴剑兰.基于Python的新浪微博爬虫研究J.无线互联科技,2015(6):94-96.9邹科文,李达,邓婷敏,等.网络爬虫针对“反爬”网站的爬取策略研究J.电脑知识与技术,2016,12(7):61-63.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1