当前位置:首页>python>Python爬取京东商品数据:DrissionPage监听search-pc-java接口,OpenCV自动过滑块验证码

Python爬取京东商品数据:DrissionPage监听search-pc-java接口,OpenCV自动过滑块验证码

  • 2026-10-15 00:25:20
Python爬取京东商品数据:DrissionPage监听search-pc-java接口,OpenCV自动过滑块验证码
做Python爬虫和电商竞品分析的朋友,对京东搜索页一定又爱又恨。爱的是它的商品接口 search-pc-java 返回的是纯 JSON(不是 SSR 渲染),字段极其规整:到手价、原价、评论数、店铺ID、颜色标签……恨的是它的反爬四件套:
登录态强制:不登录直接跳 passport.jd.com
滑块验证码:嵌在 iframe 里,还分"快速认证"前置和新版滑块
轨迹指纹检测:匀速拖动 = 秒杀;轨迹太规律 = 失败
接口签名:appid=search-pc-java&t=xxx 带时间戳校验
绝大多数教程要么教你用无头浏览器硬扛(必被识别),要么直接放一个过期的 cookie(跑两次就 302)。今天这篇,我基于DrissionPage + 固定浏览器 Profile + OpenCV 模板匹配自动滑块 + 类人轨迹生成,把整套"生产级"方案拆给你看。核心架构全讲,但滑块识别的具体参数调优、轨迹加速度公式、缺口缩放比校准,我只给设计思路,不贴关键数值——毕竟能稳定过滑块、不被风控的脚本,和跑一次就弹验证码的 Demo,完全是两个东西。

Python爬取京东商品数据 · 核心架构拆解

技术栈:DrissionPage固定Profile + 监听search-pc-java + OpenCV滑块识别 + 类人轨迹模拟


一、为什么京东商品数据值得爬?

字段

竞品分析价值

商品ID / 店铺ID

跨平台关联(淘宝/拼多多比价)

到手价 / 原价

促销力度、历史价格曲线

评论数(模糊)

commentFuzzy 如"200+" → 销量下限估算

颜色标签

SKU 维度分析

评论标签

commentSalesFloor → 用户核心痛点词云

店铺名

自营 vs 第三方分布

👉 一份 CSV,直接能做出"某品类自营 vs 第三方价格带对比"或"评论标签情感分析"。

二、固定浏览器 Profile(解决"反复掉登录"的核心)

co = ChromiumOptions()
co.set_user_data_path(r'C:\Users\86135\jd_browser_profile')
dp = ChromiumPage(co)
✅为什么这是关键?
每次启动新浏览器 → Cookie 全丢 → 必跳登录页
固定 user_data_path → 登录一次,Profile 永久保存
下次启动直接复用,等于"记住密码"
⚠️坑位:
运行前必须关掉所有同路径的 Chrome 实例(否则锁文件冲突)
Profile 路径不能放在项目目录里随意删除

三、监听接口:search-pc-java

dp.listen.start('api?appid=search-pc-java&t')dp.get('https://www.jd.com/')输入关键词 → 点击搜索resp_list = dp.listen.wait(5)
✅关键点:
京东搜索页是先渲染骨架、再 AJAX 填充商品,必须监听接口
返回 JSON 里 data.wareList 就是商品数组
用 abBuriedTagMap 字段过滤掉非商品响应(京东会同时返回多个 API 包)
⚠️坑位:
不等待直接取 DOM → 拿到空列表
不区分响应类型 → 解析报错

四、滑块验证码:OpenCV 模板匹配(思路全讲,参数不展开)

1. 下载背景大图和滑块小图big_arr = cv2.imdecode(np.frombuffer(big.src(True), np.uint8), cv2.IMREAD_GRAYSCALE)small_arr = cv2.imdecode(np.frombuffer(small.src(True), np.uint8), cv2.IMREAD_GRAYSCALE)# 2. 边缘检测 + 模板匹配res = cv2.matchTemplate(cv2.Canny(big_arr, 100, 200),                        cv2.Canny(small_arr, 100, 200),                        cv2.TM_CCOEFF_NORMED)# 3. 计算页面坐标(图像像素 → 显示像素的缩放比)scale = big.rect.size[0] / big_arr.shape[1]gap_x = max_loc[0] * scale
✅设计思路(只讲不贴具体阈值):
用Canny 边缘检测把图片转成线条,再模板匹配 → 对光照变化不敏感
大图和小图都是从浏览器直接下载原始 PNG,不经过截图(精度更高)
必须算缩放比:页面 CSS 缩放 ≠ 图片原始尺寸
⚠️坑位(只列不拆):
不处理 iframe → 找不到滑块元素
直接用截图识别 → 分辨率损失导致匹配失败
缩放比算错 → 拖动距离偏差 20px+ → 必失败

五、类人轨迹生成(思路全讲,参数不展开)

def make_track(distance):前半段加速,后半段减速,末端过冲回退    ...
✅为什么不能匀速?
京东的轨迹检测会记录加速度曲线
真人拖动:起步快 → 中段减速对准 → 末端微调回退
匀速 = 机器 = 秒杀
⚠️坑位:
不加垂直抖动 → 轨迹太"直"被识别
不过冲回退 → 末端太"完美"被识别
具体加速度范围和回退像素不展开

六、"快速认证"前置按钮(京东新版反爬)

def click_quick_verify(dp):在主页面和所有 iframe 里找 "快速认证" 按钮    ...
✅为什么需要这个?
京东新版:先弹一个"快速认证"按钮 → 点击后才出滑块
这个按钮可能嵌在 iframe 里(和滑块同一个套路)
不点它 → 滑块永远不会出现 → 脚本卡死

七、自动失败 → 人工兜底(工程化思维)

MAX_SLIDE_TRY = 4自动尝试 4 次 → 失败 → 暂停脚本 → 等人工拖 → 拖完自动继续
✅这是生产级脚本的标志:
不追求"100% 全自动"(不可能稳定)
自动过不了 → 友好提示 → 人工介入 → 程序继续
不会卡死、不会丢数据

八、我故意不展开的四处(付费级)

OpenCV 边缘检测阈值调优:Canny 的 low/high threshold 在不同滑块皮肤下的适配

轨迹加速度参数矩阵:前半段加速区间、末端回退像素的 A/B 测试数据

登录态掉线自动恢复:检测到 passport 跳转后自动弹窗提醒 + 扫码后回到搜索页的 URL 重建

接口签名 t 参数:时间戳精度与服务器时钟同步策略


九、这套数据能干什么?

竞品监控
:跟踪京东自营 vs 第三方同款商品的价格差
评论标签分析
:提取高频用户痛点(如"续航差""包装破损")
SKU 维度分析
:颜色/规格的销量分布
促销节奏
:到手价 vs 原价的折扣率变化

十、结尾软广

爬虫不难,难的是在京东这种"四层反爬 + 滑块嵌 iframe + 轨迹指纹检测"的体系面前,写出一个能长期跑、掉线能恢复、滑块能自动过的生产级脚本。这篇是《Python 商业数据源实战》的"电商竞品进阶篇",也是目前系列里自动化对抗最完整的一篇。
完整源码(含 OpenCV 参数调优、轨迹矩阵、登录态自动恢复)在圈子里,后台回 京东 看入口。

最新文章

随机文章