主题

京东商品评论 API:调用、JSON 数据结构、Python 解析与分页实战


一、京东评论 API 核心信息(官方)

  • 接口地址https://api.jd.com/routerjson
  • 核心方法
    • jd.item_review(商品评论列表)
    • jingdong.ware.comment.get(商品评论查询)
  • 请求方式:POST / GET
  • 必填参数
    • method:接口名
    • app_key:应用密钥
    • timestamp:时间戳
    • sign:签名(MD5)
    • sku_id / skuId:商品 ID
    • page / pageSize:分页

二、完整 Python 调用 + 解析代码

python

运行

import requests
import hashlib
import json
import time

# 配置(替换为你的)
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
API_URL = "https://api.jd.com/routerjson"
SKU_ID = "100012345678"  # 商品ID


def generate_sign(params, secret):
    """生成京东API签名(MD5)"""
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    sign_str = secret + "".join(f"{k}{v}" for k, v in sorted_params) + secret
    return hashlib.md5(sign_str.encode()).hexdigest().upper()


def get_jd_comments(sku_id, page=1, page_size=20):
    """调用京东商品评论API"""
    params = {
        "method": "jd.item_review",
        "app_key": APP_KEY,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "v": "2.0",
        "sku_id": sku_id,
        "page": page,
        "page_size": page_size,
        "score": 0,  # 0=全部 1=差评 2=中评 3=好评
        "sort_type": 5  # 5=时间 6=推荐
    }
    params["sign"] = generate_sign(params, APP_SECRET)

    try:
        resp = requests.get(API_URL, params=params, timeout=10)
        return resp.json()
    except Exception as e:
        print(f"请求异常:{e}")
        return None


def parse_jd_comments(json_data):
    """解析京东评论JSON,返回结构化列表"""
    comments = []
    try:
        if json_data.get("code") != "0":
            print(f"API错误:{json_data.get('msg', '未知错误')}")
            return comments

        data = json_data.get("result", {})
        comment_list = data.get("comments", [])

        for c in comment_list:
            comments.append({
                "评论ID": c.get("id"),
                "用户": c.get("nickname", "匿名用户"),
                "评分": c.get("score"),
                "内容": c.get("content"),
                "时间": c.get("creationTime"),
                "图片": c.get("images", []),
                "追评": c.get("afterContent"),
                "商家回复": c.get("replyContent")
            })
    except Exception as e:
        print(f"解析错误:{e}")
    return comments


# 执行
if __name__ == "__main__":
    # 1. 获取评论
    json_result = get_jd_comments(SKU_ID, page=1, page_size=10)
    # 2. 解析
    comment_list = parse_jd_comments(json_result)
    # 3. 输出
    for idx, c in enumerate(comment_list, 1):
        print(f"【第{idx}条】")
        print(f"用户:{c['用户']} | 评分:{c['评分']}星 | 时间:{c['时间']}")
        print(f"内容:{c['内容'][:50]}...")
        print("-" * 80)

三、标准 JSON 返回示例(京东官方结构)

json

{
  "code": "0",
  "msg": "success",
  "result": {
    "total": 1568,
    "page": 1,
    "pageSize": 10,
    "productCommentSummary": {
      "goodRate": 96.8,
      "commentCount": 1568,
      "goodCount": 1518,
      "generalCount": 30,
      "poorCount": 20
    },
    "hotCommentTagStatistics": [
      {"name": "物流快", "count": 860},
      {"name": "质量好", "count": 720}
    ],
    "comments": [
      {
        "id": 123456789,
        "nickname": "jd_abc***",
        "score": 5,
        "content": "商品质量很好,物流速度超快,包装严实!",
        "creationTime": "2026-04-01 15:30:22",
        "images": ["https://img.jd.com/1.jpg"],
        "afterContent": "使用一周,非常满意!",
        "replyContent": "感谢您的支持,祝您生活愉快!"
      }
    ]
  }
}

四、关键字段说明

表格

字段 说明
code 0 = 成功,非 0 = 失败
total 总评论数
goodRate 好评率(%)
score 评分 1-5 星
content 评论内容
creationTime 评论时间
images 晒单图片
afterContent 追评内容
replyContent 商家回复

五、分页获取全量评论(常用)

python

运行

# 批量获取前10页
all_comments = []
for page in range(1, 11):
    data = get_jd_comments(SKU_ID, page=page, page_size=50)
    if data:
        all_comments.extend(parse_jd_comments(data))
    time.sleep(1)  # 防限流

print(f"共获取 {len(all_comments)} 条评论")

六、常见错误

  • 401:签名错误 / app_key 无效
  • 429:调用频率超限(降速 + 延时)
  • 600:权限不足(需申请评论 API 权限)
  • 无数据:sku_id 错误或商品无评论
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐