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

访客10个月前未分类590

以下是使用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)


相关文章

Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)

前言专门给程序员用的标准校验代码,适合亚马逊商品采集、数据分析、比价、铺货场景,确保数据准确、字段完整、格式合法。一、校验核心(必查项)校验 API 返回结构是否正常ASIN 商品 ID 必须存在且合...

反向海淘新趋势,选择万邦代购系统的十大优势有哪些?

在反向海淘新趋势下,万邦代购系统凭借其技术实力、服务整合能力及全球化视野,为海外消费者和代购从业者提供了显著优势,具体如下:1. 一站式跨境采购,流程简化效率倍增万邦代购系统直连1688、淘宝、天猫、...

Python 实现淘宝评论 API 数据准确性校验(极简可用 + JSON 参考)

我给你最简洁、直接可用、专门用于淘宝商品评论 API的校验代码,包含:校验逻辑 + 使用方法 + 标准 JSON 返回示例,程序员直接复制就能用。一、校验核心(评论 API 必检)检查 API 返回结...

Jumia商品详情API在跨境选品中的应用

Jumia 作为非洲市场的头部电商平台,其商品详情 API(含官方合作接口与非官方逆向接口)是跨境选品的核心数据工具。通过 API 获取的商品价格、库存、销量、评价、竞品动态等数据,能帮助卖家精准判断...

淘宝京东1688拍立淘按图搜索API,json数据返回

淘宝、京东、1688的拍立淘按图搜索API主要通过图像识别技术返回与上传图片相似的商品信息,通常以JSON格式返回,包含商品标题、图片、价格、销量等关键字段。以下是淘宝、京东、1688拍立淘按图搜索A...

淘宝店铺所有商品API接口,json数据返回

淘宝店铺所有商品API接口返回的JSON数据通常包含商品基本信息、动态数据及分页信息,字段如商品ID、标题、价格、库存、图片、促销信息、店铺名称、总商品数、当前页码、每页数量等。以下是一个淘宝店铺所有...

发表评论    

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