做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.set_user_data_path(r'C:\Users\86135\jd_browser_profile')每次启动新浏览器 → Cookie 全丢 → 必跳登录页固定 user_data_path → 登录一次,Profile 永久保存运行前必须关掉所有同路径的 Chrome 实例(否则锁文件冲突)
三、监听接口: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 包)
四、滑块验证码: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 缩放 ≠ 图片原始尺寸缩放比算错 → 拖动距离偏差 20px+ → 必失败
五、类人轨迹生成(思路全讲,参数不展开)
def make_track(distance):前半段加速,后半段减速,末端过冲回退 ...
真人拖动:起步快 → 中段减速对准 → 末端微调回退
六、"快速认证"前置按钮(京东新版反爬)
def click_quick_verify(dp):在主页面和所有 iframe 里找 "快速认证" 按钮 ...
京东新版:先弹一个"快速认证"按钮 → 点击后才出滑块这个按钮可能嵌在 iframe 里(和滑块同一个套路)
七、自动失败 → 人工兜底(工程化思维)
MAX_SLIDE_TRY = 4自动尝试 4 次 → 失败 → 暂停脚本 → 等人工拖 → 拖完自动继续
自动过不了 → 友好提示 → 人工介入 → 程序继续
八、我故意不展开的四处(付费级)
OpenCV 边缘检测阈值调优:Canny 的 low/high threshold 在不同滑块皮肤下的适配
轨迹加速度参数矩阵:前半段加速区间、末端回退像素的 A/B 测试数据
登录态掉线自动恢复:检测到 passport 跳转后自动弹窗提醒 + 扫码后回到搜索页的 URL 重建
接口签名 t 参数:时间戳精度与服务器时钟同步策略
九、这套数据能干什么?
十、结尾软广
爬虫不难,难的是在京东这种"四层反爬 + 滑块嵌 iframe + 轨迹指纹检测"的体系面前,写出一个能长期跑、掉线能恢复、滑块能自动过的生产级脚本。这篇是《Python 商业数据源实战》的"电商竞品进阶篇",也是目前系列里自动化对抗最完整的一篇。完整源码(含 OpenCV 参数调优、轨迹矩阵、登录态自动恢复)在圈子里,后台回 京东 看入口。