快速入门 · 无需 PA-API · CLI · 端点 · 数据 · 错误 · MCP 和 Claude Code · 免费积分 · 文档 · 支持
使用 Python 以 JSON 格式获取 Amazon 产品、评论、卖家和搜索结果。无需登录,无需浏览器。基于 Bright Data Amazon 爬虫工具 API 构建。
使用 Bright Data Python SDK。完整 API 文档:Amazon 爬虫工具 API。
此外还提供:用于产品的一键式 CLI,以及完全不需要 Python 的 Bright Data CLI。
需要 Python 3.10 或更高版本。
pip install brightdata-sdk
export BRIGHTDATA_API_TOKEN=YOUR_API_KEY从 Bright Data 控制面板获取令牌。也可以在项目根目录中放置 .env 文件,但 virtualenv 必须位于项目内。
也可以不使用令牌。运行一次 npx -p @brightdata/cli bdata login:它会打开浏览器,此后 SDK 将自行找到已存储的凭据,供你以及在该终端中工作的任何编码智能体使用。智能体无法点击完成登录,因此请先自行登录。
还没有账户?创建账户;新账户每月可获得 5,000 个免费积分。
from brightdata import SyncBrightDataClient
with SyncBrightDataClient(auto_create_zones=False) as client:
product = client.scrape.amazon.products("https://www.amazon.com/dp/B0CRMZHDG8").data
print(product["title"])
print(product.get("final_price"), product["currency"], "|", product["rating"], "stars |",
product["reviews_count"], "reviews")STANLEY Quencher H2.0 Flow State Tumbler, 40 oz, Fuchsia
39.95 USD | 4.7 stars | 205036 reviews
每个产品消耗一个积分,API 给出的预估时间约为每个输入 7 秒。
每次都传入 auto_create_zones=False。如果保持启用,SDK 会在启动时为网络解锁器和 SERP 创建区域;这是此爬虫从不使用的另外两款 Bright Data 产品,而没有付款方式的账户会在创建区域时失败(sdk-python#57)。
products 接受 URL,而不是 ASIN,因此请像上面那样将 ASIN 写成 /dp/ URL。
使用 .get() 读取价格。缺货产品返回时,is_available 会设为 false,并且根本不会包含 final_price、initial_price、buybox_prices 或 availability,因此 product["final_price"] 会引发 KeyError。
Amazon 爬虫工具 API 不需要 Amazon 账户、卖家账户或 Product Advertising API(PA-API)访问密钥。唯一凭据是 Bright Data API 密钥,可将其设为 BRIGHTDATA_API_TOKEN,或通过 bdata login 存储。
此仓库中的命令会同时针对多个 ASIN 运行 Python 快速入门流程,并写入一个 JSON 文件。
pip install git+https://github.com/bright-cn/amazon-scraper-python
amazon-scraper B0CRMZHDG8 B085DVHQ57Fetching 2 Amazon products: B0CRMZHDG8, B085DVHQ57
One job for all of them. One credit per product.
asking 2 products...
got B0CRMZHDG8: 100 fields (STANLEY Quencher H2.0 Flow State Tumbler, 40 oz,)
got B085DVHQ57: 99 fields (Owala FreeSip Stainless Steel Water Bottle 32 oz)
Saved 2 of 2 products as JSON to amazon.json
它既可以接受产品 URL,也可以接受其中的 ASIN。同一 ASIN 出现两次时只会抓取一次,因此重复项不会产生费用。
在终端中,asking 行会被以下内容原地更新,让你看到它正在工作以及已经运行了多长时间:
⠹ 2 products 0:00:14
--out PATH output file, default amazon.json
python -m amazon_scraper 也可以使用。
你请求的每个 ASIN 都会放入同一个任务。API 按记录而不是按任务计费,因此抓取十个产品与抓取一个产品的等待时间相同。
也可以导入它而不是直接运行,以便按 ASIN 获取 ok 和 error,而非原始数据行。scrape 不会因某个无效 ASIN 而引发异常;读取 product 前请先检查 ok:
from amazon_scraper import scrape
for outcome in scrape(["B0CRMZHDG8", "B0ZZZZZZZZ"]):
if outcome.ok:
print(f"{outcome.asin}: {outcome.product['title']}")
else:
print(f"{outcome.asin} failed: {outcome.error}")B0CRMZHDG8: STANLEY Quencher H2.0 Flow State Tumbler, 40 oz, Fuchsia
B0ZZZZZZZZ failed: The navigation resulted in a dead page (404 status code)
该命令涵盖下表第一行。这里的每个代码片段都完整可用,并且只需要 brightdata-sdk:按原样粘贴即可。它们每周一都会在 Actions 中运行,规模较小的检查则每隔一天运行一次,顶部徽章显示最新结果。
| 你已有 | 你想要 | 调用 |
|---|---|---|
| 产品 URL | 该产品 | client.scrape.amazon.products(url) |
| 关键词 | 一页搜索结果 | client.search.amazon.products(keyword=...),请参阅下方说明 |
| 卖家 URL | 该卖家 | client.scrape.amazon.sellers(url) |
| 产品 URL | 其评论 | client.scrape.amazon.reviews(url),每条评论消耗一个积分,另请参阅下方说明 |
| 关键词、分类 URL、畅销商品 URL 或 UPC | 完整产品记录 | 没有对应的 Python 版本;请参阅下方说明 |
timeout 参数的单位是秒,Amazon 默认值为 240。
评论按每条评论一个积分计费。reviews() 接受 numOfReviews、pastDays 和 keyWord,但不会发送其中任何一个:请求仅根据 URL 构建(sdk-python#62)。因此,reviews(url, numOfReviews=20) 会请求全部评论,并且不会有任何警告。
API 确实支持上限参数 max_reviews,Bright Data 自己记录的示例也将其设为 20。SDK 不会将 numOfReviews 映射到该参数。
快速入门中的产品显示有 205,036 条评论。这只需一次调用。在 SDK 开始发送上限参数前,如果你需要数量受限的数据片段,请直接调用 REST 端点。
client.search.amazon.products(keyword=...) 会返回产品搜索数据集中的数据行,每行约 30 个字段,每条搜索结果对应一行。它与对应 Node 版本的关键词发现功能不同,后者返回包含全部 119 个字段的产品记录。
它没有限制返回行数的参数,也不会发送 pages_to_search。这里不会运行它,因为此 README 中的每个代码片段都会每周重新运行。
API 还可通过关键词、分类 URL、畅销商品 URL 和 UPC 发现完整产品记录。此 SDK 不支持这四种方式;JavaScript SDK 则全部支持。
URL 列表会作为一个任务处理,而不是每个产品一个任务。
from brightdata import SyncBrightDataClient
with SyncBrightDataClient(auto_create_zones=False) as client:
results = client.scrape.amazon.products([
"https://www.amazon.com/dp/B0CRMZHDG8",
"https://www.amazon.com/dp/B085DVHQ57",
])
for result in results:
row = result.data
print(row["asin"], "|", row["brand"], "|", row.get("final_price"), row["currency"])B0CRMZHDG8 | STANLEY | 39.95 USD
B085DVHQ57 | Owala | 29.99 USD
请像上面那样,从数据行自身的 asin 读取其对应的产品,绝不要读取 result.url。SDK 会按位置将结果与你传入的 URL 配对,而 API 每次运行返回的数据行顺序都不同,因此 result.url 可能指向一个产品,而 result.data 中保存的是另一个产品。每个结果还都会被标记为 success=True,包括失效 ASIN 的错误行(sdk-python#60)。
对于多于几个产品的任务,不要让进程阻塞一小时。触发任务、保存快照 ID,并在就绪后获取。快照可在 30 天内下载。
import time
from brightdata import SyncBrightDataClient
with SyncBrightDataClient(auto_create_zones=False) as client:
job = client.scrape.amazon.products_trigger("https://www.amazon.com/dp/B0CRMZHDG8")
print("snapshot:", job.snapshot_id)
while (status := client.scrape.amazon.products_status(job.snapshot_id)) not in ("ready", "failed"):
time.sleep(5)
print("status:", status)
record = client.scrape.amazon.products_fetch(job.snapshot_id)[0]
print("fetched:", record["asin"], "|", record["title"][:40])snapshot: sd_muars9x1e0ejmq4cx
status: ready
fetched: B0CRMZHDG8 | STANLEY Quencher H2.0 Flow State Tumbler
大多数人需要的产品字段:
asin title brand final_price currency rating reviews_count availability
代码没有硬编码任何字段列表。API 返回的所有内容都会写入 result.data,也会写入命令生成的文件。
API 在架构中使用 pii: true 将以下 3 个字段标记为个人数据:seller_name、zipcode 和 coupon。get_metadata() 会丢弃该标记(sdk-python#61),因此下表改为读取原始元数据端点。
全部 121 个字段,包含类型和说明
每天通过原始元数据端点从数据集架构重新生成,因此不会过时。一条产品记录会包含适用于它的字段:示例文件包含这 121 个字段中的 97 个,此外还有架构中未列出的 timestamp 和 input。
| 字段 | 类型 | 说明 |
|---|---|---|
title |
文本 | 产品标题 |
seller_name |
文本 | 个人数据。卖家名称 |
brand |
文本 | 产品品牌 |
description |
文本 | 产品的简要说明 |
initial_price |
价格 | 初始价格 |
currency |
文本 | 产品货币 |
availability |
文本 | 产品库存状态 |
reviews_count |
数字 | 评论数量 |
categories |
数组 | 产品分类 |
parent_asin |
文本 | 产品的父 ASIN |
asin |
文本 | 每个产品的唯一标识符 |
buybox_seller |
文本 | 购买框中的卖家 |
number_of_sellers |
数字 | 产品的卖家数量 |
root_bs_rank |
数字 | 常规分类中的畅销商品排名 |
ISBN10 |
文本 | 图书的 ISBN-10 标识符 |
answered_questions |
数字 | 已回答的问题数量 |
domain |
URL | 产品域名的 URL |
images_count |
数字 | 图片数量 |
url |
URL | 直接链接到产品的 URL |
video_count |
数字 | 视频数量 |
image_url |
URL | 直接链接到产品图片的 URL |
item_weight |
文本 | 产品重量 |
rating |
数字 | 产品评分 |
product_dimensions |
文本 | 产品尺寸 |
seller_id |
文本 | 每个卖家的唯一标识符 |
image |
URL | 直接链接到产品图片的 URL |
date_first_available |
文本 | 产品首次上架日期 |
discount |
文本 | 产品折扣信息 |
model_number |
文本 | 产品型号 |
manufacturer |
文本 | 产品制造商 |
department |
文本 | 产品所属部门 |
plus_content |
布尔值 | 表示是否存在额外内容的布尔值 |
upc |
文本 | 通用产品代码 |
video |
布尔值 | 表示是否存在视频的布尔值 |
top_review |
文本 | 产品的热门评论 |
final_price_high |
价格 | 最终价格为区间时的最高值 |
final_price |
价格 | 产品最终价格 |
variations |
数组 | 同一产品不同变体的详细信息 |
delivery |
数组 | 配送相关信息 |
features |
数组 | 产品特性 |
format |
数组 | 图书格式相关信息 |
buybox_prices |
对象 | 产品价格详情 |
input_asin |
文本 | 输入的 ASIN(当前未启用) |
ingredients |
文本 | 产品成分,主要适用于食品 |
origin_url |
URL | 用于提取此记录的源页面 URL |
bought_past_month |
数字 | 过去一个月的购买量(按 Amazon 显示) |
is_available |
布尔值 | 表示产品是否仍然有货 |
root_bs_category |
文本 | 畅销商品根分类 |
bs_category |
文本 | 畅销商品分类 |
bs_rank |
数字 | 特定分类中的畅销商品排名 |
badge |
文本 | 产品徽章。例如:#1 Best Seller 或 Amazons Choice |
subcategory_rank |
数组 | 按子分类划分的畅销商品排名条目 |
amazon_choice |
布尔值 | 指定产品是否为 Amazons Choice |
images |
数组 | 产品图片 URL |
product_details |
数组 | 完整产品详情 |
prices_breakdown |
对象 | 标价/常规价格及优惠状态的明细 |
country_of_origin |
文本 | 产品原产国 |
from_the_brand |
数组 | 页面上显示的品牌推广媒体 |
product_description |
数组 | 嵌入产品描述部分的媒体 |
seller_url |
URL | Amazon 上的卖家店面/资料 URL |
customer_says |
文本 | 客户评价 |
sustainability_features |
数组 | 带有参考信息的可持续性徽章/认证 |
climate_pledge_friendly |
布尔值 | 产品是否显示 Climate Pledge Friendly 徽章 |
videos |
数组 | 产品视频 URL |
other_sellers_prices |
数组 | 其他卖家提供的同一产品报价 |
downloadable_videos |
数组 | 直接媒体 URL |
editorial_reviews |
数组 | 图书的编辑评论 |
about_the_author |
文本 | 作者简介信息 |
zipcode |
文本 | 个人数据。用于配送和库存预估的 ZIP/邮政编码 |
coupon |
文本 | 个人数据。优惠券 |
sponsered |
布尔值 | 赞助 |
store_url |
URL | 产品商店 URL |
ships_from |
文本 | 商品发货地 |
city |
文本 | 与配送或卖家/位置上下文相关的城市 |
customers_say |
对象 | 从评论中提取的 Amazon Customers say 摘要 |
max_quantity_available |
数字 | 允许加入购物车的最大数量 |
variations_values |
数组 | 变体及其可能的值 |
language |
文本 | 产品页面/内容的语言 |
return_policy |
文本 | 产品页面上显示的退货政策文本 |
inactive_buy_box |
对象 | 购买框不可用/未启用时的价格信息 |
buybox_seller_rating |
数字 | 购买框卖家的评分 |
premium_brand |
布尔值 | 是否为高端品牌 |
amazon_prime |
布尔值 | 是否支持 Amazon Prime 配送 |
coupon_description |
文本 | 优惠券说明 |
all_badges |
数组 | 所有徽章 |
sponsored |
布尔值 | Amazon Sponsored 标记 |
variant_id |
文本 | 特定变体的唯一标识符 |
product_category |
文本 | 使用分隔符连接的完整面包屑路径 |
category_tree |
数组 | 由包含名称和 URL 的对象构成的分类层级数组 |
availability_date |
文本 | 缺货商品的预计到货日期 |
listing_has_variations |
布尔值 | 商品信息是否包含多个变体 |
variant_attributes |
数组 | 以名称/值对表示的当前变体属性 |
variants |
数组 | 按类型分组的结构化变体选项 |
seller_privacy_policy |
文本 | 卖家隐私政策 URL |
seller_tos |
文本 | 卖家服务条款 URL |
return_window |
数字 | 退货期限天数 |
target_countries |
数组 | 产品可配送到的国家/地区 |
store_country |
文本 | 商店国家/地区 |
category_urls |
数组 | 分类面包屑 |
all_variations |
布尔值 | 用于采集所有变体的输入字段 |
safety_information |
文本 | 安全信息 |
subcategory_link |
数组 | 按子分类划分的畅销商品链接条目 |
all_inactive_buy_box |
数组 | 所有未启用的购买框信息 |
is_frequently_returned_item_badge |
布尔值 | 表示徽章是否存在 |
frequently_returned_item_message |
文本 | 警告框中显示的文本 |
is_customers_usually_keep |
布尔值 | 表示客户是否通常会保留此商品 |
title_badge |
文本 | 徽章标题 |
review_images |
数组 | 评论图片 |
review_videos |
数组 | 评论视频 |
also_viewed |
数组 | 客户还浏览了 |
similar_items |
数组 | 考虑类似商品 |
bought_past_month_text |
文本 | 过去一个月的购买量(按 Amazon 显示),文本格式。 |
is_high_price |
布尔值 | 表示产品是否被标记为高价。 |
title_highlight |
文本 | 采集 Amazon 在产品页面中紧接产品标题后呈现的补充营销/亮点文本 |
title_clean |
文本 | 由卖家/品牌定义的实际产品标题,不包括 Amazon 可能在页面标题旁边或之后呈现的任何亮点文本 |
customers_say_topics |
数组 | “Customers say”部分的结构化明细 |
brand_url |
URL | 产品品牌 URL |
variant_condition |
文本 | 产品变体的状况(例如 New、Renewed、Refurbished - Excellent)。 |
is_aplus_premium |
布尔值 | 表示产品是否为 Premium A+ |
buying_option_type |
文本 | 购买选项类型 |
amazon_checkout_promotion |
对象 | 产品的结账促销 |
实际输出文件的开头,来自 amazon-scraper B0CRMZHDG8
{
"generated_at": "2026-09-21T04:54:18.105606+00:00",
"products": [
{
"asin": "B0CRMZHDG8",
"product": {
"title": "STANLEY Quencher H2.0 Flow State Tumbler, 40 oz, Fuchsia",
"seller_name": "Avrix Brands",
"brand": "STANLEY",
"description": "Constructed of recycled stainless steel for sustainable sipping, our 40 oz Quencher H2.0 offers maximum hydration with fewer refills. Commuting, studio workouts, day trips or your front porch\u2014you\u2019ll want this tumbler by your side. Thanks to Stanley\u2019s vacuum insulation, your water will stay ice-cold, hour after hour. The advanced FlowState\u2122 lid features a rotating cover with three positions: a straw opening designed to resist splashes while holding the reusable straw in place, a drink opening, and a full-cover top. The ergonomic handle includes comfort-grip inserts for easy carrying, and the narrow base fits just about any car cup holder.",
"initial_price": 45,
"currency": "USD",
"availability": "In Stock",
"reviews_count": 205036,
"categories": [
"Home & Kitchen",
"Kitchen & Dining",
"Storage & Organization",
"Thermoses",
...包含一个产品及其所有字段的完整文件位于 examples/sample_output.json。
| 你看到的内容 | 含义 |
|---|---|
API token required but not found. |
在任何请求发出前以状态码 2 退出。请设置令牌。 |
failed ASIN: The navigation resulted in a dead page (404 status code) |
以状态码 1 退出。不存在该产品,通常是 ASIN 拼写错误。 |
failed ASIN: the API returned no row for this ASIN |
以状态码 1 退出。任务返回时没有该输入对应的数据行。请重新运行。 |
failed ASIN: timeout |
以状态码 1 退出。请求在 240 秒后放弃。请重新运行。 |
failed ASIN: Failed to fetch results: Request timeout after 30 seconds |
以状态码 1 退出。任务已完成,但下载耗时超过 30 秒。请重新运行。 |
任何失败都会以状态码 1 退出,因此可以安全地根据运行结果决定是否继续执行脚本。
在 SDK 中,相同情况如下所示:
| 你看到的内容 | 含义 |
|---|---|
AuthenticationError: Unauthorized (401) |
令牌已设置但不正确。 |
result.success 为 False,result.status 为 "timeout" |
SDK 放弃等待任务,默认等待时间为 240 秒。向调用传入更大的 timeout,或重新运行。 |
Failed to fetch results: Request timeout after 30 seconds |
任务已完成,但下载失败。这是客户端自身对每个 HTTP 请求的限制 SyncBrightDataClient(timeout=30),而不是你传给调用的 timeout。提高调用的 timeout 无济于事。 |
result.data 中包含 error 键的字典 |
API 对一个输入的响应。result.success 仍然显示 True;请读取数据行。 |
无需 Python,也无需安装任何内容。粘贴这两行;第一行会打开一次浏览器,或者通过 SSH 和 CI 使用 bdata login --device:
npx -p @brightdata/cli bdata login
npx -p @brightdata/cli bdata pipelines run gd_l7q7dkf244hwjntr0 collect_by_url "https://www.amazon.com/dp/B0CRMZHDG8"这是 CLI 0.4.0 的语法;旧版 bdata pipelines amazon_product 形式已在该版本中移除。bdata pipelines search amazon 用于查找爬虫工具 ID。Amazon 对应的 ID 为 gd_l7q7dkf244hwjntr0(产品)、gd_le8e811kzy4ggddlq(评论)和 gd_lwdb4vjm1ehb499uxs(搜索),均使用 collect_by_url 方法。bdata pipelines info <id> collect_by_url 会列出爬虫工具的输入字段。每个工具都接受 URL、输出 JSON,并且每条记录消耗一个积分。
npx skills add brightdata/skills 会让 Claude Code、Cursor 和 Codex 掌握这些命令和文档,此后即可使用自然语言操作。完整指南:面向编码智能体的 Bright Data。
要为没有终端的托管助手使用?Bright Data MCP 服务器的 ecommerce 组中包含 Amazon 工具,该组默认关闭,需明确请求启用:
https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN&groups=ecommerce
智能体还可以自行创建账户,无需填写注册表单:智能体注册。Bright Data 支持的所有其他连接方式,从 LangChain 到 Zapier 和 n8n:集成。
新的 Bright Data 账户每月可获得 5,000 个免费积分。产品和搜索结果按每条记录一个积分计费,评论按每条评论一个积分计费,因此免费积分每月可覆盖 5,000 个产品。价格中列出了超出后的费率。
此仓库中的错误:提交 issue,CONTRIBUTING.md 说明了需要提供哪些内容。任何与 API、你的账户或积分有关的问题,请联系 Bright Data 支持团队。
同一个 Amazon 爬虫工具也提供 Node.js 版本:bright-cn/amazon-scraper-node。
