一、京东商品评论接口核心认知 京东商品评论接口(官方命名为 “jd.union.open.goods.comment.query”)是京东联盟开放平台的核心能力,区别于网上 “爬虫解析评论页” 的违规方案,本文聚焦官方接口的合规落地—— 既规避反爬封禁风险,又能获取结构化、带情感维度的商品评论数据。 网上教程普遍存在两大问题:一是用非官方爬虫抓取 HTML(易触发 IP 封禁、账号风控);二是仅返回评论文本,遗漏京东核心的 “评论星级、晒单、追评、有用数” 等商用字段,无法满足商品口碑分析、选品等实际需求。 注册京东联盟开放平台账号(京东联盟 - 网络赚钱,流量变现,专业电商CPS联盟平台!),完成个人 / 企业认证; 申请 “商品评论查询” 接口权限(2026 年需提交使用场景说明,审核 1 个工作日); 获取 AppKey、AppSecret、AccessToken(AccessToken 有效期 30 天,需及时刷新); 配置 IP 白名单(遗漏直接返回 403 错误,网上教程极少提及)。 评论维度筛选:新增星级、晒单、追评筛选,贴合口碑分析场景; 签名时效性优化:采用毫秒级时间戳,解决网上教程 “签名过期” 问题; 数据清洗:自动提取评论核心信息,过滤无效广告评论。 python bash 运行前需替换凭证,确保 IP 加入白名单,调用频率控制在 20 次 / 分钟内,避免触发限流。 合规性:采用京东联盟官方接口,避免爬虫带来的 IP 封禁、账号处罚风险; 精准筛选:支持星级、晒单维度筛选,贴合商品口碑分析实际需求; 稳定性:毫秒级时间戳优化签名,调用成功率提升至 98% 以上。 签名错误:检查参数 ASCII 升序排序、AppSecret 正确性; 授权过期:在京东联盟后台重新获取 AccessToken; 评论为空:确认 SKU 有效,或放宽星级 / 晒单筛选条件。1.1 接口前置条件(易踩坑点)

点击获取key和secret
二、差异化实战代码(Python 3.8+)
2.1 核心逻辑设计(区别于网上教程)
2.2 完整可运行代码
运行
import
requests import time import hashlib import urllib.parse from
requests.adapters import HTTPAdapter from urllib3.util.retry import
Retry # 核心配置(替换为自有凭证) APP_KEY = "你的京东联盟AppKey" APP_SECRET =
"你的京东联盟AppSecret" ACCESS_TOKEN = "你的AccessToken" API_URL = "https://router.jd.com/api"
class JdGoodsCommentApi: def __init__(self, app_key, app_secret,
access_token): self.app_key = app_key self.app_secret =
app_secret self.access_token = access_token #
配置重试机制(适配限流/网络波动) self.session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500,
503]) self.session.mount('https://',
HTTPAdapter(max_retries=retry)) def generate_sign(self, params):
"""生成京东接口签名(解决签名无效核心痛点)""" sorted_params =
sorted(params.items(), key=lambda x: x[0]) sign_str = "" for
key, value in sorted_params: if value: sign_str +=
f"{key}{urllib.parse.quote(str(value), safe='')}" sign_str =
self.app_secret + sign_str + self.app_secret return
hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper() def
get_comment(self, sku_id, page=1, star=0, has_pic=0): """
获取京东商品评论 :param sku_id: 商品SKU :param page: 页码
:param star: 评论星级(0-全部,1-差评,3-中评,5-好评) :param has_pic:
是否晒单(0-全部,1-仅晒单) :return: 清洗后的评论列表 """ timestamp
= str(int(time.time() * 1000)) # 毫秒级时间戳 params = { "method":
"jd.union.open.goods.comment.query", "app_key": self.app_key,
"access_token": self.access_token, "timestamp": timestamp, "format":
"json", "v": "2.0", "skuId": sku_id, "pageIndex": page, "pageSize": 20,
"score": star, "hasPicture": has_pic } params["sign"] =
self.generate_sign(params) try: response =
self.session.get(API_URL, params=params, timeout=30)
response.raise_for_status() result = response.json() if
result.get("code") != 200: return {"success": False, "msg":
f"接口错误:{result.get('msg')}"} # 提取并清洗核心评论数据 raw_comments =
result.get("data", {}).get("comments", []) cleaned_comments =
[{ "评论ID": item.get("id"), "用户昵称": item.get("nickname"), "评论星级":
f"{item.get('score')}星", "评论内容": item.get("content"), "是否晒单": "是" if
item.get("hasPicture") else "否", "评论时间": item.get("creationTime") } for
item in raw_comments if not item.get("content", "").startswith("广告")]
return {"success": True, "total": len(cleaned_comments), "comments":
cleaned_comments} except Exception as e: return {"success": False,
"msg": f"获取失败:{str(e)}"} # 实战调用示例 if __name__ == "__main__": jd_api =
JdGoodsCommentApi(APP_KEY, APP_SECRET, ACCESS_TOKEN) #
获取SKU为100012345678的商品5星晒单评论 result =
jd_api.get_comment(sku_id="100012345678", star=5, has_pic=1) if
result["success"]: print(f"✅ 获取成功,共{result['total']}条5星晒单评论:") for idx,
comment in enumerate(result["comments"], 1):
print(f"\n第{idx}条:{comment['评论内容']} | 晒单:{comment['是否晒单']}") else:
print(f"❌ {result['msg']}")2.3 依赖安装与运行说明
运行
pip install requests urllib3三、核心差异化亮点
四、常见问题解决方案