您的位置:首页 > 其它

新浪微博 爬取实现之微博登录

2013-05-02 17:27 253 查看
实验需要新浪微博关于某一主题(如“云计算”、“大数据”等)的内容数据,原本打算是直接使用新浪微博的API去抓取,被审核不过和授权机制完全击倒。所以索性直接用HttpClient模拟抓取得了。
但是碰上几个问题,这里先提一下,有时间再总结吧。
1. 微博不登陆不会完全显示结果,因此必须通过模拟登陆来解决这个问题,还好有这篇文章,不然不知道还要探索多久。
2. 用机器直接爬取数据会碰到网站防抓取问题,必须用一些机制规避。
3. 每次搜索只能返回50个/页*50页=2500条结果,对于实验来说规模太小,必须想方法扩大查全率,抓到更多主题相关的微博。

原文转自:http://www.cnblogs.com/xwsk/archive/2011/11/14/2248857.html
  最近做一个东西,需要抓取新浪微博的微话题,新浪微博api有所限制所以就没用新浪微博api了,想直接的从网页上获取内容,但微博的很多网页都需要登录后才能浏览的,所以做了个新浪微博的登录功能,基本需要的功能实现了,但并不健全。
对于新浪微博的页面是要用户登录之后才能进入的,如http://weibo.com/pub/topic,那么爬虫也必须登录上新浪微博才能爬取内容,在这里实现下新浪微博的登录功能,到现在还有一些问题没解决,但可以实现必须登录后才能进入的页面的文本捕获了。
先分析下微博登录提交的内容,新浪微博主页登录向服务器提交的是使用POST的,post附带的参数有

?
  在这些参数中su是用户的用户名使用base64编码的;servertime是该动作的开始时间,nonce是随机产生的6为随机数,pwencode:wsse应该指的是密码格式的编码了,sp是密码的通过编码后的形式。对于我现在的应用只需要这几个参数就好了。
接着分析下这些参数吧:

?
  用户名通过了urlencode和base64编码后才提交的;
servertime在哪里忘记了,通过获取时间/1000就可以得到servertime了;

?
  nonce参数是上面函数得到的;
sp的得到就相对比较麻烦一些,是通过password,servertime,nonce 共同编码后得到的数据;使用的编码函数是

?
  得到得到sp的函数为

?
  必要的参数已经分析到了,只要封装http包先服务器发送即可。我使用的是java实现,把上面一些javascript函数改写成java函数

?
  SinaSSOEncoder编码类的实现

?
  得到这几个参数后连通其他的一些参数,其他的参数内容不需要改变,一起封装成HTTP包先服务器发送即可,到这一步,已经完成得差不多了,提交到服务器后服务器返回了一些Cookie,有六个tgc,SUE,SUP,ALC,ALF,SUR。登录新浪微博提交的Cookie有很多,但在访问需要用户登录的页面只需要这里面的2个参数即可, SUE,SUP;还有一个wvr的参数,其值为4,其他的参数还没去理解,为了方便我把所有服务器返回的Cookie全都封装在HTTP包里了。
要访问其他的之前需要登录的页面时,这需要在提交的http包的Header加上Cookie项,值为获得的这几个参数加上wvr=4就好了。这就会发现原来不能直接访问的页面,现在可以访问了。
分析数据是个挺花时间的过程,但最终能实现还是很爽的。。。
一些其他的参数还没去理解他们的意义,爬取微话题的主页是没问题的,但使用一些新浪微博api时就出现了一些问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: