本篇文章作者 ius,本文属 i 春秋原创奖励计划,未经许可禁止转载
原文地址:https://bbs.ichunqiu.com/thread-63784-1-1.html
微博反爬机制逆向分析
前言
相信每个接触爬虫的人,肯定会对微博进行一点点的骚操作。但是我们在对微博进行请求的时候,微博是会对cookie
校验的,而我们在模拟操作的时候,是直接把浏览器的cookie
进行copy
,虽然我没有测试过这个cookie
的有效期,但我觉得这样只适合日常测试,教学等。不能实现一劳永逸。
当我们没有携带cookie
进行微博的访问时,会出现Sina Visitor System
字样的标题,如果我们是正常的浏览器访问的话,这个空白页面会一闪而逝,然后跳转到微博界面。所以我们可以确定,这个页面就是微博的反爬机制,我们的研究也就从此处开始。
正文
测试链接:https://s.weibo.com/weibo?q=%E8%9C%98%E8%9B%9B%E4%BE%A0
打开一个无痕界面,在F12中打开 停用JavaScript
,因为空白界面一闪而逝,我们要先停掉跳转,方便分析。
访问链接,我们看到了这个反爬页面的全貌,此处空白是空白页的颜色,,,
我们对此处断点,断点后再刚才的地方关掉停用JavaScript
,刷新界面,发现断点成功
我们的目的是找到生成cookie
的位置,知道目的之后,我们开始逐步分析
走完html
发现进入到了这个js
文件内,微博人挺好的,还把每块代码的作用给注释好了
虽然我很想把每一步的调试都发出来,但是实际上大部分的操作都没有记录的意义。。。所以我就把关键的部分写出来,节省大家的时间。
当我们断点跟到此处的时候,我们发现了设置cookie
的代码
(其实不单步调试也可以,直接搜cookie也能搜出来。但是在我们逆向之前,我们并不清楚这类代码有没有被混淆。。。所以在最开始我并没有搜索关键字。。)
我们向上找堆栈,看看cookie
是如何生成的。
嘿,您猜怎么着!
看到此处的我大吃一惊,因为这并不是js代码。。反而是一个请求返回内容
然后继续向上看,跟到了刚才的空白页中。
好好好好,你家cookie不从本地生成从网络请求是吧!
此处省略无数个点
既然知道是从网络请求的cookie
了,我们就打开网络
面板,揭开他神秘的面纱:)
这样看太费劲了,我们copy
到postman
里分析,同时也是为了方便调试
ctrl+o
直接把curl
甩进去,接着我们请求一下,可以看到请求成功的cookie
正安详的躺着。
POST
的内容也是固定值,看样子没有什么要分析的
我们点击右侧边栏的<> 然后转换成python语言,放到ide里好好拷打一番
ok,不负众望,我们也是请求成功
然后我们使用正则,将cookie
中的SUB
、SUBP
、tid
提取出来,然后我们再次运行
没有问题,我们包装成函数,方便调用,顺便改个文件名方便导入
下面进行测试看看,先导进来看看能不能用
请求正常,我们用刚才的测试链接进行访问试试
访问失败了???!!!!
在这里我又进行了无数次的调试,抓包。结果最终发现。。。
是这里的cookie
名称写错了,应该大写为SUB
、SUBP
。Tips:tid
在后来测试中发现没用使用,然后我就删掉了
修改完之后,我们再来测试一下,不出意外的话,这次是真没出意外
请求成功了!
至此,我们的微博反爬机制成功绕过!
此处应该有掌声。
经过我多次请求发现,这个地方的cookie
是跟IP地址
有关的,只有更换IP后才会刷新cookie
。当然,如果当前IP的访客cookie
过期的话,是会自动更新的。
后记
写完代码之后,想起来之前写的一个微博扫码登陆程序,最开始的时候是可以用的,后来再次请求的时候会出现Sina Visitor System
,当时技术有限,不知道怎么解决。这次既然解决了,把cookie带上看看能不能成功运行
不出意外的话,这次肯定不会出意外了。
代码成功运行,获取登录cookie
成功!
——圆了高中时期,在手机上逆向微博生成短链接的梦。
你好