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

访客1年前未分类750

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

1. 准备工作

  • 关注博主注册账号

  • 创建应用获取App Key和App 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 接口:能帮程序员解决哪些问题?

一、自动化获取店铺与商品数据自动获取全店商品、标题、价格、库存、SKU、主图、详情不用人工登录、复制、粘贴、截图程序员只需写少量代码,几分钟拿到全店数据二、自动同步商品到多平台淘宝 → 拼多多、抖音、...

企业级实战:淘宝商品详情 API简要说明,json数据返回参考

企业级实战:淘宝商品详情 API 简要说明一、接口说明接口标识:taobao.item.get / taobao.item.get_full作用:通过商品 ID(num_iid)获取淘宝 / 天猫商品...

技术实战:微店商品详情API接口接入指南与JSON返回参考

前言在私域电商运营、多平台铺货、商品数据聚合的业务场景中,微店商品详情API是开发者和私域从业者最核心的结构化数据入口。它无需搭建复杂的页面爬虫体系,就能稳定获取全维度的微店商品信息,大幅降低私域电商...

技术实战:唯品会商品详情API接入指南与JSON返回参考

前言在品牌折扣选品、正品货源监控、多平台价格比价的业务场景中,唯品会商品详情API是电商从业者最核心的结构化数据入口。它无需搭建复杂的反爬体系,就能稳定获取全维度的唯品会品牌商品信息,大幅降低品牌折扣...

亚马逊商品详情API接口系列,json数据返回

亚马逊商品详情API接口(如Amazon Product Advertising API或Selling Partner API)返回的JSON数据通常包含丰富的商品信息,以下是一个详细的JSON数据...

反向海淘新模式,推荐几个好用的代购系统网站!

推荐以下反向海淘代购系统网站:Pandabuy、Hoobuy、CNFans、Dotdotbuy,以及通过API对接淘宝/1688等平台的代购系统(如万邦科技外贸代购系统)。Pandabuy核心优势:A...

发表评论    

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