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

访客10个月前未分类555

以下是使用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返回数据准确性和及时性的方法

前言核心:通过规范调用、数据校验、合理缓存和实时监控,双管齐下保障数据准确、及时,适配电商数据分析、库存监控等核心业务场景。一、确保数据准确性(核心4点)规范API调用,避免参数错误:调用jd.ite...

得物商品详情API接口的技术调用要点之参数规范

你现在聚焦于得物商品详情 API 接口调用中参数规范这一核心要点,这是避免请求失败、保证数据精准的关键环节 —— 参数的格式、取值、传递方式哪怕有微小偏差,都可能导致接口返回错误或数据不全。以下从核心...

淘宝商品详情数据解析

淘宝商品详情数据解析是从 API 返回的原始数据中提取、清洗、结构化核心字段,并转化为可用于分析 / 决策的有效信息的过程,核心是解决「字段多、嵌套深、格式不统一」的问题。以下从数据结构拆解、核心字段...

电商评论API深度解析:淘宝、京东接口实战指南,解锁商品口碑数据价值

一、精选高吸引力主题标题(多风格可选)爆款引流型吃透淘宝京东评论API!轻松抓取电商口碑数据,赋能竞品分析电商数据掘金:一文读懂淘宝、京东商品评论API接口全逻辑告别手动扒数据!主流电商评论API接口...

小红书笔记评论 API 接口深度解析(带全套 JSON 示例・技术实战版)

一、接口基础说明1. 接口基础信息接口路径:/api/v1/note/comment/list(小红书开放平台标准评论接口)请求方式:POST鉴权规则:Header 携带Authorization:...

小红书笔记评论 API 简明文档(含 JSON 样例)

前言一、接口简介小红书笔记评论 API 用于获取单条笔记下的主评论、楼中楼子评论、用户信息、互动数据,支持分页与排序,是舆情分析、内容调研、用户反馈采集的常用接口。接口采用 HTTPS 请求,基于 T...

发表评论    

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