文档章节

深入分析微博密码加密and百万级数据采集分享(登录篇)

o
 osc_zoa3moe9
发布于 2019/12/09 11:54
字数 1125
阅读 17
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、前言

  1. 此文章主要是对微博微博关键词的检索结果进行采集,但是微博的采集需要登陆,所以此程序分为登陆程序和爬虫程序两部分;
  2. 微博要实现规模性数据采集自然少不了大量账号,这就需购买大量账号以及批量登陆,但是都买的账号都会对IP进行限制(一个ip下面最多登陆两个账号),所以无法实现批量登录,只能将采集程序与登录程序以1:1的形式部署多个节点,通过调用关键词任务分发接口来实现大量采集;
  3. 微博的关键词采集可以在weibo.com以及weibo.cn两个站点进行采集,这里主要针对weibo.com进行采集;
  4. 这篇文章复制的是我在csdn上的文章,原文链接为:https://blog.csdn.net/qq_38742052/article/details/103416912

二、登陆

     登陆主要分为两种方式:selenium+chrome以及模拟登陆

  1. selenium+chrome:这个方法比较简单,直接控制浏览器登陆就行,登陆可能会出现验证码,验证码是最普通的那种,直接调用打码平台即可;
  2. 模拟登陆:模拟登录比较麻烦,这一块会详细说,微博的登录为RSA加密登录,RSA加密原理大家可以自己百度下,这里就不赘述了,登录分为两部分,首先为预登陆,会返回加密公钥以及其他一些必要的参数,第二步把这些参数+加密通过RSA加密,公钥,验证码(如果有)请求登录链接即可成功

首先预登录,一般会在输入账号以后会触发此请求,也可能会在点击登录后触发

预登陆链接为:https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=MTMyNzg4MzQwMjE%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1575613055938

主要参数:

​  

其中su为账号的base64加密,_为当前时间戳,其他参数为固定值

返回值:返回值分两种情况,一种有验证码,一种无验证码,当需要输入验证码时会返回pcid字段,不需要输入时不会返回,结果如下图

 

有用的几个参数为servertime,nonce,pubkey,rsakv,pcid(如果有)。

接下来为获取验证码,验证码链接为:"https://login.sina.com.cn/cgi/pin.php?r=86006630&s=0&p="+pcid,参数r随意,p为pcid,请求时请求头加上UA和refere,返回验证码后代用打码平台来识别验证码

最后开始重头戏,密码加密部分,首先输入账号和密码登录一次,点击登录之前先打开浏览器控制台清空所有请求,接下来观察登录过程所出发的请求

很明显,第二个请求为登录触发的js,把鼠标放在Initiator对应的位置就会出现这个 JS文件包含的方法和对应的路径,请求表单里面包含的参数su、nonce、rsakv与上面提到的是一致的(我的不一致时因为我两次登陆使用的不是同一个账号),sp为rsa加密后的结果,然后去sources里面找到对应路径下面的js文件,在里面搜一下这几个参数。

784行这里这几个参数都出现了,而且782行是用户名的base64加密,在这里打上断点,一步步调试提取出加密js,调试的过程比较繁琐,需要耐心;还有个比较快的方法是直接用这个js文件,使用里面的sinaSSOEncoder对象进行加密,不过最后在代码中执行js文件时还是要吧里面一些没用的东西删除掉比如windows,alert等,785-790行为加密需要的一些参数,都是预登录得到的,需要注意的是servertime也是预登录返回的servertime不是当前时间,第791行的b就是加密后得到的结果,即第二步请求sp参数。

至此,所有登录需要的参数都已经得到了,带上所有参数请求(post)这个链接https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.19)获取返回的cookie就能直接登录了。

登录代码git地址:https://github.com/JetLei/MblogLoginDemo

下一篇将是微博百万数据采集架构的流程分享。

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录

参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/flyleopard/article/details/51148904 http://www.tuicool.com/articles/uIJzYff http......

daweilang
2018/06/21
0
0
PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录

参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/flyleopard/article/details/51148904 http://www.tuicool.com/articles/uIJzYff http......

daweilang
2017/03/29
0
0
【轻量级微博爬虫】自动爬取用户信息及微博内容(2019年3月可用)

版权声明:博文千万条,版权第一条。转载不规范,博主两行泪 https://blog.csdn.net/qq_39521554/article/details/87940001 前言 为什么写这个博客,主要是CSDN上有几个比较热的微博爬虫,基...

刺客五六柒
2019/02/26
0
0
关于token的理解

什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个...

osc_f1tgjw6d
2019/07/24
4
0
关于token的理解

什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个...

osc_6ew996ka
2019/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Xcode中的版本与版本 - Version vs build in Xcode

问题: I have an app that I developed with Xcode 3 and recently started editing with Xcode 4. In the target summary I have the iOS application target form with fields: identifie......

javail
28分钟前
7
0
如何在Python中将字典键作为列表返回? - How to return dictionary keys as a list in Python?

问题: In Python 2.7 , I could get dictionary keys , values , or items as a list: 在Python 2.7中 ,我可以将字典键 , 值或项作为列表获取: >>> newdict = {1:0, 2:0, 3:0}>>> newd......

技术盛宴
今天
17
0
2020世界人工智能大会开幕首日 百度与浦发银行达成战略合作

本文作者:y****n 7月9日,2020世界人工智能大会开幕首日,百度与浦发银行签署战略合作协议,将在人工智能、金融科技等多个领域进一步深化合作。双方将优势互补,实现人工智能技术在金融领域...

百度开发者中心
昨天
26
0
Java中C ++ Pair 的等价物是什么? - What is the equivalent of the C++ Pair in Java?

问题: Is there a good reason why there is no Pair<L,R> in Java? 有没有一个很好的理由说明Java中没有Pair<L,R> ? What would be the equivalent of this C++ construct? 这个C ++构造的......

富含淀粉
今天
18
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部