【无标题】京东商品评论数据采集权威指南:API 与爬虫实战

京东商品评论数据采集权威指南:API 与爬虫实战

速览:京东评论采集首选官方 JOS API (合规稳定),其次第三方聚合 API (快速接入),必要时用合规爬虫 (解决 API 覆盖不足);核心接口为jingdong.ware.comment.getproductPageComments.action;必须重视反爬与合规,控制请求频率、使用代理 IP 并遵守平台规则。

二、官方 JOS API 采集方案(推荐)

1. 接口与权限申请

核心接口

  • jingdong.ware.comment.get - 商品评价查询(基础评论数据)
  • jd.union.open.comment.query - 联盟评论接口(推广场景)
  • jingdong.comments.list - 评论详情接口(含追评 / 图片)

申请流程

  1. 注册京东开放平台 (JOS) 账号并完成企业认证
  2. 创建应用,选择 "数据服务" 类目提交审核
  3. 获取AppKeyAppSecret(用于签名认证)
  4. 在控制台申请评论相关 API 权限(部分接口需额外审核)
  5. 阅读接口文档,了解参数与返回格式
2. API 调用示例(Python)

python

运行

复制代码
import requests
import hashlib
import time
import json

# 配置信息
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):
    """生成京东API签名"""
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    sign_str = APP_SECRET + ''.join([f"{k}{v}" for k, v in sorted_params]) + APP_SECRET
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def get_jd_comments(sku_id, page=1, page_size=20):
    """调用京东商品评论API"""
    params = {
        "app_key": APP_KEY,
        "method": "jingdong.ware.comment.get",
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "v": "2.0",
        "360buy_param_json": json.dumps({
            "skuId": sku_id,
            "page": page,
            "pageSize": page_size,
            "score": 0  # 0=全部,1=差评,2=中评,3=好评,4=晒单,5=追评
        })
    }
    params["sign"] = generate_sign(params)
    
    response = requests.post(API_URL, data=params)
    return response.json()

# 使用示例
if __name__ == "__main__":
    result = get_jd_comments(SKU_ID, page=1, page_size=20)
    if "wareCommentResult" in result:
        comments = result["wareCommentResult"]["comments"]
        for comment in comments:
            print(f"用户: {comment['nickname']}")
            print(f"评分: {comment['score']}星")
            print(f"时间: {comment['creationTime']}")
            print(f"内容: {comment['content']}")
            print(f"追评: {comment.get('afterContent', '无')}")
            print("-" * 50)
    else:
        print(f"API调用失败: {result.get('error_response', {}).get('msg', '未知错误')}")
3. 数据字段解析

表格

字段名 说明 示例值
content 评论内容 "音质清晰,续航持久"
score 评分(1-5 星) 5
creationTime 评论时间 "2026-02-10 15:30:00"
afterContent 追评内容 "使用一周后依然稳定"
images 评论图片 URL 列表 ["https://img10.jd.com/..."]
productColor 购买颜色 "黑色"
productSize 购买规格 "128GB"
usefulVoteCount 有用数 12

三、第三方聚合 API 方案(快速接入)

1. 主流服务商与接口

表格

服务商 接口名称 特点 价格
万邦开放平台 jd.item_review 多平台整合,含追评 按量计费
数据宝 京东评论接口 高并发支持,数据清洗 套餐制
聚美数仓 jd_comment_get 实时同步,简单易用 免费 + 付费
2. 调用示例(万邦 API)

python

运行

复制代码
import requests

API_KEY = "your_api_key"
API_URL = "https://api.wanbangdata.com/jd/item_review"
SKU_ID = "100012345678"

params = {
    "key": API_KEY,
    "sku_id": SKU_ID,
    "page": 1,
    "page_size": 20,
    "score": 0  # 0=全部,1=差评,2=中评,3=好评,5=追评
}

response = requests.get(API_URL, params=params)
result = response.json()

if result["code"] == 200:
    for comment in result["data"]["comments"]:
        print(f"用户: {comment['user_nick']}")
        print(f"内容: {comment['content']}")
        print(f"时间: {comment['create_time']}")
else:
    print(f"API调用失败: {result['msg']}")

四、合规爬虫采集方案(API 覆盖不足时)

1. 京东评论接口分析

核心接口(PC 端):

plaintext

复制代码
https://club.jd.com/comment/productPageComments.action

核心参数

表格

参数 说明 示例
productId 商品 ID 100012345678
score 评分筛选 0 = 全部,1 = 差评,2 = 中评,3 = 好评,4 = 晒单,5 = 追评
page 页码 0(从 0 开始)
pageSize 每页数量 10(最大 10)
sortType 排序方式 5 = 时间排序,6 = 推荐排序
isShadowSku 是否包含影子商品 0 = 否,1 = 是

反爬机制

  • IP 频率限制(单 IP 建议≤10 次 / 分钟)
  • User-Agent 检测
  • 动态参数(如callback_时间戳)
  • 部分接口需要登录态
2. 爬虫实现(Playwright 版,推荐)

python

运行

复制代码
from playwright.sync_api import sync_playwright
import json
import time
import random

def crawl_jd_comments(product_id, page_count=5):
    comments = []
    user_agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15"
    ]
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # 调试时设为False
        context = browser.new_context(user_agent=random.choice(user_agents))
        page = context.new_page()
        
        for page_num in range(page_count):
            # 构造请求URL
            url = f"https://club.jd.com/comment/productPageComments.action?productId={product_id}&score=0&sortType=5&page={page_num}&pageSize=10&isShadowSku=0"
            
            # 访问页面
            page.goto(url)
            page.wait_for_timeout(random.randint(2000, 5000))  # 随机延迟
            
            # 提取JSON数据
            content = page.text_content("pre")
            try:
                data = json.loads(content)
                comments.extend(data.get("comments", []))
                print(f"第{page_num+1}页采集成功,获取{len(data.get('comments', []))}条评论")
            except:
                print(f"第{page_num+1}页解析失败")
            
            # 随机休息,模拟人工浏览
            time.sleep(random.randint(3, 8))
        
        browser.close()
    return comments

# 使用示例
if __name__ == "__main__":
    product_id = "100012345678"
    all_comments = crawl_jd_comments(product_id, page_count=3)
    print(f"共采集{len(all_comments)}条评论")
    
    # 保存到JSON文件
    with open("jd_comments.json", "w", encoding="utf-8") as f:
        json.dump(all_comments, f, ensure_ascii=False, indent=2)
3. 反爬应对策略

表格

反爬手段 应对方法 实施要点
IP 封禁 代理 IP 池 使用高匿代理,每请求轮换 IP,控制单 IP≤5 次 / 分钟
UA 检测 随机 UA 池 收集主流浏览器 UA,每次请求随机切换
请求频率 动态延迟 随机间隔 3-8 秒,避免固定间隔
动态参数 实时抓包 分析callback等参数生成规则,或使用浏览器自动化
登录限制 模拟登录 / 无头浏览器 Playwright 自动处理登录态与 Cookie
数据加密 解析 JSON 响应 直接提取 pre 标签中的 JSON 数据,无需解密

五、数据处理与合规指南

1. 数据清洗流程
  1. 去重:基于评论 ID 或内容去重
  2. 过滤:移除空评论、测试评论与广告内容
  3. 标准化:统一日期格式、评分格式
  4. 结构化:提取评论内容、评分、时间、用户信息、商品规格等字段
  5. 存储:MySQL(结构化数据)+ MongoDB(非结构化数据)+ Redis(缓存)
2. 合规与法律要求

核心合规原则

  1. 遵守京东robots.txt协议,不爬取禁止区域
  2. 仅采集公开评论数据,不获取用户隐私信息
  3. 不伪装成官方客户端,使用真实爬虫标识
  4. 数据仅用于合法用途,不用于商业竞争或非法活动
  5. 建立数据使用日志,记录采集时间、来源、用途

法律依据

  • 《网络安全法》《数据安全法》《个人信息保护法》
  • 刑法第 285 条(非法获取计算机信息系统数据罪)
  • 京东开放平台用户协议与开发者协议

六、最佳实践建议

  1. 货源平台应用方案

    • 核心商品评论:通过官方 JOS API 获取(合规稳定)
    • 竞品分析:结合第三方 API 与合规爬虫,扩大覆盖范围
    • 评论分析:使用情感分析(如 SnowNLP)提取用户需求与痛点
    • 数据更新:API 实时获取,爬虫定时补充(每日≤1 次)
  2. 性能优化策略

    • 批量请求:API 调用时使用最大 pageSize,减少请求次数
    • 增量采集:仅采集新增评论,避免重复采集
    • 缓存机制:热门商品评论缓存 30 分钟,降低 API / 爬虫压力
    • 分布式部署:大规模采集时使用多节点分布式爬虫
  3. 风险防控措施

    • 监控 API 调用失败率,设置告警阈值
    • 建立备用采集方案,API 失败时自动切换到爬虫
    • 定期进行合规审计,及时调整采集策略
    • 遇到法律问题,及时咨询专业律师

七、常见问题与解决方案

表格

问题 解决方案
API 调用返回 "权限不足" 检查权限申请状态,重新提交接口权限申请
爬虫频繁被封禁 增加代理 IP 池规模,延长请求间隔,使用浏览器自动化
评论数据不全 结合多个接口,官方 API 获取基础数据,爬虫补充追评与图片
数据更新不及时 调整 API 调用频率,爬虫定时增量采集
相关推荐
安科士andxe4 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
mCell5 小时前
如何零成本搭建个人站点
前端·程序员·github
mCell6 小时前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
小高不会迪斯科6 小时前
CMU 15445学习心得(二) 内存管理及数据移动--数据库系统如何玩转内存
数据库·oracle
恋猫de小郭6 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
寻寻觅觅☆6 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
少云清6 小时前
【安全测试】2_客户端脚本安全测试 _XSS和CSRF
前端·xss·csrf
银烛木6 小时前
黑马程序员前端h5+css3
前端·css·css3
m0_607076606 小时前
CSS3 转换,快手前端面试经验,隔壁都馋哭了
前端·面试·css3
听海边涛声7 小时前
CSS3 图片模糊处理
前端·css·css3