一、接口原理与合规要点
1. 接口架构原理
京东评论接口分为 JOS 商家版、联盟开放版,统一网关路由,采用MD5 签名 + OAuth2.0 双鉴权防篡改。联盟接口面向第三方,用来竞品调研;商家接口仅限自有店铺数据,准入严苛。接口数据默认仅留存近 180 天评论,存在分页上限与 QPS 限流。
2. 合规红线
仅使用平台官方开放 API 获取数据,禁止抓包逆向前端匿名接口、代理爬虫批量爬取,规避知识产权与风控处罚;
调用频次严格遵循平台 QPS 限流规则,不超限刷接口;
采集评论数据仅限企业竞品调研、市场分析自用,禁止倒卖用户评论隐私数据。
二、接口架构与出参字段设计
接口返回结构化 JSON,核心业务字段决定后续数据挖掘维度:评分星级、评论文本、评论时间、商品规格、晒图标识、追评内容。
接口约束:默认仅返回近 180 天评论,分页存在页码上限,超限无数据返回;高频调用触发平台限流错误码。
三、接口封装与全量采集实现
环境依赖
import requests
import json
import hashlib
import time
import pandas as pd
APP_KEY = "xxxx"
APP_SECRET = "xxxx"
ACCESS_TOKEN = "xxxx"
API_URL = "xxxxxxx"
def md5_sign(params):
plain = APP_SECRET
for k in sorted(params):
plain += k + str(params[k])
plain += APP_SECRET
return hashlib.md5(plain.encode()).hexdigest().upper()
def fetch_one_page(sku_id, page):
biz = json.dumps({
"skuId": sku_id,
"pageIndex": page,
"pageSize": 20,
"score": 0,
"isImage": 0,
"needAfterReview": 1
}, separators=(",", ":"))
params = {
"app_key": APP_KEY,
"method": "jd.union.open.goods.comment.query",
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"v": "1.0",
"sign_method": "md5",
"access_token": ACCESS_TOKEN,
"360buy_param_json": biz
}
params["sign"] = md5_sign(params)
r = requests.get(API_URL, params=params, timeout=15)
return r.json()
def crawl_comments(sku_id):
data = []
page = 1
while True:
res = fetch_one_page(sku_id, page)
comments = (
res.get("jd_union_open_goods_comment_query_res", {
})
.get("result", {
})
.get("comments", [])
)
if not comments:
break
for c in comments:
after = c.get("afterSaleReview") or {
}
row = {
"comment_id": c.get("commentId"),
"star": c.get("rating"),
"content": c.get("content"),
"after_comment": after.get("content", ""),
"spec": c.get("skuAttr", ""),
"create_time": c.get("creationTime"),
"has_img": 1 if c.get("pictures") else 0
}
data.append(row)
print(f"page {page}, total {len(data)}")
page += 1
time.sleep(0.4)
df = pd.DataFrame(data)
df.to_csv("jd_comment_raw.csv", index=False, encoding="utf-8-sig")
return df
if __name__ == "__main__":
crawl_comments("100025698741")
核心逻辑:MD5 签名算法、请求失败自动重试、循环分页全量采集、原始数据落地 CSV
四、数据清洗(挖掘前置核心步骤)
去除特殊符号、无效空格、过短无意义评论,剔除脏数据保障 NLP 准确率:
def clean_comment(text):
if not isinstance(text, str):
return ""
text = re.sub(r"<[^>]+>|\s+", " ", text)
text = text.strip()
return "" if len(text) < 2 else text
df_raw["clean_content"] = df_raw["content"].apply(clean_comment)
df_clean = df_raw[df_raw["clean_content"].astype(bool)].copy()
五、NLP 数据挖掘两大核心
1 情感自动分类
依托 SnowNLP 实现评论自动打标:>0.6 好评、0.3~0.6 中评、<0.3 差评,量化口碑表现。
import pandas as pd
from snownlp import SnowNLP
def sentiment_analysis(text):
if not isinstance(text, str) or not text.strip():
return pd.Series([None, "未知"])
try:
prob = SnowNLP(text).sentiments
score = round(prob, 3)
if score > 0.6:
label = "好评"
elif score >= 0.3:
label = "中评"
else:
label = "差评"
return pd.Series([score, label])
except Exception:
return pd.Series([None, "未知"])
df_clean[["sent_score", "sent_label"]] = (
df_clean["clean_content"].apply(sentiment_analysis)
)
2 关键词提取痛点
jieba-TFIDF 提取名词、动词关键词,汇总差评高频词定位产品缺陷:
import jieba.analyse
def extract_keywords(text, top_n=3):
if not isinstance(text, str) or not text.strip():
return ""
words = jieba.analyse.extract_tags(
text,
topK=top_n,
allowPOS=("n", "v")
)
return ",".join(words)
df_clean["keywords"] = (
df_clean["clean_content"].apply(extract_keywords)
)
# 差评整体关键词
bad_text = " ".join(
df_clean.loc[df_clean["sent_label"] == "差评", "clean_content"]
)
top_bad_keywords = jieba.analyse.extract_tags(
bad_text,
topK=30
)
print("产品差评关键词:")
print(top_bad_keywords)
六、可视化落地
情感分布饼图:直观查看好评 / 中差评占比;
差评词云:可视化用户集中吐槽点
import matplotlib.pyplot as plt
from wordcloud import WordCloud
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
sent_cnt = df_clean["sent_label"].dropna().value_counts()
if not sent_cnt.empty:
plt.figure(figsize=(6, 6))
plt.pie(sent_cnt.values, labels=sent_cnt.index, autopct="%1.1f%%", startangle=120)
plt.title("评论情感分布")
plt.axis("equal")
plt.tight_layout()
plt.savefig("sent_pie.png", dpi=300)
plt.close()
if bad_text and isinstance(bad_text, str):
wc = WordCloud(
font_path="C:/Windows/Fonts/simhei.ttf",
width=900,
height=500,
background_color="white"
)
wc.generate(bad_text)
wc.to_file("bad_wordcloud.png")
总 结
整套方案基于官方 API 全链路合规,从接口鉴权原理、数据采集、清洗、NLP 挖掘到可视化形成标准化链路,可快速搭建商品口碑自动化分析系统,可拓展大模型评论摘要、负面消息自动预警功能。