都是限制,都是秘密,JS 逆向某建筑市场数据,python 爬虫 120 例
⛳️ 实战场景
本篇博客我们继续解决 JS 逆向加密等反爬问题,这次目标站点是建筑市场相关数据。
作为一个 Python 爬虫爱好者,相信你能知道正确的站点。
目标站点:
E585A8E59BBDE5BBBAE7AD91E5B882E59CBAE79B91E7AEA1E585ACE585B1E69C8DE58AA1E5B9B3E58FB0
(十六进制加密),如获取站点名称,可以使用任意十六进制解密工具。目标网址:
687474703A2F2F6A7A73632E6D6F687572642E676F762E636E2F
。
站点首页截图如下所示,本博客仅供学习使用,不建议公开去采集,很多地方都需要进行打码、隐藏、都是秘密。
通过开发者工具截获接口如下所示:
请求网址:
http://Python爬虫目标地址/api/webApi/dataservice/query/project/list?pg=1&pgsz=15&total=450
请求方法: GET
接下来就是本案例有趣的地方了,当我们检查其请求头是否包含加密信息时,发现没有任何加密参数,但当打开响应体的时候,问题来了。
下图即为服务端响应内容。
可以看到响应内容是一段加密之后的字符串,不是 HTML 或者 JSON 格式的数据。
如果想要渲染成页面视图,必须找到其解码方法。
⛳️ 响应解码
通过关键字 project/list
设置 XHR 断点,然后点击任意分页请求,进入断点。
响应内容最终被解码出来是请求之后的处理逻辑,所以我们只需要在断点处,继续跟进代码即可。
反复点击 【跳过下一个函数调用】,等进入到响应处理函数的位置,如下图所示。
其中会发现参数 i
的值依旧是编码字符串,然后调用了 r(t,c,o)
,其中 o
是编码过的字符串,此时 r()
函数就非常重要了,大概率解码流程就在该函数内部。
点击进入函数内部,查看处理逻辑。
随着跟进,结果发现了如下代码段。
此时这个问题就有解决方案了,我们找到了 AES
解码位置,迅速把核心代码摘抄到本地。
基于对 AES 加密形式的理解,此时用到的解码形式是 CBC
,其中 iv
值是 0123456789ABCDEF
,key
值是 jo8j9wGw%6HbxfFn
,其中参数 t
是传入的待解码字符串。
执行该函数之后,就实现了解码操作,可以继续跟进,发现如下信息,其中重要的参数是 r
。
梳理逻辑如下所示
传入加密字符串
t
;对加密字符串进行
Hex
格式化操作;对上一步生成的字符串进行
Base64
编码;使用
AES
解码字符串。
转义成 Python 代码即可。
运行代码之后,发现数据已经被解码。
📣📣📣📣📣📣🌻 本文如果发现错误,欢迎在评论区中指正哦 💗版权关系,无法分享所有代码,有需要的可以点击下面卡片,联系我
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/70182ec33faffad16f83bdc04】。文章转载请联系作者。
评论