在座的 Python 爬虫工程师,你敢爬律师事务所站点吗?
⛳️ 实战场景
本次要分析的站点是 credit.acla.org.cn/
,一个律师群体常去的站点,作为一个爬虫工程师,这简直是送自己去喝茶。
![](https://static001.geekbang.org/infoq/6e/6e0ce05119a5fc3ab868dc9d56075aac.png)
该站点反爬手段特别多,分析起来也特别有趣。
⛳️ 反爬实战
打开开发者工具,无限 debugger
直接行号处右键一律不在此处暂停
字体反爬切换到 Elements 视图,很容易就发现了字体反爬的存在。
![](https://static001.geekbang.org/infoq/c8/c896675bc61ab6bb18366bb430f65276.png)
由于我们之前的博客涉及了大量字体反爬内容,本文就不在展开说明了。
控制台清空接下来还出现了一个小细节,该站点在不断的执行清空控制台数据操作,也就是它不让你进行控制台测试。
![](https://static001.geekbang.org/infoq/a7/a7fa588167fc546a9a2b656fed697839.png)
这一点反爬也很容解决,使用下述代码即可。
![](https://static001.geekbang.org/infoq/a0/a0c7c44c101c385768f281e779f3c7bb.png)
此时日志还会一直出现,需要取消日志输出。
![](https://static001.geekbang.org/infoq/d1/d17cfeeb821da7029f9f04b7c8fa84f0.png)
此时 <img />
也不会再次输出。
类 JSFUCK 加密反爬
简单的反爬手段已经解决了,下面开始尝试获取网页数据,测试代码如下所示。
运行代码,结果得到下述响应内容。
![](https://static001.geekbang.org/infoq/d0/d01e5adccd3041c9bdeb68876500c16a.png)
这加密长得特别像 jsfuck
加密,对于它的具体加密形式,其实不需要特别关注,我们只需要通过控制台查看对应内容即可。
注意不要在 Pycharm 等工具的控制台直接复制代码去开发者工具中运行,要写入文件,然后复制整行内容。
在打开一个站点的控制台,例如百度,然后唤醒控制台,删除 $=~[]……()
代码段最后的 ()
,然后执行。
![](https://static001.geekbang.org/infoq/cd/cd6cbd77c3d685580d6f951de21d85e7.png)
解析代码之后,可以查看代码详情,其中涉及了多次 cookie 设置。
![](https://static001.geekbang.org/infoq/07/076eaa71629bf02a268bc06175d9b5d5.png)
再次访问目标站点,分析之后,发现 lawFirm
地址被调用了两次,第一次返回的就是上述加密内容,因此可以得到结论,首次访问是获取 cookie,二次请求才是真实数据。
![](https://static001.geekbang.org/infoq/2a/2a5bc1152ccb727248dd87173fd0590d.png)
测试发现第二次请求果然所有 cookie 都进行了发送。
![](https://static001.geekbang.org/infoq/b7/b7c5c25f577ab0452d7bcd21ad2c472f.png)
解析 JS 代码,原计划使用 execjs
模块,但是发现其无法解析,没办法只能切换为 py_mini_racer
。
PyMiniRacer 是适用于 Python 的最小的现代嵌入式 V8。PyMiniRacer 支持最新的 ECMAScript 标准,支持 Assembly,并提供可重用的上下文。
本部分代码如下所示。
代码输入如下内容:
![](https://static001.geekbang.org/infoq/22/22a0ebbd436d1c02e9353a59becdef0a.png)
这里出现了一个 JSFunction 对象,代表代码 JS 代码被执行了,解决办法在上述代码也存在,就是删除自执行部分代码。
再次运行,得到解密后的 JS 代码。
![](https://static001.geekbang.org/infoq/53/536e6b7d8e82a7d1e7de68adf61e07c9.png)
跳转链接反爬原以为本站点的所有反爬都已经解决了,结果当点击事务所详情页的时候,发现地址也被加密了。
![](https://static001.geekbang.org/infoq/44/44e18c78ed488050c367998517fc5fc9.png)
这个地方断点下的很有趣,因为该点击事件是通过 onclick
绑定到标签上的,所以添加断点的方式是通过事件定位之后,添加到 DOM 元素上。
![](https://static001.geekbang.org/infoq/66/66d6406de2af54d7428842673b27e5f5.png)
打断点效果~
![](https://static001.geekbang.org/infoq/2b/2b3448f08e0ac48ee2da6a44b4a3f9e2.png)
再次点击详情页,可以进入该断点,稍加调试即可发现核心加密函数。
![](https://static001.geekbang.org/infoq/8c/8ce7193d57dfb25fd2ce5268a58d2308.png)
提取加密函数核心代码,如下所示,一个简单的 DES_ECB 加密。
剩下的事情就是秘钥 keyHex 的获取,这部分稍加调试即可实现。
⛳️ 反爬总结
实在没有想到,一个站点的搜索页面竟然存在如此多的反爬手段,看来律师事务所的数据,实在是不易采集,大家加油,版权问题,无法放出完整代码,如需获取,请点击卡片。
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 <font color=red>689</font> 篇原创博客
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/07d4b0283e6d65ea2c43579e1】。文章转载请联系作者。
评论