淘宝商品评论数据抓取指南|API调用演示

前言:商品评论数据是电商运营分析、竞品监控、用户需求挖掘的核心数据源。淘宝作为国内头部电商平台,其开放平台提供了合规的评论数据获取接口,可有效规避违规爬虫带来的账号风险与法律风险。本文将从前置准备、API调用实战、响应数据解析、常见问题排查四个维度,完整呈现淘宝商品评论数据的合规抓取流程,附可直接运行的代码示例,助力开发者快速落地。

一、前置准备:权限申请与环境搭建

在调用淘宝API前,需完成开放平台账号认证、应用创建及权限申请,同时搭建基础开发环境,这是合规抓取的前提条件。

1.1 淘宝开放平台权限申请

核心流程:注册账号 → 开发者认证 → 创建应用 → 申请评论接口权限,具体步骤如下:

  1. 账号注册与认证:访问淘宝开放平台,完成个人或企业账号注册。企业账号的接口配额(每日调用次数)是个人账号的5倍以上,长期使用建议优先完成企业认证(需上传营业执照、对公账户信息)。

  2. 创建应用:进入「开发者中心-应用管理」,点击「创建应用」,应用名称建议填写"XX商家运营助手""XX口碑监测工具"等合规表述,避免出现"爬虫""抓取"等敏感词汇,否则易被审核驳回。应用创建后,可获取核心凭证:App Key(应用密钥)和 App Secret(应用秘钥),需妥善保管在服务端,禁止客户端明文存储。

  3. 申请评论接口权限:核心调用接口为 taobao.item.review.get(商品评论查询),部分场景也可使用 taobao.traderates.get(交易评价查询)。申请时需详细填写场景说明,例如"内部商品口碑分析,数据仅用于企业内部决策,不对外传播,3个月自动脱敏归档",附简单功能原型图可提升审核通过率,一般3个工作日内完成审核。

1.2 开发环境搭建

推荐使用Python语言(数据处理便捷、生态完善),核心依赖库如下:

  • requests:发送HTTP请求,支持长连接与重试机制,提升调用稳定性;

  • hashlib:生成API调用所需的MD5签名,确保请求合法性;

  • pandas(可选):批量处理评论数据,如去重、筛选、统计分析;

  • logging:日志记录,便于排查调用异常。

依赖安装命令:

pip install requests pandas

二、API调用核心逻辑与实战演示

淘宝API调用需严格遵循「参数拼接→签名生成→请求发送→响应解析」流程,其中签名生成是核心难点,错误会直接导致调用失败。

2.1 接口基础信息

参数名称 说明 必填性 示例值
接口地址 淘宝开放平台标准网关 https://eco.taobao.com/router/rest
请求方式 GET/POST,推荐POST(避免参数暴露) POST
公共参数 method、app_key、timestamp、format、v、sign_method、sign -
业务参数 num_iid(商品ID)、page_no(页码)、page_size(每页条数)、sort(排序方式) num_iid=689712345678,sort=1(最新)

关键参数说明:

  • method:接口名称,调用商品评论接口填写taobao.item.review.get

  • sort:排序方式,1=最新评论,2=最热评论(默认按默认排序);

  • page_size:每页最大返回100条评论,默认20条,需合理设置减少请求次数。

2.2 签名生成逻辑

淘宝API通过签名验证请求合法性,核心步骤:

  1. 将所有请求参数(公共参数+业务参数)按参数名ASCII码升序排序;

  2. 拼接排序后的键值对(无分隔符),格式为「key1value1key2value2...」;

  3. 在拼接字符串首尾添加 App Secret

  4. 对字符串进行UTF-8编码后,执行MD5哈希运算,结果转为大写即为签名。

2.3 完整调用代码示例

以下代码实现了评论数据的批量获取、日志记录与数据结构化,可直接替换 App KeyApp Secret 运行:

import requests import hashlib import time import json import logging # 日志配置(排查异常必备) logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) class TaobaoReviewCrawler: def __init__(self, app_key, app_secret): self.app_key = app_key self.app_secret = app_secret self.api_url = "https://eco.taobao.com/router/rest" # 初始化长连接,减少TCP握手开销 self.session = self._init_session() def _init_session(self): """创建支持重试的会话对象,提升稳定性""" session = requests.Session() adapter = requests.adapters.HTTPAdapter( pool_connections=10, pool_maxsize=50, max_retries=3 # 失败自动重试3次 ) session.mount('https://', adapter) return session def _generate_sign(self, params): """生成API签名(核心逻辑)""" # 1. 按参数名ASCII升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接键值对 param_str = ''.join([f"{k}{v}" for k, v in sorted_params]) # 3. 首尾添加AppSecret并MD5加密 sign_str = self.app_secret + param_str + self.app_secret sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper() return sign def get_reviews(self, num_iid, page_no=1, page_size=20, sort=1): """ 核心方法:获取商品评论数据 :param num_iid: 商品ID(必填) :param page_no: 页码(默认1) :param page_size: 每页条数(默认20,最大100) :param sort: 排序方式(1=最新,2=最热) :return: 结构化评论数据列表 """ # 1. 拼接请求参数 params = { "method": "taobao.item.review.get", "app_key": self.app_key, "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "format": "json", "v": "2.0", "sign_method": "md5", "num_iid": num_iid, "page_no": page_no, "page_size": page_size, "sort": sort } # 2. 生成签名 params["sign"] = self._generate_sign(params) try: # 3. 发送请求 response = self.session.get(self.api_url, params=params, timeout=10) response.raise_for_status() # 抛出HTTP请求异常 result = response.json() logger.info(f"第{page_no}页评论请求成功,request_id:{result.get('request_id')}") # 4. 解析响应数据 review_data = result.get("resp_data", {}).get("item_review_get_response", {}) total_reviews = review_data.get("total_results", 0) # 评论总数 reviews_list = review_data.get("reviews", []) # 评论列表 # 5. 数据结构化(提取核心字段) structured_reviews = [] for review in reviews_list: structured_reviews.append({ "评论ID": review.get("id"), "商品ID": review.get("num_iid"), "用户昵称": review.get("user_nick"), "用户等级": review.get("user_level"), "是否会员": review.get("user_vip"), "评论内容": review.get("content"), "评论时间": review.get("created"), "评分": review.get("rate"), "是否追评": review.get("has_more"), "追评内容": review.get("more_content"), "晒图数量": review.get("pic_num"), "晒图链接": review.get("pic_urls", []), "购买规格": review.get("spec_info"), "有用数": review.get("useful_vote"), "商家回复": review.get("reply"), "回复时间": review.get("reply_created") }) return { "total_reviews": total_reviews, "current_page": page_no, "reviews": structured_reviews } except requests.exceptions.RequestException as e: logger.error(f"第{page_no}页评论请求失败:{str(e)}") return None except json.JSONDecodeError as e: logger.error(f"响应数据解析失败:{str(e)}") return None # --------------- 调用示例 --------------- if __name__ == "__main__": # 替换为你的App Key和App Secret APP_KEY = "你的App Key" APP_SECRET = "你的App Secret" # 替换为目标商品ID PRODUCT_ID = "689712345678" crawler = TaobaoReviewCrawler(APP_KEY, APP_SECRET) # 获取第1页最新评论(20条) result = crawler.get_reviews(num_iid=PRODUCT_ID, page_no=1, page_size=20, sort=1) if result: print(f"商品评论总数:{result['total_reviews']}") print("第1页评论数据:") print(json.dumps(result['reviews'], ensure_ascii=False, indent=2))

三、响应数据解析与应用

淘宝评论API返回JSON格式数据,分为顶层状态信息和业务数据两部分,需重点关注评论核心字段的提取与应用。

3.1 完整响应示例

{ "code": 0, "msg": "success", "request_id": "123456789abcdef", "resp_data": { "item_review_get_response": { "total_results": 1250, "reviews": [ { "id": "9876543210abcdef", "num_iid": "689712345678", "user_nick": "tbNick123456", "user_id": "123456789", "user_level": "V3", "user_vip": true, "content": "纯棉材质很舒服,尺码标准,洗了不缩水,夏天穿透气!", "created": "2025-05-10 14:30:00", "modified": "2025-05-11 09:15:00", "rate": 5, "rate_content": "好评", "has_more": true, "more_content": "穿了一周再来追评,版型宽松不挑身材,搭牛仔裤超好看!", "pic_num": 3, "pic_urls": [ "https://img.alicdn.com/imgextra/i1/123456789/O1CN01abcdef123456_!!0-review.jpg", "https://img.alicdn.com/imgextra/i2/123456789/O1CN01abcdef123457_!!0-review.jpg" ], "spec_info": "颜色:白色;尺寸:L", "useful_vote": 25, "reply": "感谢亲的认可,我们会继续努力做好品质~", "reply_created": "2025-05-10 16:20:00" } ], "request_id": "123456789abcdef" } } }

3.2 核心字段解析

Version: Date:

名称 类型 必须 示例值 描述
items items[] 0 商品评论数据
total_results Int 0 29058 评论总数
totalpage Int 0 99 总页数
page_size Int 0 10 接口返回数量
page String 0 80 页码
item item[] 0
rate_content String 0 此用户没有填写评论! 内容
rate_date Date 0 2024-12-22 20:58:43 日期
pics Mix 0 图片
display_user_nick String 0 2***飘 买家昵称
auction_sku String 0 尺码:NB 商品属性
add_feedback String 0 挺好的 追评内容
add_feedback_images Mix 0 追评图片
video String 0 视频地址
相关推荐
MF_AI8 小时前
大型烟雾火灾检测识别数据集:25w+图像,2类,yolo标注
图像处理·人工智能·深度学习·yolo·计算机视觉
码界奇点8 小时前
灵活性与高性能兼得KingbaseES 对 JSON 数据的全面支持深度解析
数据库·json·es
百家方案8 小时前
航空港应急安全科教园区 — 应急安全产业园建设项目投标技术方案
人工智能·智慧园区
奔跑草-8 小时前
【AI日报】每日AI最新消息2026-01-06
人工智能·github
雨大王5128 小时前
工业AI大模型优化汽车生产排产:技术原理与实践案例
人工智能·汽车
2501_941871458 小时前
面向微服务链路追踪与全局上下文管理的互联网系统可观测性设计与多语言工程实践分享
大数据·数据库·python
byzh_rc8 小时前
[机器学习-从入门到入土] 拓展-最小二乘法
人工智能·机器学习·最小二乘法
阿里巴啦8 小时前
React+go实现AI 图像生成落地实践:文生图、图生图的工程项目
人工智能·react.js·ai作画·七牛云·ai生图·ai图生图
Codebee8 小时前
AI 时代的人机协同:在智慧与执行之间寻找平衡
人工智能
love530love8 小时前
EPGF 新手教程 12在 PyCharm(中文版 GUI)中创建 Poetry 项目环境,并把 Poetry 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·epgf