ITPub博客

首页 > 大数据 > 数据挖掘 > 京东商品评论接口技术实现:从接口分析到数据挖掘

京东商品评论接口技术实现:从接口分析到数据挖掘

原创 数据挖掘 作者:ob_Alan 时间:2026-06-15 10:38:47 0 删除 编辑

一、接口原理与合规要点

1. 接口架构原理

京东评论接口分为 JOS 商家版、联盟开放版,统一网关路由,采用 MD5 签名 + OAuth2.0 双鉴权防篡改。联盟接口面向第三方,用来竞品调研;商家接口仅限自有店铺数据,准入严苛。接口数据默认仅留存近 180 天评论,存在分页上限与 QPS 限流。

2. 合规红线(核心)

  1. 仅使用平台官方开放 API 获取数据,禁止抓包逆向前端匿名接口、代理爬虫批量爬取,规避知识产权与风控处罚;

  2. 调用频次严格遵循平台 QPS 限流规则,不超限刷接口;

  3. 采集评论数据仅限企业竞品调研、市场分析自用,禁止倒卖用户评论隐私数据。

二、接口架构与出参字段设计

  1. 接口返回结构化 JSON,核心业务字段决定后续数据挖掘维度:评分星级、评论文本、评论时间、商品规格、晒图标识、追评内容。

  2. 接口约束:默认仅返回近 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)

六、可视化落地

  1. 情感分布饼图:直观查看好评 / 中差评占比;

  2. 差评词云:可视化用户集中吐槽点

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-06-05

  • 博文量
    44
  • 访问量
    39170