中国采购招标网爬虫采集破解!你学会了吗?
中国采购招标网URL ,通过爬虫去请求该网站会返回521状态码 , 需要带着特定cookie去访问 , 此cookie又是动态变化 , 如果想要持续采集就得破解此cookie生成规则 。
站点反爬分析通过Fiddler抓包分析 , 可以看出它的请求顺序 。
1. 首次发起请求 , 返回状态码为521 , 返回第一段加密cookie , 携带第一段加密的cookie去请求会返回第二个521状态码 , 会返回第二段加密cookie , 然后携带第一段和第二段cookie去请求页面 , 才返回正常状态码 , 通过观察第二段加密cookie有时效性 , 一会就过期 , 破解步骤见下面 。
文章插图
原始请求
2. 第一段加密cookie具体内容:整个script中包含两部分内容 , (1):通过js生成的第一段加密cookie;(2):第二个加密cookie页面的跳转 , 这部分破解比较简单 , 借助python的execjs包去模拟执行js , 然后返回加密cookie即可 。
获取请求的set_cookie , 返回内容为:__jsluid_h=7cad7d7e20bf090ce259b49c85542372(此参数在后续请求均需携带);执行js返回的document.cookie内容:__jsl_clearance=1603345157.389|-1|HI%2B0JxwfexVK0OVf0WEG4FxNW3A%3D , 一开始以为这就是破解成功的cookie , 谁知道注意观察后返回200状态码的请求cookie格式为:XXX|0|XXXX 而此次请求返回中间部分为-1 , 只有请求第二个加密js后才能获取正确cookie 。
文章插图
第一段加密cookie
代码片段:
def first_cookie_decode(base_url):"""破解首次加密:param base_url: 原始请求URL:return: 浏览器请求头 , 首次破解加密字段一"""response = requests.get(base_url, headers=HEADERS, timeout=(8, 8))if response.status_code == 521:cookies = response.cookiesstr_js_cookie = response.text.replace("", "")print("0. 待破解字段==>", str_js_cookie)# 替换掉页面跳转部分JS# 获取加密字段内容js_result = execjs.eval(str_js_cookie).split(";")[0]# 执行加密JSprint("1. 待破解加密字段一==>", js_result)cookies_text = ';'.join(['='.join(item) for item in cookies.items()])print("2. 加密字段一==>", cookies_text)# 此字段可连续使用HEADERS['cookie'] = cookies_text + "; " + js_resultelse:print("状态不为521 , 可直接使用-first_cookie_decode")return HEADERS, cookies_text
3. 第二段加密cookie具体内容:
首先整个页面的JS是通过不同编码搞成了乱码 , 无法直接查看JS具体内容 , 但是通过第三方js执行工具执行发现执行后总是会跳转页面 , 因此考虑会和第一段浏览器跳转一样 , 最后发现了go()方法 , 而且看到go()方法调用的参数bts为我们需要的破解参数 , 破解与未破解区别如下:
未破解: 1603071828.236|0|nuN 4FZAvCZ1Ba7ZTI%2B%2FKxzFJY%3D执行第二段JS破解后的cookie:1603071828.236|0|nuN vi 4FZAvCZ1Ba7ZTI%2B%2FKxzFJY%3D
发现原来的bts参数后面部分多了两位字母 , 长达300多行的js就干了一件事 , 通过入参与浏览器的请求头(很重要)生成了加密的两位字母并拼接到了第二段加密cookie中 。 第二段js本想通过本地execjs执行 , 但是发现js代码片段中包含对浏览器配置的获取 , 因此本地无法执行 , 则考虑selenium去尝试 , 结果本机的chrome86.0版本死活无法加载该js , 目前有什么配置暂不清楚 , 一直降级发现chrome73.0版本支持该js执行并加载 。 关于此部分js内容破解 , 通过阅读该js源码发现有部分:“document[_0x197c('0x35', 'g%4U') + 'ie']”和:“location[_0x197c('0x49', '5@s1')]” , 很明显location控制跳转 , 我们只要对document部分内容做破解即可 , document内容(这是它执行自己内部函数的关键):
_0x1d288[_0x197c('0x61', '(zd#') + 'J'](_0x1d288[_0x197c('0x93', 'AM^7') + 'J'](_0x1d288[_0x197c('0x86', '
文章插图
第二段加密cookie的JS内容
文章插图
第二段加密cookie具体细节
4. 破解流程:
- 发起首次请求返回521状态 , 获取本次请求的set_cookie , 并获取加密js内容:__jsluid_h=7cad7d7e20bf090ce259b49c85542372;
- 携带__jsluid_h和set_cookie发起第二次请求:__jsl_clearance=1603345157.389|-1|HI%2B0JxwfexVK0OVf0WEG4FxNW3A%3D:获取正确的第二部分加密JS内容;
- 通过第二部分加密js内容__jsl_clearance , 使用selenium执行返回正确的__jsl_clearance=1603345157.389|0|HI%BV2B0JxwfexVK0OVf0WEG4FxNW3A%3D;
- 携带__jsluid_h、__jsl_clearance去再次请求 , 返回正确状态码:200及真实页面内容 。 (整个过程必须使用同一浏览器 , 否则加密参数不一致)
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 闲鱼|电诉宝:“闲鱼”网络欺诈成用户投诉热点 Q3获“不建议下单”评级
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 国外|坐拥77件专利,打破国外的垄断,造出中国最先进的家电芯片
- 手机基带|为了5G降低4G网速?中国移动回应来了:罪魁祸首不是运营商
- 通气会|12月4~6日,2020中国信息通信大会将在成都举行
- 互联网|苏宁跳出“零售商”重组互联网平台业务 融资60亿只是第一步
- 峰会|这场峰会厉害了!政府企业专家媒体共议网络内容生态治理
- 中国|浅谈5G移动通信技术的前世和今生
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面