用 Python 3 行代码批量抓取亚马逊评论——Reveyes SDK 完整教程

0 阅读7分钟

用 Python 3 行代码批量抓取亚马逊评论——Reveyes SDK 完整教程

本文介绍如何使用开源 Python SDK reveyes 快速接入亚马逊评论抓取服务,适合跨境电商卖家、数据分析师和独立开发者。


背景:为什么要批量抓取亚马逊评论?

亚马逊评论是跨境电商领域最有价值的公开数据之一:

  • 选品分析:了解竞品用户的真实痛点,找到差异化切入点
  • 差评监控:实时掌握自家商品的负面反馈,快速响应
  • 市场调研:多站点对比同一 ASIN 在不同地区的口碑差异
  • 竞争情报:分析竞争对手的高频好评关键词,优化 listing

手动翻页效率极低,爬虫维护成本高(亚马逊反爬机制复杂),而 Reveyes 提供了一套稳定的评论抓取 API,本文介绍其官方 Python SDK 的使用方法。 在这里插入图片描述 在这里插入图片描述


一、安装

pip install reveyes

要求 Python 3.8+,唯一依赖是 requests,无重型依赖。


二、快速上手(3 行核心代码)

from reveyes import ReveyesClient

client = ReveyesClient(api_key="your_api_key")
task = client.fetch_reviews([{"asin": "B08N5WRWNW", "marketplace": "US", "pages": 2}])
result = client.wait_for_task(task.task_id)

for review in result.reviews.data:
    print(f"★{review.rating}  {review.title}")
    print(f"  {review.review_content[:100]}...")

API Key 可在 www.reveyes.cn 注册后免费获取。


三、核心概念

任务制设计

SDK 采用异步任务模式:

提交任务 (fetch_reviews)
    ↓
获取 task_id
    ↓
轮询状态 (get_task_result / wait_for_task)
    ↓
status = "done" 时取评论数据

这样设计是因为批量抓取多个 ASIN 需要时间,任务制可以避免 HTTP 超时,也便于断点续查。

积分机制

操作积分
每页抓取1 积分
1 页评论≈ 10 条
任务完成退还未抓取到数据的页自动退还

提交任务时按总页数预扣,完成后结算实际消耗,多退少不补。


四、详细用法

4.1 提交抓取任务

from reveyes import ReveyesClient, AsinFetchItem

client = ReveyesClient(api_key="your_api_key")

task = client.fetch_reviews([
    # 最简:只填 ASIN,其余取默认值
    {"asin": "B08N5WRWNW"},

    # 完整参数控制
    {
        "asin": "B09G9FPHY6",
        "marketplace": "DE",          # 德国站
        "pages": 5,                   # 抓 5 页(约 50 条)
        "filter_star": "critical",    # 只要差评(1-2星)
        "filter_sort_by": "helpful",  # 按有用数排序
        "filter_reviewer_type": "avp_only_reviews",  # 仅已验证购买
    },

    # 也可以使用 dataclass 方式
    AsinFetchItem(asin="B07XJ8C8F7", marketplace="JP", pages=3, filter_star="five_star"),
])

print(f"任务 ID:{task.task_id}")
print(f"预扣积分:{task.pre_deduct}")

filter_star 可选值:

含义
all_stars全部(默认)
five_star / four_star / ... / one_star指定星级
positive好评(4-5星)
critical差评(1-2星)

4.2 等待任务完成

# 方式一:自动阻塞等待(推荐)
result = client.wait_for_task(
    task.task_id,
    poll_interval=5,   # 每 5 秒轮询一次
    timeout=300,       # 最多等 5 分钟
)
print(f"完成!共 {result.reviews.total} 条评论")

# 方式二:手动轮询(适合异步场景)
import time
while True:
    result = client.get_task_result(task.task_id)
    print(f"状态:{result.status},已完成 {result.finished_asins}/{result.total_asins} 个 ASIN")
    if result.is_done:
        break
    time.sleep(5)

4.3 获取评论数据

# 第一页(默认 50 条)
result = client.get_task_result(task.task_id, page=1, page_size=50)

for review in result.reviews.data:
    print(f"[{review.marketplace}] {review.asin}")
    print(f"★{review.rating}  {review.title}")
    print(f"日期:{review.review_date}  评论者:{review.user_name}")
    print(f"已验证购买:{'是' if review.verified_purchase else '否'}")
    print(f"有用数:{review.helpful_votes}")
    print(f"正文:{review.review_content[:200]}")
    print()

ReviewItem 字段一览:

字段类型说明
asinstr商品 ASIN
marketplacestr站点(US/DE/JP...)
review_idstr亚马逊评论 ID
ratingint星级 1-5
titlestr评论标题
review_contentstr评论正文
review_datestr日期
user_namestr评论者昵称
profile_urlstr评论者主页链接
verified_purchaseint1=已验证购买
helpful_votesint有用票数
product_variantstr商品变体(颜色/尺寸等)
imageslist评论附图 URL
videoslist评论附视频

4.4 自动翻页迭代所有评论

当评论量很大时,无需手动处理分页:

# iter_all_reviews 自动处理分页,逐条 yield,内存友好
for review in client.iter_all_reviews(task.task_id, page_size=100):
    # 这里处理每一条评论
    process(review)

4.5 查询历史任务

tasks = client.list_tasks(page=1, page_size=20)
print(f"共 {tasks.total} 个历史任务")

for t in tasks.items:
    print(f"{t.task_id}  {t.status}  {t.created_at:%Y-%m-%d}")

五、支持站点(20 个)

SDK 支持亚马逊全球 20 个主要站点:

区域站点代码域名
北美US CA MX.com / .ca / .com.mx
欧洲UK DE FR IT ES NL SE PL BE IE.co.uk / .de / .fr ...
亚洲JP IN SG.co.jp / .in / .sg
中东AE SA.ae / .sa
其他AU BR.com.au / .com.br

六、异常处理

SDK 对 API 错误进行了分类封装,方便精确处理:

from reveyes.exceptions import (
    AuthenticationError,       # API Key 无效或已禁用
    InsufficientCreditsError,  # 积分不足
    BadParamsError,            # 参数错误(如不支持的站点代码)
    NotFoundError,             # 任务不存在
    ForbiddenError,            # 无权访问他人任务
    APIError,                  # 其他接口错误
)

try:
    task = client.fetch_reviews([{"asin": "B08N5WRWNW", "pages": 10}])
    result = client.wait_for_task(task.task_id, timeout=600)
except InsufficientCreditsError:
    print("积分不足,请前往 https://www.reveyes.cn 充值")
except AuthenticationError:
    print("API Key 无效,请检查")
except TimeoutError:
    print("任务超时,可稍后用 task_id 手动查询")
except APIError as e:
    print(f"接口异常 code={e.code}: {e}")

七、实战案例

案例 1:批量导出差评到 Excel

import csv
import os
from reveyes import ReveyesClient

client = ReveyesClient(api_key=os.environ["REVEYES_API_KEY"])

# 同时分析 3 个竞品的美国站差评
asins = ["B08N5WRWNW", "B09G9FPHY6", "B07XJ8C8F7"]

task = client.fetch_reviews([
    {"asin": asin, "marketplace": "US", "pages": 5, "filter_star": "critical"}
    for asin in asins
])
print(f"任务提交成功,预扣 {task.pre_deduct} 积分,等待中...")

result = client.wait_for_task(task.task_id, timeout=600)
print(f"完成!{result.reviews.total} 条差评,实耗 {result.actual_deduct} 积分")

with open("差评汇总.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(["ASIN", "星级", "日期", "标题", "内容", "是否验证购买", "有用数"])
    for review in client.iter_all_reviews(task.task_id, page_size=200):
        w.writerow([
            review.asin, review.rating, review.review_date,
            review.title, review.review_content,
            "是" if review.verified_purchase else "否",
            review.helpful_votes,
        ])

print("已导出到 差评汇总.csv")

案例 2:同一商品多站点评分对比

from collections import defaultdict
from reveyes import ReveyesClient

client = ReveyesClient(api_key="your_key")

asin = "B08N5WRWNW"
task = client.fetch_reviews([
    {"asin": asin, "marketplace": m, "pages": 3}
    for m in ["US", "UK", "DE", "JP", "CA", "AU"]
])

result = client.wait_for_task(task.task_id)

stats = defaultdict(lambda: {"count": 0, "sum": 0})
for review in client.iter_all_reviews(task.task_id):
    stats[review.marketplace]["count"] += 1
    stats[review.marketplace]["sum"] += review.rating or 0

print(f"\n{'站点':<6} {'评论数':>8} {'平均评分':>10} {'可视化':}")
print("=" * 40)
for market, s in sorted(stats.items()):
    avg = s["sum"] / s["count"] if s["count"] else 0
    bar = "★" * round(avg) + "☆" * (5 - round(avg))
    print(f"{market:<6} {s['count']:>8} {avg:>10.2f}  {bar}")

输出示例:

站点     评论数       平均评分  可视化
========================================
AU          28       4.21  ★★★★☆
CA          35       4.40  ★★★★☆
DE          31       3.87  ★★★★☆
JP          19       4.63  ★★★★★
UK          42       4.05  ★★★★☆
US          88       4.18  ★★★★☆

案例 3:星级分布统计

from collections import Counter
from reveyes import ReveyesClient

client = ReveyesClient(api_key="your_key")
task = client.fetch_reviews([{"asin": "B08N5WRWNW", "marketplace": "US", "pages": 10}])
result = client.wait_for_task(task.task_id)

ratings = Counter(r.rating for r in client.iter_all_reviews(task.task_id))
total = sum(ratings.values())

print(f"\n评分分布(共 {total} 条)")
print("-" * 35)
for star in range(5, 0, -1):
    count = ratings[star]
    pct = count / total * 100 if total else 0
    bar = "█" * int(pct / 2)
    print(f"{'★' * star:<7} {count:>5} ({pct:>5.1f}%)  {bar}")

八、最佳实践

1. 用环境变量保存 API Key

import os
client = ReveyesClient(api_key=os.environ["REVEYES_API_KEY"])

不要把 Key 硬编码在代码里,更不要提交到 Git。

2. 大批量任务拆分

单次任务 ASIN 数量建议不超过 50 个,可拆分多批提交:

def chunks(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i:i + n]

all_asins = [...]  # 假设 200 个 ASIN
for batch in chunks(all_asins, 50):
    task = client.fetch_reviews([{"asin": a} for a in batch])
    result = client.wait_for_task(task.task_id, timeout=600)
    # 处理 result...

3. 合理设置 timeout

任务规模建议 timeout
1-5 个 ASIN,1-2 页60s
10-20 个 ASIN,3-5 页300s
50 个 ASIN,5-10 页600s+

4. 保存 task_id 便于重试

import json

task = client.fetch_reviews([...])

# 保存 task_id
with open("task_ids.json", "a") as f:
    json.dump({"task_id": task.task_id, "ts": str(task.created_at)}, f)
    f.write("\n")

# 任务超时后,可以用 task_id 重新拉取(无需重新抓取,节省积分)
result = client.get_task_result("之前保存的task_id")

九、项目信息

信息地址
PyPIpypi.org/project/rev…
GitHubgithub.com/zhuojiuya/A…
官网/注册www.reveyes.cn

安装最新版:

pip install -U reveyes

总结

reveyes SDK 封装了亚马逊评论抓取的所有细节,开发者只需关注业务逻辑:

  • ✅ 3 行代码完成评论抓取
  • ✅ 支持 20 个亚马逊站点
  • ✅ 丰富的过滤参数(星级、排序、验证购买等)
  • ✅ 自动分页迭代,内存友好
  • ✅ 清晰的异常分类,易于错误处理
  • ✅ 积分预扣+自动退还机制,按实际用量计费

如有问题欢迎在 GitHub Issues 反馈。