京东商品评论的数据获取,不存在公开可直接调用的官方商品评论 API ,官方仅对合作商家 / 开发者开放有限的合规数据接口(需通过京东开放平台 [JD-OPEN] 申请权限)。市面上的商品评论数据抓取,大多基于网页 / APP 端的接口逆向分析 + 模拟请求实现,其技术架构与抓取原理可拆解为以下核心部分。
一、 京东商品评论的底层数据架构(逆向视角)
京东的商品评论数据,本质上存储在分布式集群中,前端展示与数据请求依赖 分层接口架构,核心分为三层:
- 数据存储层
- 评论主体数据(用户 ID、评论内容、评分、时间)、图片 / 视频附件、追评数据、商家回复数据,分别存储在不同的数据库集群(MySQL/ClickHouse 为主,用于高并发查询)。
- 热点商品评论会做缓存处理(Redis),提升前端请求响应速度。
- 接口服务层
- 核心接口类型 :
- 列表接口:返回商品评论的分页列表(包含基础字段:评分、内容、时间、点赞数)。
- 详情接口:返回单条评论的完整数据(包含追评、图片 URL、用户画像)。
- 统计接口:返回评论的汇总数据(好评率、差评数、评分分布)。
- 接口特征 :
- 接口路径多为
/comment/getCommentList或/productPageComments形式。 - 请求参数包含
productId(商品 ID)、page(页码)、pageSize(每页条数)、score(评分筛选,如好评 / 差评)等核心字段。
- 接口路径多为
- 核心接口类型 :
- 前端接入层
- 网页端:通过 JavaScript 异步加载评论数据,接口返回 JSON 格式数据。
- APP 端:通过 HTTPS 请求接口,数据格式为 JSON/Protobuf(后者需解码)。
- 反爬策略层:接入京东的风控系统,包含 请求频率限制、UA 校验、Cookie 验证、签名参数校验 等。
二、 京东商品评论的抓取原理(技术实现逻辑)
非官方授权的评论抓取,核心是模拟前端的合法请求流程,突破反爬限制,获取并解析数据,具体步骤如下:
1. 目标接口逆向分析
-
网页端抓包 :使用 Chrome/Firefox 开发者工具(F12)→ Network 面板,筛选 XHR/Fetch 请求,找到评论相关接口。
-
示例:某商品评论接口请求参数可能为: plaintext
url: https://club.jd.com/comment/productPageComments.action params: { productId: "100012345678", // 商品ID score: 0, // 0-全部 1-差评 2-中评 3-好评 4-追评 page: 1, // 页码 pageSize: 10, // 每页条数 isShadowSku: 0, fold: 1 }
-
-
APP 端抓包:使用 Charles/mitmproxy 等工具,配置手机代理,抓取 APP 的 HTTPS 请求,需处理证书信任问题。
-
关键点 :记录接口的 请求头(Headers)、请求参数、返回数据格式 ,尤其是动态生成的参数(如
timestamp、sign等签名参数)。
2. 模拟合法请求
- 请求头构造 :必须携带关键字段,否则会被拦截:
User-Agent:模拟浏览器 / APP 的 UA(如京东 APP 的 UA:jdapp;android;10.0;...)。Cookie:登录后的 Cookie(部分商品评论需要登录才能查看完整内容)。Referer:设置为商品详情页 URL,模拟从详情页跳转的请求。
- 动态参数处理 :
- 部分接口会包含签名参数(如
sign),需逆向分析 JS/APP 代码,找到签名生成算法(通常是 MD5/SHA256 加密,结合timestamp+productId+ 固定密钥)。 - 若无签名,直接构造参数请求即可;若有签名,需编写代码实现签名逻辑。
- 部分接口会包含签名参数(如
- 请求方式 :以
GET请求为主,部分接口使用POST(参数放在请求体)。
3. 反爬策略突破与应对
京东对评论接口的反爬限制严格,核心应对方案如下:
| 反爬策略 | 具体表现 | 应对方案 |
|---|---|---|
| 频率限制 | 短时间大量请求会触发 403/503 错误 | 1. 控制请求间隔(1-3 秒 / 次)2. 采用多 IP 池轮询(代理 IP) |
| UA 校验 | 非标准 UA 直接返回空数据 | 维护 UA 池,随机切换浏览器 / APP UA |
| Cookie 失效 | 长期使用同一 Cookie 会被风控 | 1. 定期更换登录 Cookie2. 模拟用户行为(如先访问商品页再请求评论) |
| IP 封禁 | 单一 IP 高频请求会被拉黑 | 使用高匿代理 IP 池,避免使用公开免费代理 |
| 数据混淆 | 返回数据包含干扰字段 / 乱码 | 解析时过滤无效字段,基于 JSON 结构提取核心数据 |
4. 数据解析与存储
-
数据格式 :绝大多数接口返回 JSON 格式,少数 APP 接口返回 Protobuf(需先解码为 JSON)。
-
核心字段提取 :
python
运行
# 示例 JSON 数据解析(Python) import json response_text = '{"comments":[{"id":"123","content":"商品很好","score":5,"creationTime":"2025-12-01"}]}' data = json.loads(response_text) for comment in data.get("comments", []): comment_id = comment.get("id") content = comment.get("content") score = comment.get("score") create_time = comment.get("creationTime") -
存储方案 :
- 临时存储:CSV/JSON 文件。
- 长期存储:MySQL/PostgreSQL(结构化存储)、MongoDB(存储评论图片 URL 等非结构化数据)。
三、 合规性与风险提示
- 法律风险:未经京东授权,抓取商品评论数据用于商业用途,违反《反不正当竞争法》及京东用户协议,可能面临法律追责。
- 官方合规渠道 :若需合法获取数据,可通过 京东开放平台(JD-OPEN) 申请权限,仅能获取合作店铺的自有商品评论数据。
- 技术风险:京东的反爬策略会持续升级,接口参数、签名算法可能随时变更,导致抓取脚本失效。
四、 通用抓取架构(多平台适配扩展)
若要构建支持京东 + 其他电商平台的通用评论抓取框架,可采用 分层解耦架构:
plaintext
┌─────────────────┐
│ 数据源层 │ ← 京东/淘宝/拼多多 接口配置
├─────────────────┤
│ 请求层 │ ← 代理池/UA池/Cookie池 + 签名生成
├─────────────────┤
│ 解析层 │ ← 多平台数据解析规则(JSON/Protobuf)
├─────────────────┤
│ 存储层 │ ← 结构化/非结构化数据存储
├─────────────────┤
│ 风控层 │ ← 请求频率控制/IP健康度监控
└─────────────────┘
是否需要我提供一个京东商品评论抓取的 Python 基础示例(仅用于技术学习,不含签名处理)?