新浪微博 爬取实现之微博登录
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时就出现了一些问题。
但是碰上几个问题,这里先提一下,有时间再总结吧。
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附带的参数有
?
接着分析下这些参数吧:
?
servertime在哪里忘记了,通过获取时间/1000就可以得到servertime了;
?
sp的得到就相对比较麻烦一些,是通过password,servertime,nonce 共同编码后得到的数据;使用的编码函数是
?
?
?
?
要访问其他的之前需要登录的页面时,这需要在提交的http包的Header加上Cookie项,值为获得的这几个参数加上wvr=4就好了。这就会发现原来不能直接访问的页面,现在可以访问了。
分析数据是个挺花时间的过程,但最终能实现还是很爽的。。。
一些其他的参数还没去理解他们的意义,爬取微话题的主页是没问题的,但使用一些新浪微博api时就出现了一些问题。
相关文章推荐
- Laravel5.1 实现第三方登录认证(包括微博、QQ、微信、豆瓣)
- 新浪微博自动发送微博 功能已实现(net)
- java实现模拟登录新浪微博
- python实例-通过cookie实现登录csdn获取自己微博的文章列表
- 实现新浪微博授权一次、多次登录的功能
- 使用Mob工具实现QQ、微信、新浪微博登录
- 使用Sharesdk实现第三方平台登录(qq,新浪微博)
- 关于解决微博登录在手机端无法实现及微博退出时FC的问题
- java实现微博,QQ登录
- 利用java语言在eclipse下实现在新浪微博开发平台发微博
- iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现
- 用webdriver实现自动登录和自动发微博文字图片
- 使用share SDK实现新浪微博授权登录分享(1.x版本)
- 基于Spring的新浪微博第三方登录实现
- 手机第三方新浪微博登录php api实现分析
- 使用友盟SDK实现新浪微博登录
- cordova 实现第三方登录及分享,qq,微信,微博,插件的使用和改动
- 新浪微博SSO登录方式及OAUTH2.0认证和获取我的微博
- 新浪微博第三方登录实现
- ionic第三方QQ,微博,微信的登录,分享功能的实现和注意事项