首页 > 大数据 > 数据挖掘 > 京东商品评论接口技术实现:从接口分析到数据挖掘
京东评论接口分为 JOS 商家版、联盟开放版,统一网关路由,采用 MD5 签名 + OAuth2.0 双鉴权防篡改。联盟接口面向第三方,用来竞品调研;商家接口仅限自有店铺数据,准入严苛。接口数据默认仅留存近 180 天评论,存在分页上限与 QPS 限流。
仅使用平台官方开放 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()
依托 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) )
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 挖掘到可视化形成标准化链路,可快速搭建商品口碑自动化分析系统,可拓展大模型评论摘要、负面消息自动预警功能
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050389/viewspace-3173703/ ,如需转载,请注明出处,否则将追究法律责任。