在座的Python爬虫工程师,你敢爬律师事务所站点吗?(爬虫 律师)

网友投稿 743 2022-08-23


在座的Python爬虫工程师,你敢爬律师事务所站点吗?(爬虫 律师)

@[toc]

⛳️ 实战场景

本次要分析的站点是 credit.acla.org.cn/,一个律师群体常去的站点,作为一个爬虫工程师,这简直是送自己去喝茶。

⛳️ 反爬实战

打开开发者工具,无限 debugger

(function anonymous() { debugger; });

直接行号处右键一律不在此处暂停

// 取消清空方法 console._c = console.clear; console.clear = function () { return; };

console._l = console.log; console.log = function () { return; };

类 JSFUCK 加密反爬

简单的反爬手段已经解决了,下面开始尝试获取网页数据,测试代码如下所示。

import requests headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "referer": "https://credit.acla.org.cn/" } res = requests.get('https://credit.acla.org.cn/credit/lawFirm?picCaptchaVerification=&keyWords=',headers=headers) print(res.text)

注意不要在 Pycharm 等工具的控制台直接复制代码去开发者工具中运行,要写入文件,然后复制整行内容。

在打开一个站点的控制台,例如百度,然后唤醒控制台,删除 $=~[]……() 代码段最后的 (),然后执行。

PyMiniRacer 是适用于 Python 的最小的现代嵌入式 V8。PyMiniRacer 支持最新的 ECMAScript 标准,支持 Assembly,并提供可重用的上下文。

本部分代码如下所示。

import requests import re from py_mini_racer import MiniRacer import execjs headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36", "referer": "https://credit.acla.org.cn/credit/lawFirm?picCaptchaVerification=&keyWords=" } res = requests.get('https://credit.acla.org.cn/credit/lawFirm?picCaptchaVerification=&keyWords=',headers=headers) # with open('aaa.html', 'w') as f: # f.write(res.text) pattern = re.compile('(\$\=\~\[\];.*?[\s\S]*)') data = pattern.findall(res.text)[0] # print(data[0]) script_str = data[:-1].strip() script_str = script_str.replace('();','') """ # 删除最终的自执行代码 script_str = script_str.replace(')();','') # 删除包裹函数 script_str = script_str.replace(';$.$(',';') """ ctx = MiniRacer() print(script_str) print(ctx.eval(script_str))

# 删除最终的自执行代码 script_str = script_str.replace(')();','') # 删除包裹函数 script_str = script_str.replace(';$.$(',';')

function decryptByDES(ciphertext, key) { var keyHex = CryptoJS.enc.Utf8.parse(key); var decrypted = CryptoJS.DES.decrypt( { ciphertext: CryptoJS.enc.Base64.parse(ciphertext), }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, } ); return decrypted.toString(CryptoJS.enc.Utf8); }

剩下的事情就是秘钥 keyHex 的获取,这部分稍加调试即可实现。

⛳️ 反爬总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅析WSGI协议(wsgi application)
下一篇:DRF学习笔记(2)(DRF实验)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~