⛳️ 实战场景

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

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
该站点反爬手法特别多,剖析起来也特别爬虫软件是干什么的风趣。

⛳️ 反爬实战

翻开开发者东西HTTP,无限 debugger

(function anonymous() {
  debugger;
});

html5接行号处右键一概不在此处暂停

字体反爬 切换到 Elements 视图,很简略就发现了字体反爬的存在。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
因为我们之前的博客涉及了大量字体反爬内容,本文就不在打开说明http 500了。

控制台清空 接下来还呈现了一个小细节,该站点在不断的履行清空控制台数据操作,也便是它不让你进行控制台测验。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
这一点反爬字体大小怎么调也很容处理,运用下述代码即可。

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

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
此刻日志还会一向呈现,需求撤销日志输出。

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

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
此刻 <img /> 也不会再次输出。

类 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)

运转代码,结果得到下述响应内容。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
这加密长得特别像 jsfuckhtml标签属性大全密,对于它的具体加密形式,其实不需求特别重视,我们只需求经过控制台字体管家查看对应内容即可。

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

在翻开一个站点的控制台,例如百度,然后httpclient唤醒控python保留字制台,删去 $=~[]……() 代码段终究的 (),然后履行。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
解析代码之后,可以查看代码详httpwatch情,其中涉及了多次 cookie 设置。
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
再次拜访目标站点,剖析之html网页制作后,发现 lawFirmpython可以做什么工作址被调用了两次,第一次返回的便是上述加密内容,因此可以得到定论,首次拜访是获取 cookie,二次恳求才是真实数据。
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
测验发现第二次恳求公然一切 cookie 都进爬虫行了发送。
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
解析 JS 代码,原计划运用 execjshtml个人网页完整代码 模块,但是发现其无法解析,没办法只能切换为 py_minhttps和http的区别i_racer

PyMiniRacer 是适用于 Python 的最小的现代嵌入式 V8。Phtml个人网页完整代码yMiniRacer 支撑最新的 E字体管家CMAScriphttp://www.baidu.comt 标准,支撑 As字体天下sembly,并提供可重用的上下文。

本部分代码如下所示。


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('($=~[];.*?[sS]*)</script>')
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))

代码输入如下内容:

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
这儿呈现了一个 JSFunction 目标,代表代码 JS 代码被履行了,处理办法在上述代码也存在,html便是删去自履行部分代码。

# 删去终究的自履行代码
script_str = script_str.replace(')();','')
# 删去包裹函数
script_str = script_str.replace(';$.$(',';')

再次运转,得到解密后的 JS 代码。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
跳转链接反爬 原以为本站点的一切反爬都已经处理了,结果当点击事务所详情页的时分,发现地址也被加密了。

在座的Python爬虫工程师,你敢爬律师事务所站点吗?
这个地方断点下的字体大全很风趣,因为该点python保留字击事情是经过 onclick 绑定到标签上的,所以增加断点的方式是经过事情定位之后,增加到 DOM 元素上。
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
python保留字断点效果~
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
再次点击详情页,可以进入该断点,稍加调试即可发现中心加密函数。
在座的Python爬虫工程师,你敢爬律师事务所站点吗?
提取加密函数中心代码,如下所示,一个简略的 DEShttp协议_ECB 加密。

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 的获取,这部分爬虫软件是干什么的稍加调试即可实现。

⛳️ 反爬总结

实在没有想到,一个站点的查找页面竟然存在如此多的反爬手法,看来律师事务所的数据,实在是不易采集,我们加油,版权问题,无法放出完好代码,如需获取,请点击卡片。

你正在阅览 【愿望橡皮擦】 的博客 阅览结束,可以点点python基础教程小手HTTP赞一下 发https和http的区别现错误,直接谈论区中纠正吧 橡皮擦的第 689 篇原创博客

  • 我正在参与技术社字体识别扫一扫区创作者签约计划招募活动,点击链接报名投稿。