前言
一、核心API接口概览
- 商品详情API(taobao.item.get)
- 功能:获取商品基础信息(标题、价格、库存、销量)、图片、类目、促销信息等。
- 请求参数:
num_iid:商品唯一ID(必填)。fields:返回字段列表(如title,price,stock,pic_url,promotion_info)。v:API版本(如2.0)。
- JSON响应示例:
json { "item_get_response": { "item": { "num_iid": "123456789", "title": "夏季纯棉T恤", "price": "59.90", "stock": 100, "pic_url": "https://img.taobao.com/1.jpg", "promotion_info": { "promotion_type": "discount", "promotion_price": "49.90", "start_time": "2025-09-01 00:00:00" } } } }
- 评论数据API(taobao.item.reviews.get)
- 功能:获取商品评论列表,支持按评分、时间、分页筛选。
- 请求参数:
item_id:商品ID(必填)。page_no:页码(默认1)。page_size:每页数量(默认20,最大100)。rate_type:评论类型(good/neutral/bad)。
- JSON响应示例:
json { "item_reviews_get_response": { "total_results": "4605", "reviews": [ { "user_nick": "买家昵称1", "content": "质量很好,物流快!", "score": 5, "create_time": "2025-09-01 10:00:00", "pictures": ["http://example.com/1.jpg"], "reply": { "seller_nick": "卖家昵称", "content": "感谢您的支持!", "reply_time": "2025-09-01 12:00:00" } } ] } }
二、认证与调用流程
- OAuth2.0认证:
- 步骤:用户授权→获取授权码→换取访问令牌→访问资源。
- 签名生成(Python示例):
python import hashlib import hmac def generate_sign(params, app_secret): sorted_params = sorted(params.items()) query = '&'.join([f"{k}{v}" for k, v in sorted_params]) sign = hmac.new(app_secret.encode(), query.encode(), hashlib.sha256).hexdigest().upper() return sign
- 请求构造示例:
python import requests import time params = { "method": "taobao.item.get", "app_key": "YOUR_APP_KEY", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "format": "json", "v": "2.0", "num_iid": "123456789", "fields": "title,price,stock" } params["sign"] = generate_sign(params, "YOUR_APP_SECRET") response = requests.get("https://gw.api.taobao.com/router/rest", params=params) data = response.json()
三、数据清洗与分析场景
- 商品详情数据处理:
- 价格趋势分析:提取
price字段,结合时间维度分析价格波动。 - 库存监控:实时获取
stock字段,预警缺货风险。 - 促销策略优化:解析
promotion_info中的折扣信息,评估促销效果。
- 评论数据分析:
- 情感分析:使用
jieba分词+TextBlob提取高频词(如“质量好”“物流快”)。 - 差评定位:筛选
score≤3的评论,定位产品缺陷(如“电池不耐用”)。 - 竞品对比:抓取竞品评论,对比评分分布与用户关注点差异。
四、分页与批量处理
- 分页逻辑:通过
page_no和page_size循环请求,直到返回评论数小于page_size。 - 频率限制:淘宝API限制QPS(如50次/秒),需通过
time.sleep(0.02)控制请求间隔。 - 批量处理示例:
python def get_all_reviews(item_id, page_size=100): all_reviews = [] page = 1 while True: params = { "item_id": item_id, "page_no": page, "page_size": page_size, "rate_type": "good" } response = requests.get("https://eco.taobao.com/router/rest", params=params) data = response.json() all_reviews.extend(data["reviews"]) if len(data["reviews"]) < page_size: break page += 1 time.sleep(0.1) # 避免频率过高 return all_reviews