用第三方爬虫调用「淘宝评论 API」全流程实战

部署运行你感兴趣的模型镜像

更新:2025-12-22
关键词:taobao.item_review、第三方 API、Java、Python、反爬、代理池


一、为什么选“第三方”而不是官方 TOP 接口

  1. 官方 taobao.item.comment.get 需要入驻聚石塔、缴纳保证金,个人开发者很难申请。

  2. 第三方数据商已把淘宝散落在 rate.tmall.comh5api.m.taobao.com 等端点的评论数据重新封装成 REST,无需 OAuth、即调即用

  3. 字段更全:官方接口最多 20 条/页,第三方可给 100 条/页,且包含追评、晒图、商家回复、点赞数。


二、接口能力速览

字段说明类型
content评论正文String
star_level1-5 星Int
images[]晒图 URL 数组List
append_comment追评内容String
seller_reply商家回复String
useful_count被点赞数Int
audit_time审核通过时间戳Long
sku_map购买时的 SKU 描述Map

三、调用流程(以 Python 为例,Java 版见第五节)

1. 申请 token

第三方平台通常采用「AppKey + Secret」两键制,注册后立刻给:

AppKey: 3a9fb47c2f8d4e0ba2d8a0f7b1c9e4d6
Secret: sk_3f4ca9b2e8d745a1b9c2f0e8d7a5b4c3

2. 拼装请求

GET https://api.xxx.com/taobao/item_review?
    app_key=3a9fb47c2f8d4e0ba2d8a0f7b1c9e4d6
    &timestamp=2025-12-22 14:23:45
    &item_id=723849234892
    &page=1
    &page_size=100
    &sort=1  (0=默认,1=最新)
    &sign=生成的MD5签名

3. 签名算法(与官方 TOP 完全一致)

def md5_sign(params: dict, secret: str) -> str:
    params = {k: v for k, v in params.items() if v}
    src = secret + ''.join(f'{k}{v}' for k, v in sorted(params.items())) + secret
    return hashlib.md5(src.encode()).hexdigest().upper()

4. 完整代码(含自动分页、异常退避)

import requests, time, random, pandas as pd
from urllib.parse import quote

URL = "https://api.xxx.com/taobao/item_review"
APP_KEY = "3a9fb47c2f8d4e0ba2d8a0f7b1c9e4d6"
APP_SEC = "sk_3f4ca9b2e8d745a1b9c2f0e8d7a5b4c3"

def fetch_one_page(item_id: str, page: int):
    params = {
        "app_key": APP_KEY,
        "timestamp": quote(pd.Timestamp('now').strftime('%Y-%m-%d %H:%M:%S')),
        "item_id": item_id,
        "page": page,
        "page_size": 100,
        "sort": 1
    }
    params["sign"] = md5_sign(params, APP_SEC)
    resp = requests.get(URL, params=params, timeout=6)
    resp.raise_for_status()
    data = resp.json()
    if data["code"] != 0:
        raise RuntimeError(data["msg"])
    return data["data"]

def fetch_all(item_id: str, max_page=50):
    page, total = 1, 1
    while page <= total and page <= max_page:
        try:
            block = fetch_one_page(item_id, page)
            total = block["total_page"]
            yield from block["reviews"]
            page += 1
            time.sleep(random.uniform(0.8, 2.1))   # 限速
        except Exception as e:
            print(f"page={page} err={e}, retry 3s later")
            time.sleep(3)

if __name__ == "__main__":
    reviews = list(fetch_all("723849234892"))
    pd.DataFrame(reviews).to_csv("tb_review.csv", index=False)
    print("已写入 %d 条评论" % len(reviews))

四、Java 版(OkHttp + Jackson)

public static ReviewPage fetchPage(String itemId, int page) throws Exception {
    Map<String, String> params = new TreeMap<>();
    params.put("app_key", APP_KEY);
    params.put("timestamp", LocalDateTime.now()
            .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    params.put("item_id", itemId);
    params.put("page", String.valueOf(page));
    params.put("page_size", "100");
    params.put("sort", "1");
    params.put("sign", md5Sign(params, APP_SEC));

    HttpUrl.Builder b = HttpUrl.parse(URL).newBuilder();
    params.forEach(b::addQueryParameter);
    Request req = new Request.Builder()
            .url(b.build())
            .header("Accept", "application/json")
            .build();
    try (Response resp = HTTP_CLIENT.newCall(req).execute()) {
        JsonNode root = MAPPER.readTree(resp.body().byteStream());
        if (root.get("code").asInt() != 0)
            throw new IllegalStateException(root.get("msg").asText());
        return MAPPER.convertValue(root.get("data"), ReviewPage.class);
    }
}

自动分页逻辑与 Python 保持一致,此处省略。


五、反爬与合规要点

  1. 频率:第三方 QPS 一般给 10 次/秒,建议压到 5 次/秒以内;晚上 0 点–6 点淘宝风控最严,可降速 30%。

  2. 代理:免费代理存活率 15%,可用阿布云/快代理隧道,失败重试 3 次后剔除

  3. 缓存:评论 24 h 内重复率 < 5%,可 Redis 缓存 6 h,减少 60% 调用量。

  4. 合规:

    • 不采集匿名头像、买家昵称打码后的明文;

    • 不落地用户 uid、手机号、地址等隐私;

    • 不向第三方再售原始评论文本,可做聚类、情感值后脱敏输出。


六、常见错误码速查

代码含义处理
10001sign 错误检查参数是否升序、URL 编码
10021余额不足充点数或降频
10031item_id 无效商品下架/ID 拼错
10041频率超限降 QPS、加代理池
10051接口维护sleep 30 s 退避

七、小结

借助第三方封装好的「taobao.item_review」接口,5 行代码即可拉出 10 万条评论,再叠加代理池、退避重试、本地缓存三板斧,就能在 1 小时内完成竞品好评率、关键词云、SKU 维度的满意度统计。相比自己破解网页 JSONP,这种方案开发快、风险低、字段全,已成为电商数据分析团队的主流选择。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值