淘宝评论 API 是获取商品评论数据的官方合规渠道,相比爬虫更稳定、数据更完整,但需完成开放平台权限申请、参数配置等前置步骤。本文从新手视角出发,全程拆解 Python 对接淘宝评论 API 的完整流程,包括权限申请、参数解读、代码实现与首次采集验证,帮助开发者 30 分钟内完成首条评论采集。

一、前置准备:淘宝开放平台权限申请

淘宝评论 API ,需完成账号注册、应用创建、权限申请三大步骤。

1. 账号注册与实名认证

2. 创建应用并申请评论 API 权限

  1. 进入「应用管理 - 创建应用」,选择应用类型为「网页应用」(或「小程序应用」,根据使用场景),填写应用名称、用途等信息,提交审核;
  2. 应用审核通过后,进入「应用详情 - 权限管理」,搜索「淘宝商品评论查询」(接口名称:taobao.item.review.get),提交权限申请;
  3. 权限审核:评论 API 属于「开放接口」,一般 1-2 个工作日审核通过,审核通过后可在「已授权权限」中查看接口调用限额(普通应用默认 QPS=1,即每秒 1 次调用)。

3. 关键信息整理

权限申请完成后,整理以下核心信息(后续代码必备):

信息名称 获取位置 作用
App Key 应用详情 - 应用信息 接口调用身份标识
App Secret 应用详情 - 应用信息(需解密) 生成签名的核心密钥
接口地址 接口文档 - 请求地址 固定为 https://eco.taobao.com/router/rest
接口方法名 接口文档 固定为 taobao.item.review.get

二、淘宝评论 API 核心参数解读

淘宝评论 API 采用 REST 风格,请求方式为 GET/POST,核心参数分为「公共参数」和「业务参数」,参数错误会直接导致调用失败。

1. 公共参数(所有 API 通用)

参数名 必传 取值示例 说明
method taobao.item.review.get 接口方法名,固定值
app_key 26888888(示例) 应用 App Key
timestamp 2025-05-20 10:00:00 请求时间戳,格式为 yyyy-MM-dd HH:mm:ss,与服务器时间差≤10 分钟
format json 返回数据格式,推荐 json
v 2.0 接口版本号,固定为 2.0
sign 98D76F5A...(示例) 签名值,由 App Secret + 所有参数拼接后 MD5 加密生成(小写)
sign_method md5 签名方式,固定为 md5

2. 业务参数(评论 API 专属)

参数名 必传 取值示例 说明
num_iid 1234567890(示例) 商品 ID(淘宝商品详情页 URL 中 id= 后的数字)
page_no 1 页码,默认 1,单次最多返回 100 页
page_size 20 每页条数,默认 20,最大 20
sort 0 排序方式:0 - 默认排序,1 - 按时间从新到旧
has_content true 是否只返回有文字内容的评论:true - 是,false - 否(默认)

3. 签名生成规则(核心)

淘宝 API 签名是防篡改的关键,生成逻辑:

  1. 将所有请求参数(公共 + 业务)按参数名ASCII 升序排序;
  2. 拼接成 key1value1key2value2... 的字符串;
  3. 在字符串首尾拼接 App Secret(如 secretkey1value1key2value2secret);
  4. 对拼接后的字符串做 MD5 加密,转换为小写,即为 sign 值。

示例:参数:app_key=26888888method=taobao.item.review.getnum_iid=1234567890timestamp=2025-05-20 10:00:00v=2.0排序后拼接:app_key26888888methodtaobao.item.review.getnum_iid1234567890timestamp2025-05-20 10:00:00v2.0拼接 App Secret(假设为 abc123):abc123app_key26888888methodtaobao.item.review.getnum_iid1234567890timestamp2025-05-20 10:00:00v2.0abc123MD5 加密后得到 sign:98d76f5a8b7c6d5e4f3a2b1c0d9e8f7g(示例)。

三、Python 代码实现:首次评论采集

以下代码基于 Python 3.8+ 编写,无需复杂依赖,仅需 requests 库处理 HTTP 请求,time 库生成时间戳,hashlib 生成签名。

1. 环境准备

安装依赖库:

bash

运行

pip install requests

2. 完整代码实现

python

运行

import requests
import time
import hashlib
from urllib.parse import urlencode

# -------------------------- 配置信息(替换为自己的) --------------------------
APP_KEY = "你的App Key"
APP_SECRET = "你的App Secret"
API_URL = "https://eco.taobao.com/router/rest"
# 目标商品ID(替换为要采集的商品ID)
NUM_IID = "1234567890"

def generate_sign(params, app_secret):
    """
    生成淘宝API签名
    :param params: 所有请求参数(字典)
    :param app_secret: App Secret
    :return: 签名值(小写)
    """
    # 1. 按参数名ASCII升序排序
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 2. 拼接参数为字符串
    sign_str = ""
    for key, value in sorted_params:
        sign_str += f"{key}{value}"
    # 3. 首尾拼接App Secret
    sign_str = app_secret + sign_str + app_secret
    # 4. MD5加密并转小写
    md5 = hashlib.md5()
    md5.update(sign_str.encode("utf-8"))
    sign = md5.hexdigest().lower()
    return sign

def get_taobao_reviews(num_iid, page_no=1, page_size=20):
    """
    调用淘宝评论API采集评论
    :param num_iid: 商品ID
    :param page_no: 页码
    :param page_size: 每页条数
    :return: 评论数据(字典)
    """
    # 1. 构造公共参数
    params = {
        "method": "taobao.item.review.get",
        "app_key": APP_KEY,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        # 2. 构造业务参数
        "num_iid": num_iid,
        "page_no": page_no,
        "page_size": page_size,
        "sort": 1,  # 按时间从新到旧排序
        "has_content": True  # 只返回有文字的评论
    }
    
    # 3. 生成签名
    sign = generate_sign(params, APP_SECRET)
    params["sign"] = sign  # 将签名加入参数
    
    # 4. 发送请求
    try:
        response = requests.get(API_URL, params=params, timeout=10)
        # 5. 解析响应
        if response.status_code == 200:
            result = response.json()
            # 检查是否调用成功
            if "error_response" in result:
                print(f"API调用失败:{result['error_response']['msg']}(错误码:{result['error_response']['code']})")
                return None
            else:
                return result["item_review_get_response"]["reviews"]  # 返回评论列表
        else:
            print(f"请求失败,状态码:{response.status_code}")
            return None
    except Exception as e:
        print(f"请求异常:{str(e)}")
        return None

if __name__ == "__main__":
    # 首次采集:获取第1页评论(20条)
    reviews = get_taobao_reviews(NUM_IID, page_no=1, page_size=20)
    if reviews:
        print(f"成功采集到 {len(reviews)} 条评论:")
        # 打印前3条评论示例
        for i, review in enumerate(reviews[:3]):
            print(f"\n【第{i+1}条评论】")
            print(f"用户昵称:{review['nick']}")
            print(f"评论内容:{review['content']}")
            print(f"评论时间:{review['created']}")
            print(f"商品评分:{review['rate']}星")
    else:
        print("评论采集失败,请检查配置或权限!")

3. 代码关键说明

  1. 签名生成函数generate_sign 严格遵循淘宝 API 签名规则,确保参数排序和加密逻辑正确;
  2. 参数容错:加入异常捕获,处理网络超时、状态码异常、API 错误码等情况;
  3. 数据解析:直接提取响应中的评论列表,过滤无关字段,便于后续使用。

四、首次采集验证与常见问题排查

1. 成功采集的标志

运行代码后,控制台输出类似以下内容,说明采集成功:

plaintext

成功采集到 20 条评论:

【第1条评论】
用户昵称:tbNick123456
评论内容:商品质量很好,物流也快,推荐购买!
评论时间:2025-05-19 15:30:00
商品评分:5星

【第2条评论】
用户昵称:tbNick654321
评论内容:尺寸很合适,使用体验不错~
评论时间:2025-05-19 14:20:00
商品评分:4星

2. 常见问题排查

问题现象 可能原因 解决方案
签名错误(错误码 40) 1. App Secret 填写错误;2. 参数排序错误;3. 时间戳格式错误 1. 核对 App Secret;2. 检查签名函数的排序逻辑;3. 确保时间戳格式为 yyyy-MM-dd HH:mm:ss
权限不足(错误码 11) 评论 API 权限未审核通过,或应用未上线 1. 检查「应用管理 - 权限管理」确认权限状态;2. 完成应用上线流程(需填写应用描述、上传图标)
商品 ID 无效(错误码 22) NUM_IID 填写错误,或商品已下架 1. 核对商品 ID(从商品详情页 URL 复制);2. 更换有效商品 ID 测试
QPS 超限(错误码 15) 调用频率超过限额(默认 1 QPS) 增加请求间隔(如 time.sleep(1)),避免短时间多次调用
响应为空 has_content=True 但该商品无文字评论 注释掉 has_content 参数,或更换有评论的商品 ID

五、后续优化方向(新手进阶)

  1. 批量采集:循环调用 get_taobao_reviews 函数,修改 page_no 实现多页评论采集(注意单商品最多采集 100 页);
  2. 数据存储:将采集的评论存入 MySQL/CSV/Excel,示例代码:

    python

    运行

    import csv
    # 保存评论到CSV
    with open("taobao_reviews.csv", "w", encoding="utf-8-sig", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["nick", "content", "created", "rate"])
        writer.writeheader()
        writer.writerows(reviews)
    
  3. 增量采集:记录上次采集的最后评论时间,下次仅采集该时间之后的新增评论,减少重复调用;
  4. 多商品采集:维护商品 ID 列表,循环调用接口实现多商品评论批量采集。

六、合规注意事项

  1. 淘宝评论 API 采集的数据仅可用于自身业务分析(如竞品分析、用户反馈调研),不得用于商业售卖、恶意抹黑等违规场景;
  2. 严格遵守 API 调用限额,避免高频调用导致账号封禁;
  3. 采集的用户昵称、评论内容等数据需做好隐私保护,不得泄露用户个人信息。

通过以上流程,新手可快速完成淘宝评论 API 的对接与首次采集,后续可根据业务需求扩展数据处理、分析等功能,实现从「数据采集」到「价值挖掘」的闭环。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐