Python采集淘宝评论API接口,json数据返回

访客11个月前未分类616

以下是使用Python采集淘宝商品评论API的完整代码示例,包含接口调用、JSON数据解析及错误处理:

1. 准备工作

  • 关注博主注册账号

  • 创建应用获取App KeyApp Secret

  • 安装依赖库:pip install requests

2. 完整代码实现

python
import requests
import hashlib
import time
import json
from urllib.parse import quote

class TaobaoReviewsAPI:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.api_url = "https://gw.api.taobao.com/router/rest"

def _generate_sign(self, params):
"""生成MD5签名"""
sorted_params = sorted(params.items(), key=lambda x: x[0])
sign_str = self.app_secret
for k, v in sorted_params:
if k != 'sign':
sign_str += f"{k}{v}"
sign_str += self.app_secret
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()

def get_reviews(self, item_id, page_no=1, page_size=20, rate_type=None):
"""
       获取商品评论
       :param item_id: 商品ID
       :param page_no: 页码
       :param page_size: 每页数量(1-100)
       :param rate_type: 评论类型(good/neutral/bad)
       :return: JSON格式评论数据
       """
params = {
'method': 'taobao.item.reviews.get',
'app_key': self.app_key,
'timestamp': time.strftime('%Y-%m-%d %H:%M:%S'),
'format': 'json',
'v': '2.0',
'sign_method': 'md5',
'item_id': str(item_id),
'page_no': str(page_no),
'page_size': str(page_size)
}

if rate_type:
params['rate_type'] = rate_type

# 生成签名
params['sign'] = self._generate_sign(params)

try:
response = requests.get(self.api_url, params=params)
response.raise_for_status()
result = response.json()

# 检查API错误
if 'error_response' in result:
error_msg = result['error_response'].get('msg', 'Unknown error')
raise Exception(f"API Error: {error_msg}")

return result.get('item_reviews_get_response', {})

except requests.exceptions.RequestException as e:
raise Exception(f"HTTP请求失败: {str(e)}")
except json.JSONDecodeError:
raise Exception("返回数据解析失败")

# 使用示例
if __name__ == "__main__":
# 替换为你的实际App Key和Secret
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"

api = TaobaoReviewsAPI(APP_KEY, APP_SECRET)

try:
# 获取商品ID为123456789的第1页评论(每页10条)
reviews_data = api.get_reviews(
item_id="123456789",
page_no=1,
page_size=10,
rate_type="good"  # 可选:good/neutral/bad
)

# 打印总评论数和前3条评论
print(f"总评论数: {reviews_data.get('total_results', 0)}")
reviews = reviews_data.get('reviews', {}).get('review', [])

for i, review in enumerate(reviews[:3], 1):
print(f"\n评论{i}:")
print(f"用户: {review.get('user', {}).get('nick', '匿名')}")
print(f"评分: {review.get('feedback_score', '无')}")
print(f"内容: {review.get('feedback', '无内容')}")
print(f"时间: {review.get('feedback_date', '未知')}")

# 打印评论图片(如果有)
pics = review.get('pics', [])
if pics:
print("评论图片:")
for pic in pics[:2]:  # 最多显示2张
print(f" - {pic.get('url', '')}")

# 打印卖家回复(如果有)
reply = review.get('reply', None)
if reply:
print(f"卖家回复: {reply.get('content', '')}")

except Exception as e:
print(f"获取评论失败: {str(e)}")

3. 关键说明

  1. 签名生成

    • 必须按照淘宝API要求的顺序对参数排序

    • 签名公式:MD5(secret + 参数1值 + 参数2值 + ... + secret)

  2. 返回数据结构
    成功响应示例:

    json{"item_reviews_get_response": {"total_results": 1256,"reviews": {"review": [{"user": {"nick": "买***家"},"feedback": "质量很好,物流快","feedback_score": "5","feedback_date": "2025-03-25","pics": [{"url": "http://img.alicdn.com/xxx.jpg"}],"reply": {"content": "感谢您的支持"}}]}}}
  3. 错误处理

    • HTTP错误(如403/500)

    • API返回的业务错误(如参数错误)

    • JSON解析错误

  4. 注意事项

    • 免费版API有调用频率限制(通常100次/分钟)

    • 用户昵称可能被脱敏处理(如"买***家")

    • 图片URL需要添加http:前缀(部分接口返回相对路径)

4. 高级用法建议

  1. 分页采集

    pythondef get_all_reviews(item_id, max_pages=5):all_reviews = []for page in range(1, max_pages + 1):data = api.get_reviews(item_id, page_no=page)reviews = data.get('reviews', {}).get('review', [])if not reviews:breakall_reviews.extend(reviews)return all_reviews
  2. 数据存储
    建议将结果保存为JSON文件或导入数据库:

    python
    import pandas as pd

    # 转换为DataFrame
    df = pd.json_normalize(reviews_data['reviews']['review'])
    df.to_csv("taobao_reviews.csv", index=False, encoding='utf_8_sig')
  3. 代理设置(如需)

    pythonproxies = {"http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"}response = requests.get(url, params=params, proxies=proxies)

如需采集大量数据,建议:

  1. 添加随机延迟(time.sleep(random.uniform(1, 3))

  2. 实现自动重试机制

  3. 使用分布式任务队列(如Celery)


相关文章

推荐一些淘宝商品详情的API接口

以下是淘宝开放平台最常用、最实用的商品详情类 API 接口,按官方标准接口、淘宝客专用、批量 / 补充接口分类整理,附核心用途、参数、适用场景与返回要点,方便你直接选型开发。一、官方标准商品详情接口(...

电商选品分析与商品搬货:应用场景、痛点及完整解决方案

一、应用场景概述选品分析 + 商品搬货(铺货 / 上架 / 搬家),是跨境电商、无货源店群、淘系京东系店铺、内容电商的核心刚需场景。简单说:选品分析:从海量商品里找出能卖、好卖、利润高的爆款。商品搬货...

小红书笔记评论 API:核心场景与 JSON 返回示例

一、接口简介小红书笔记评论 API 是开放平台核心数据接口,基于HTTPS+Token 鉴权,用游标分页获取笔记下主评论、楼中楼、用户信息与互动数据,是舆情监控、内容分析、竞品调研的合规数据渠道。二、...

日本乐天商品详情API接口在海外仓系统中的应用与对接

日本乐天商品详情 API 在海外仓系统中的应用与对接日本乐天商品详情 API(IchibaItem/Item)是海外仓系统对接乐天平台的核心数据入口,能够为库存管理、订单履约、选品备货、成本核算四大核...

汽车之家车辆详情 API 完整介绍|标准 JSON 返回示例与行业落地应用

一、接口基础概述汽车之家车辆详情 API,是面向汽车经销商 SaaS、二手车平台、汽车资讯 APP、车险系统、维保平台提供车型结构化数据的核心接口。调用方式:HTTP/HTTPS POST/GET鉴权...

京东商品详情API技术解析与落地应用(含标准JSON示例)

一、接口概述京东商品详情API)是京东开放平台官方合规数据接口,专为电商服务商、ERP系统、导购平台、选品工具、铺货系统设计。接口支持通过单个商品SKU,快速拉取京东商品全量结构化数据,替代传统爬虫,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。