环境搭建
本次实践基于 Python 3.8+,需安装以下第三方库,执行命令:
pip install requests execjs fake-useragent pyquery
execjs:用于在 Python 中执行逆向后的 JS 代码,需提前安装 Node.js(保证 JS 运行环境);fake-useragent:生成随机 User-Agent,规避请求头特征检测;pyquery:轻量的 HTML 解析库,便捷提取页面数据;requests:发送 HTTP/HTTPS 请求,核心网络请求库。
同时准备抓包工具(Charles 或 Fiddler)、浏览器 F12),用于抓包分析请求参数与 JS 加密逻辑。
某宝请求分析与 JS 逆向核心步骤
某宝的商品列表、详情等接口均为异步 AJAX 请求,且请求参数中包含多个加密字段(如 _m_h5_tk、_m_h5_tk_enc、sign),直接构造请求会返回 403/500 错误,因此第一步需通过抓包分析加密逻辑,再完成 JS 逆向。
2.1 抓包分析目标接口
以某宝商品搜索接口为例,操作步骤如下:
- 打开某宝网页版,开启浏览器开发者工具(F12),切换至 Network 面板,筛选 XHR/Fetch 类型;
- 输入关键词搜索商品,在网络请求中找到核心接口(如
https://h5api.m.taobao.com/h5/mtop.taobao.search.core/1.0/); - 查看该接口的 Request Headers(请求头)和 Request Payload(请求体),发现核心加密参数:
- 请求头中的
_m_h5_tk、_m_h5_tk_enc:与用户登录态、时间戳相关的加密串; - 请求体中的
sign:对请求参数、时间戳、固定密钥的混合加密结果; - 公共参数
t:时间戳,appKey:固定应用标识。
- 请求头中的
2.2 定位 JS 加密代码
加密参数的生成逻辑藏在某宝的前端 JS 代码中,通过开发者工具定位核心 JS 文件:
- 在开发者工具 Network 面板,找到包含加密逻辑的 JS 文件(通常为体积较大、命名含 mtop/h5 的文件);
- 切换至 Sources 面板,通过搜索功能(Ctrl+F)搜索加密参数关键词(如
_m_h5_tk、sign),定位到参数生成的核心函数; - 分析函数逻辑,发现加密核心为 MD5 加密 + 参数拼接,例如
sign的生成规则为:sign = md5(appKey + t + token + data),其中token为_m_h5_tk分割后的字段,data为请求体的 JSON 字符串。
2.3 JS 代码提取与还原
由于某宝的前端 JS 会做混淆压缩(变量名简写、代码嵌套),需对核心加密函数进行提取和还原,步骤如下:
- 复制定位到的加密函数及依赖的工具函数(如 MD5 加密、参数拼接函数);
- 去除无关代码,修复函数依赖(如补全缺失的变量、方法);
- 在 Node.js 环境中测试还原后的 JS 代码,确保能正常生成加密参数。
2.4 Python 调用逆向后的 JS 代码
通过 execjs 库让 Python 执行逆向后的 JS 代码,实现加密参数的动态生成,这是连接 JS 逆向与 Python 爬取的关键环节。
代码实现:JS 逆向落地与单线程爬取
本部分先实现 JS 逆向的 Python 封装,生成合法的加密请求参数,再完成单线程的基础爬取,为后续多线程改造打下基础。

