基于Python的新浪微博爬虫研究
摘要:对比新浪提供的API及传统的爬虫方式获取微博的优缺点,采用模拟登陆和网页解析技术,将获取的信息存入数据库中并进行分析。基于Python设计实现了新浪微博爬虫程序,可以根据指定的关键词获取相应的微博内容及用户信息。
关键词:新浪微博;Python;爬虫
0 引言
自2009年8月新浪推出微博业务以来,微博逐渐地进入人们的日常生活中。越来越多的人开始加入到社交网络中,与他人互动。继新浪之后,腾讯、网易等也相继推出微博业务,但新浪做为国内微博界的“元老”,仍是广泛受到人们的欢迎。如今,新浪微博用户已达5亿多人。
随着使用人数的直线上升,带来的是信息量的急剧膨胀。每天都有数以万计的信息在奔流。微博通过点赞,转发,评论功能将个人的声音快速放大到社会空间,将个人的行为放大成为社会行为。作为网络新媒体的代表,微博用户产生的大量微博数据以及用户之间的互粉,转发等关系作为真实社会关系的一种写照,为社会网络研究提供了绝佳的研究数据。基于微博的数据研究已成为当今社会科学和计算机科学研究的重点。
1 新浪API
API接口使用较为方便,通过一个接口就可以很方便得获取所需的信息,而无须了解具体实现过程。但是新版的新浪API接口却有着很大的限制。最主要的一点,如果要想获得某人的微博个人信息和发表的微博内容,就必须得到对方的授权许可。
新浪API使用OAuth2.0授权机制。授权流程如图1所示。
其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,ResourceServer是API月艮务器。
首先应用需要先引导用户到某个地址,用户授权后得到access token,然后使用获取的access token来调用API,以此来得到用户的信息和微博的内容。Access_token相当于是令牌,持有相应的令牌才能得到所需。除此以外,access token还有授权有效期,对于测试应用来说只有一天的时间。
除了这些限制外,新浪API针对一个用户在使用一个应用的请求次数上还有限制。对于测试授权来说,单个用户每个应用每小时只能请求150次。这对于爬取微博信息来说是不够的。正因为有如此诸多的不便,尽管API的实现对开发者是透明的,但笔者仍决定采用传统的模拟登陆方法,然后通过分析网页源代码来获取信息。
2 模拟登陆
新浪微博的内容只有在登陆后才可以获取。通过firefox+httpfox分析网页版微博登陆方式可以发现主要分为+步骤:(1)浏览器向新浪的服务器发送了一个GET请求报文,用于获取servertime,nounce字段,这两个字段是随机字段,每次登陆都不相同,用于加密用户名和密码;(2)用BASE64算法加密用户名,用RSA算法加密密码,向登陆URL发送包含加密后的用户名和密码的POST请求;(3)新浪服务器收到请求后与信息库进行比对,如果比对成功则发送一条含重定向的应答报文,浏览器解析得到最终跳转到的URL,打开该URL后,自动将该信息写入COOKIES,登陆成功。
3 网页分析
以新浪官方的搜索平台为搜索入口,输入关键词后,构造相应url。分析网页源代码,可以发现页面上的所有微博内容都在以 公司地址: 北京市西城区德外大街83号德胜国际中心B-11
客服热线:400-656-5456??客服专线:010-56265043??电子邮箱:longyuankf@126.com
电信与信息服务业务经营许可证:京icp证060024号
Dragonsource.com Inc. All Rights Reserved