杀猪用牛刀 发表于 2020-4-2 23:53

【新手学Python爬虫】微博网页PC端抓包分析和模拟登录

本帖最后由 杀猪用牛刀 于 2020-4-2 23:59 编辑

首先我是一个python爬虫的新手,模拟登录也是我看b站模拟登录教学加自己琢磨完成的,其中很多分析很粗糙,还希望大家多多包涵:lol

话不多说,直接进入正题
微博是重要的信息平台,也是大家爬虫垂涎欲滴的一个去处。但是网页微博如果不登录账号,只让你看一页的内容,只要登录的账号才能放飞自我,爬取福利姬的内容{:1_918:} 。

比如看到一个美女的微博,美图很多,想爬取下来。


但是当你看得兴致勃勃,想翻到下一页时


微博强行要求你登录。真是太可恶了,必须有python给他登录安排上!


模拟登录第一步,分析登录需要的参数
我们在浏览器登录的时候,虽然只输入账号密码,有时候还要输入验证码。但是其实其中还有很多参数需要提交到服务器,这些都是浏览器帮你做了。
但我们在利用python进行模拟登录的时候,如果只提交账号密码,肯定就被服务器认出来,直接把你拒绝。(毕竟大部分服务器是讨厌爬虫的)
因此,我们需要找到登录微博的时候需要提交那些数据。

抓包
要分析肯定要抓包的拉,我这里用的工具是 fiddler4 。因为其实是第一次用fiddler,不是很熟悉,因此抓了一大堆。但好在是通过“login”这个关键词,将这些包找到。

我只是截取了一部分,其实我fiddler的页面抓了一大堆,然后看得眼睛都要瞎了。

后面在看URL 的英文,发现有两个链接是登录的关键。

关键链接1:https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.19)    #这个链接有明确表示是作为登录作用的
关键链接2:https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.19)&_=1585637065176#这个链接的prelogin表示预登录

第二个关键链接可要我老命了,老是抓不到,后面才发现要清除缓存才行,不然微博服务器不会再发送这个东西过来{:1_924:}

然后看一下表单内容,看看登录要上传啥信息上去


一堆不知道啥意思的东西,又臭又长。
于是我换两个不同账号上去登录,看看哪些参数是会变化的,那些是不变化的。
将会变的参数定点击破!!

经过我的n次尝试,发现表单二的“su”, "_" 是变化的。 表单一的 "su","servertime","nonce","rsakv","sp"是变化的。

但这些变量是啥意思呢?

我发现包中还有一个js文件,且名字也是 ssologin.js,这部就是 关键链接1 中提到的js文件吗?

解密变量的钥匙一定在这里面

赶紧打开看看



好家伙,有两千多行,看这些变量明显是登录作用的,直接搜索关键词,看看这些变量到底是什么东西。

首先搜索 “su”,看看你是个什么东西
经过一顿搜索,终于找到:


原来是用base64 加密的 用户名啊,拿下!

然后是“_”

原来是时间戳,看表单是十三位的时间戳,到时候让python时间戳乘以1000就可以了。

这样预登录需要提交的表单内容就全部搞清楚了,于是将其post到服务器上面,得到如下结果:

其中红色括号是我们需要的东西,用正则表达式提取就OK了。那个 InsecureRequestWarning 可以不管,反正程序可以正常运行就行。

但是,这些内容并不能直接提交,因为提交过程中js还对这些表单的某些变量进行了一些处理

先看图


这里可以看到,微博对公钥 和 密码 都进行了rsa的处理。

也就是我们在提交的时候,也要将公钥和密码按其格式加密。

于是终于获取到登录表单所需要的所有变量。

但看抓包的登录页面,好像还是不行,说要什么新浪通行证。



也就是箭头所指向的内容,看来还得找这个通行证。这里面有个关键线索是“ticket”

这样我继续在fiddler中寻找,找到一个也有ticket的URL:https://passport.weibo.com/wbsso/login?ticket=ST-NjA0MDcwNjc3OA%3D%3D-1585637069-gz-31D972B7B5D5D4D278336F717F7ED6E1-1&ssosavestate=1617173069&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript0&client=ssologin.js(v1.4.19)&_=1585637070397



这里 ssosavestate 变量不知道,老规矩继续js文件中看看。



可以看到ssosavestate 就是一个时间戳加了一个叫 tmpData 的东西,这东西是啥,只能在js中找答案。



最后发现tmpData不管怎么样都是0, 也就是ssosavestate 本质上就是时间戳。。。。
微博搞这个幺蛾子也不知到想干嘛。。。想给分析爬虫增加难度吗?:(eew

于是经过重重阻碍,终于得到所有登录需要的表单参数,于是提交参数,赶紧确认一下能否登录成功。

确认的方法是这样,如果是未登录状态,html的 title是这样的:

显示的是 “微博-随时随地发现新鲜事”字样。

而登录成功则是显示 :我的首页 微博-随时随地发现新鲜事。

运行代码看看:

成功登录!!!


最后
这个方法虽然登录是成功,但是可能因为验证码问题,所以提交五六次表单,基本就成功个一次。。
后面还得好好研究学习。。。











淘金顽猴 发表于 2020-4-10 00:47

本帖最后由 淘金顽猴 于 2020-4-10 00:49 编辑

你好,有个问题是,登录后,抓包返回通行证界面,是一个长链接,但是post返回的数据是,明显跟抓包不一致啊,登陆应该是通过的,为何跟抓包返回的不一致,有人遇到过这个情况吗?楼主有联系方式吗?
<title>新浪通行证</title>
               <meta http-equiv="refresh" content="0; url='https://login.sina.com.cn/crossdomain2.php?action=login&entry=weibo&r=https%3A%2F%2Flogin.sina.com.cn%2F&sr=1920%2A1080'"/>
                <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
                </head>
                <body bgcolor="#ffffff" text="#000000" link="#0000cc" vlink="#551a8b" alink="#ff0000">
                <script type="text/javascript" language="javascript">
                        location.replace("https://login.sina.com.cn/crossdomain2.php?action=login&entry=weibo&r=https%3A%2F%2Flogin.sina.com.cn%2F&sr=1920%2A1080");
                </script>


应该是这种才对,好奇怪啊!!!!!
        <script type="text/javascript" language="javascript">
                location.replace("https://login.sina.com.cn/crossdomain2.php?action=login&entry=weibo&r=https%3A%2F%2Fpassport.weibo.com%2Fwbsso%2Flogin%3Fssosavestate%3D1617886419%26url%3Dhttps%253A%252F%252Fweibo.com%252Fajaxlogin.php%253Fframelogin%253D1%2526callback%253Dparent.sinaSSOController.feedBackUrlCallBack%2526sudaref%253Dweibo.com%26display%3D0%26ticket%3DST-NjA3MzA0MDk2Mg%3D%3D-1586350419-yf-29DE616104E2C71030B45B26B061033E-1%26retcode%3D0&login_time=1586350419&sign=6675215c5feefa48&sr=1920%2A1080");
                </script>

杀猪用牛刀 发表于 2020-4-4 08:34

冰镇苏打水 发表于 2020-4-3 08:21
控制台切换成手机浏览器模式.会简单很多..

你说的是登录 wap版的网页微博吗?wap版提供的高级搜索比 pc版的要弱很多。。。

maoxingren 发表于 2020-4-3 00:07

小可爱圆圆 发表于 2020-4-3 00:14

感谢分享,谢谢。

superzhangxue 发表于 2020-4-3 00:31

感谢分享,学习了

shitouhn 发表于 2020-4-3 01:07

看起来好麻烦的样子,一般人玩不来。

dogz 发表于 2020-4-3 06:43

验证码、反爬虫等问题,尚祈求先进们多多指导了,感谢分享。

hyoulin68 发表于 2020-4-3 07:10

感谢分享,谢谢。

qll24680 发表于 2020-4-3 08:07

膜拜大佬

wxue 发表于 2020-4-3 08:14

虽然没看明白,但还是学习了

冰镇苏打水 发表于 2020-4-3 08:21

控制台切换成手机浏览器模式.会简单很多..
页: [1] 2 3
查看完整版本: 【新手学Python爬虫】微博网页PC端抓包分析和模拟登录