上周末,我一边喝咖啡,一边连续试了 4 种不同的方法来抓取 Amazon 畅销榜页面。两种效果不错,一种差点把我的 IP 搞封了,还有一种只需要点一下就能完成。下面是我整理出来的全部经验。
Amazon 是一个超大的电商平台——6 亿个商品列表、3.1 亿多个活跃客户账户,还有每小时更新一次的畅销榜排名系统(BSR)。如果你在做 FBA 选品、竞品定价分析,或者只是想比竞争对手更早发现趋势,畅销榜数据绝对是个宝藏。
但要把这些数据从 Amazon 抓下来,再导入表格里?这才是真正的难点。为了看看哪种方法真的靠谱、哪种方法只会把你带进 CAPTCHA 页面,我测试了 requests + BeautifulSoup、Selenium、抓取 API,以及 Thunderbit(我们自己的无代码 AI 网页爬虫)。
什么是 Amazon 畅销榜?为什么你应该关注?
Amazon Best Sellers Rank(BSR)是 Amazon 的实时排行榜,会根据各个分类中的销量对商品进行排序。你可以把它理解成一个每小时更新一次的人气榜,依据的是近期和历史销售数据。Amazon 官方是这样描述的:
“Amazon Best Sellers 的计算基于 Amazon 销售数据,并每小时更新一次,以反映 Amazon 上售出商品的近期和历史表现。”—— Amazon Seller Central
畅销榜页面会展示每个类目前 100 个商品,分成两页,每页 50 个。第一页是 #1–50,第二页是 #51–100。Amazon 已经确认,页面浏览量和客户评论 不会 影响 BSR——它完全由销量驱动。
谁会关心这些数据?做 FBA 选品的电商卖家、搭建竞品情报的销售团队、监控价格趋势的运营团队,以及追踪类目增长的市场研究人员。按我的经验,任何在 Amazon 上卖货,或者和 Amazon 竞争的人,迟早都会需要这些数据,而且希望它们能直接出现在表格里。
为什么要用 Python 抓取 Amazon 畅销榜?
手动做产品调研特别耗时间。麦肯锡的一项研究发现,员工每周有 9.3 小时都花在搜索和收集信息上。对电商团队来说,这意味着要花很多时间在 Amazon 页面之间来回点,复制商品名和价格,再粘贴进表格——下周还得再来一遍。
下面这个表格能快速说明,抓取畅销榜到底值不值得:
| 使用场景 | 你能得到什么 | 谁会受益 |
|---|---|---|
| FBA 选品调研 | 根据 BSR 和评论数找出高需求、低竞争产品 | Amazon 卖家、Dropshipper |
| 竞品定价分析 | 跟踪类目头部产品的价格变化 | 电商团队、定价分析师 |
| 市场趋势监测 | 发现增长中的类目和季节性变化 | 产品经理、市场研究人员 |
| 线索挖掘 | 整理畅销品牌及其产品线名单 | 销售团队、B2B 外联团队 |
| 竞品分析 | 将你的产品与类目头部玩家做对标 | 品牌经理、战略团队 |
投入产出比其实很明显:一项针对 2,700 名零售与电商从业者的 Salesforce 调查 显示,AI 工具平均每周可为电商从业者节省 6.4 小时。而使用自动化价格监控的卖家,Buy Box 占有率能达到 67%,相比手动监控的 42% 提升很明显——这带来了 37% 的销量增长,核心原因就是能更快响应价格变化。
用 Python 抓取 Amazon 畅销榜的 4 种方法:快速对比
在进入具体教程之前,我先给你看一张我真希望自己在测试前就有的对比表。它能帮你很快选出最适合你的方案:
| 对比维度 | requests + BS4 | Selenium | 抓取 API(例如 Scrape.do) | Thunderbit(无代码) |
|---|---|---|---|---|
| 上手难度 | 中等 | 高(驱动、浏览器) | 低(API Key) | 很低(Chrome 扩展) |
| 支持懒加载 | 否 | 是(模拟滚动) | 是(渲染后的 HTML) | 是(AI 处理渲染) |
| 反爬抗性 | 低(容易被封 IP) | 中等(可被识别) | 高(轮换代理) | 高(云端 + 浏览器模式) |
| 维护成本 | 高(选择器容易失效) | 高(驱动更新 + 选择器) | 低 | 很低(AI 适应页面变化) |
| 成本 | 免费 | 免费 | 付费(按请求计费) | 有免费额度 + 付费套餐 |
| 最适合 | 一次性抓取、学习 | JS 重页面、需要登录的页面 | 大规模 / 生产环境 | 非开发者、快速调研、持续监控 |
如果你想学习 Python 爬取的基础知识,可以从方法 1 或 2 开始。如果你需要生产级稳定性,建议用方法 3。如果你只想点一下就拿到结果,不想写代码,那就直接看方法 4。
开始之前
- 难度: 初级到中级(取决于方法)
- 所需时间: Thunderbit 约 15 分钟,Python 方法约 45 分钟
- 你需要准备: Python 3.8+(方法 1–3)、Chrome 浏览器、Thunderbit Chrome 扩展(方法 4)、以及一个目标 Amazon 畅销榜类目 URL
方法 1:使用 requests + BeautifulSoup 抓取 Amazon 畅销榜
这是一个轻量、适合新手的方法——不需要浏览器自动化,只用 HTTP 请求和 HTML 解析。但它也让我最直观地感受到 Amazon 的反爬防御到底有多强。
第 1 步:搭建环境
安装所需依赖:
pip install requests beautifulsoup4 pandas
然后导入库:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
第 2 步:使用真实的请求头发送请求
Amazon 会拦截看起来像机器人发出的请求。最基础的防护就是使用 User-Agent 请求头,让它看起来像一个真实浏览器。下面这段示例包含了一组当前可用、比较真实的 User-Agent 字符串(来源于 Geekflare,2026 年 3 月):
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
]
headers = {"User-Agent": random.choice(USER_AGENTS)}
url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
response = requests.get(url, headers=headers)
print(response.status_code) # 应该返回 200
如果你看到 200 状态码,说明请求成功了。如果是 503,或者被跳转到 CAPTCHA 页面,那就说明 Amazon 已经识别并拦截了你的请求。
第 3 步:用 BeautifulSoup 解析商品数据
你可以在浏览器里打开 Amazon 页面,然后用开发者工具查看 HTML 结构(右键 → 检查)。商品容器使用的是 gridItemRoot 这个 ID。在容器内部,你会找到商品名称、价格、评分和 URL。
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("div", id="gridItemRoot"):
title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
link_tag = item.find("a", class_="a-link-normal")
title = title_tag.get_text(strip=True) if title_tag else "N/A"
price = price_tag.get_text(strip=True) if price_tag else "N/A"
url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
products.append({"Title": title, "Price": price, "URL": url})
提示: 带有
_cDEzb_前缀的类名是 Amazon 定期重生成的 CSS 模块哈希值。gridItemRoot这个 ID 和a-link-normal这个类名相对稳定一些,但在正式运行前,最好还是先用 DevTools 再确认一遍选择器。
第 4 步:导出为 CSV
df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"Scraped {len(products)} products")
你会看到什么,以及常见问题
在我的测试里,这种方法只返回了大约 30 个商品,而不是 50 个。这不是代码 bug,而是 Amazon 的懒加载机制。初次页面加载时只渲染约 30 个商品,其余内容要在滚动后才会出现,而 requests 无法执行 JavaScript,所以看不到后面的内容。
其他限制包括:
- 如果不做代理轮换,很容易被封 IP(我在快速连续请求约 15 次后就被拦了)
- Amazon 一更新页面布局,CSS 选择器就可能失效,而且这种更新很频繁
- 默认不支持分页处理
如果你只是想学习 Python 爬虫,这个方法很合适。但如果是正式用途,它比较脆弱。
方法 2:使用 Selenium 抓取 Amazon 畅销榜
Selenium 通过运行真实浏览器解决了懒加载的问题——配置更重一些,但它可以抓到每页完整的 50 个商品。
第 1 步:安装 Selenium
pip install selenium pandas
好消息是:从 Selenium 4.6+ 开始,你不再需要 webdriver-manager 了。Selenium Manager 会自动处理驱动下载。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
--headless=new 参数(Chrome 109+ 引入)使用和可视模式 Chrome 相同的渲染流程,因此更不容易被 Amazon 识别为自动化程序。
第 2 步:滚动页面,触发懒加载
这一步就是 Selenium 值得多花时间配置的原因。Amazon 畅销榜最开始只加载大约 30 个商品,剩下的要滚动后才会显示。
def scroll_page(driver, scrolls=5, delay=2):
for _ in range(scrolls):
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
time.sleep(delay)
driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
time.sleep(3)
scroll_page(driver)
滚动完成后,理论上 50 个商品都会出现在 DOM 中。我测试发现,5 次向下翻页、每次等待 2 秒,基本就够了,但你可能要根据网络速度自己调整。
第 3 步:提取商品数据
items = driver.find_elements(By.ID, "gridItemRoot")
products = []
for item in items:
try:
title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
except:
title = "N/A"
try:
price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
except:
price = "N/A"
try:
url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
except:
url = "N/A"
products.append({"Title": title, "Price": price, "URL": url})
把每个字段的提取都放进 try/except 里很重要——有些商品可能缺货,或者某些字段缺失。你不希望一个异常元素就让整个抓取任务崩掉。
第 4 步:处理分页
Amazon 会把 100 个畅销商品分成两页,URL 结构也不同:
urls = [
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
]
all_products = []
for url in urls:
driver.get(url)
time.sleep(3)
scroll_page(driver)
# ... 按上面的方式提取商品 ...
all_products.extend(products)
driver.quit()
结果如何?
在我的测试里,Selenium 成功抓到了每页完整的 50 个商品——这明显比 requests + BS4 更强。缺点也很明显:每页大约要 45 秒(包括滚动等待),而且我在没有代理轮换的情况下重复运行几次后,还是被识别了。即使加了反检测参数,Selenium 仍然会被 Amazon 的反爬系统识别;如果要做大规模抓取,你还需要更多手段(见下面的反封禁策略)。
其他痛点:
- WebDriver 版本不匹配的问题偶尔仍会出现,不过 Selenium Manager 已经把这个问题缓解了很多
- 只要 Amazon 改了 DOM,CSS 选择器就得跟着更新
- 内存占用较高——每个浏览器实例大概会吃掉 200–400MB 内存
方法 3:使用抓取 API 抓取 Amazon 畅销榜
抓取 API 就是“把难事交给别人”的方案。像 Scrape.do、Oxylabs 和 ScrapingBee 这类服务会帮你处理代理轮换、JavaScript 渲染和反爬机制——你只需要传入 URL,就能拿回 HTML 或 JSON。
原理是什么?
你把目标 URL 发给 API 端点。API 会在它们自己的基础设施上用真实浏览器渲染页面,轮换代理,处理 CAPTCHA,然后返回干净的 HTML。接着你再像平常一样用 BeautifulSoup 解析这些 HTML 就行了。
第 1 步:通过 API 发起请求
下面是使用 Scrape.do 的示例(起售价为每月 29 美元,可获得 150,000 credits,1 credit = 1 次请求,不论是否渲染):
import requests
from bs4 import BeautifulSoup
api_token = "YOUR_API_TOKEN"
target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
response = requests.get(api_url)
soup = BeautifulSoup(response.text, "html.parser")
后面的解析逻辑和方法 1 完全一样——同样的选择器,同样的提取方式。
价格现实吗?
下面是几家主流 API 按每 1,000 次 Amazon 请求计算的大致成本,按它们可提供的最佳价格来看:
| 服务商 | 每 1,000 次请求成本 | 说明 |
|---|---|---|
| Scrape.do | 约 $0.19 | 固定费率,没有额外倍率 |
| Oxylabs | 约 $1.80 | JS 渲染会有 5 倍倍率 |
| ScrapingBee | 约 $4.90 | 高级功能会有 5–25 倍倍率 |
| Bright Data | $5.00+ | 数据最全面(每个商品 686 个字段),但速度最慢(约 66 秒/请求) |
优缺点分析
优点: 稳定性高(头部服务商在 Amazon 上的成功率约为 99%),无需自己维护驱动,自动处理反爬,扩展性好。
缺点: 按请求付费,规模一大成本会迅速上升;你仍然需要自己写解析代码;CSS 选择器变化时依然会出问题。对于每月 100,000 个页面的量级,整体成本差异非常夸张:自建方案三年总成本大约是 198 万美元,而 API 方案约 33.2 万美元——节省约 71%。
通常在每月 50 万到 100 万次请求之间会出现盈亏平衡点。低于这个规模时,API 节省下来的时间往往比成本更值钱。
方法 4:使用 Thunderbit 抓取 Amazon 畅销榜(无需 Python)
先说明一下:我在 Thunderbit 工作,所以这一段你可以结合这个背景来理解。不过我确实把这四种方法连着测了一遍,而从“开始操作”到“拿到数据”的速度差距真的非常明显。
Thunderbit 是一个以 Chrome 扩展形式运行的 AI 网页爬虫。它的核心思路是:你不需要写 CSS 选择器,也不需要写 Python 代码,AI 会直接读取页面并判断应该提取哪些数据。针对 Amazon 畅销榜,Thunderbit 还提供了开箱即用的模板,一键就能跑。
第 1 步:安装 Thunderbit Chrome 扩展
打开 Chrome 网上应用店,点击“添加至 Chrome”。然后注册一个免费账户——免费版已经足够你先体验。
第 2 步:打开 Amazon 畅销榜页面
在 Chrome 中打开任意 Amazon 畅销榜类目页面,例如:
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
第 3 步:点击“One Click Extract”
打开 Thunderbit 侧边栏,点击“One Click Extract”。AI 会自动分析页面结构,识别出列字段:商品名、价格、评分、图片 URL、卖家、商品 URL 和排名。在我的测试里,它大约 3 秒就正确识别出了所有相关字段。

你可以重命名、删除或新增列。你甚至可以为每个字段添加自定义 AI 提示词——比如输入“按 Electronics/Apparel/Home 分类”,就能给每个商品自动加上类目标签。
第 4 步:点击“Scrape”
点击“Scrape”按钮。Thunderbit 会把页面中的所有商品数据整理成结构化表格。在云端模式下,它可以并行处理最多 50 个页面,同时自动处理懒加载和分页。
第 5 步:免费导出
点击“Export”,然后选择导出目标:Excel、Google Sheets、Airtable 或 Notion。所有套餐都支持免费导出,没有隐藏费用。

从打开页面到拿到完整表格,我总共只花了大约 90 秒。对比之下,方法 1 大约用了 20 分钟(包括排查懒加载问题),方法 2 大约用了 35 分钟(包括 Selenium 环境配置),方法 3 大约用了 15 分钟(包括 API 账号配置)。
为什么 Thunderbit 很适合抓 Amazon?
因为 AI 每次都会重新读取页面,所以它能自动适应布局变化——不需要维护 CSS 选择器。这正好解决了爬虫论坛里最常见的抱怨:"一个基础网页爬虫根本不够,你还得为元素变化加一堆‘兜底逻辑’。" 当 Amazon 改变 DOM 时(这种情况很常见),你无需做任何修改。
云端爬取模式会透明地处理代理轮换、页面渲染和反爬措施。对于想要“拿来就用”方案的用户来说,这几乎把所有反封禁的麻烦都省掉了。
省去维护选择器的麻烦 当 Amazon 更新页面结构时,BeautifulSoup 选择器就可能失效。Thunderbit 的 AI 会在每次运行时重新读取页面,并自动识别字段。 Get Started Free
反封禁策略:如何避免被 Amazon 封掉
Amazon 的反爬检测非常激进。测试期间我就曾暂时被封 IP,论坛里也有很多类似反馈:"到处报错,Amazon 甚至开始把我重定向到首页。" 如果你打算走 Python 路线(方法 1–3),这一部分非常关键。
下面是一个从基础到进阶的分层策略:
1. 轮换 User-Agent 字符串
一遍又一遍发送相同的 User-Agent 是个明显的红旗。使用方法 1 里的 5 个以上字符串池,并且每次请求随机选一个:
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. 在请求之间加入随机延迟
固定延迟很容易被识别出规律。随机延迟更安全:
time.sleep(random.uniform(2, 5))
我发现,当请求间隔保持在 2–5 秒时,小批量抓取(少于 50 个请求)比较不容易触发风控。更大规模的任务建议提高到 3–7 秒。
3. 使用代理轮换
这是最关键的一步。Proxyway 的基准测试显示,住宅代理在 Amazon 上的平均成功率约为 94%,而数据中心代理只有约 59%——差了 35 个百分点。Amazon 的检测系统会综合 TLS 指纹、行为分析和按 IP 限速,因此普通数据中心 IP 往往几秒内就会被识别。
住宅代理虽然更贵(根据服务商不同,每 GB 约 $2–$12),但可靠性高得多。示例代码如下:
proxies = {
"http": "http://user:pass@residential-proxy.example.com:8080",
"https": "http://user:pass@residential-proxy.example.com:8080"
}
response = requests.get(url, headers=headers, proxies=proxies)
4. 强化浏览器指纹(Selenium)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 在 driver 初始化后,移除 navigator.webdriver 标记
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
5. 管理会话和 Cookie
在请求之间保留 Cookie,会让你的爬虫更像一个真实用户会话:
session = requests.Session()
# 先访问首页,获取更真实的 cookies
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# 再抓取目标页面
response = session.get(target_url, headers=headers)
6. 什么时候可以直接跳过这些麻烦?
如果你不想维护这些东西,Thunderbit 的云端爬取会透明地处理代理轮换、页面渲染和反爬措施。抓取 API 也会默认帮你处理大部分问题。按我的经验,排查反封禁问题花掉的时间,往往比写抓取代码本身还多——所以“开箱即用”的方案回报真的很高。
子页面补充抓取:抓商品详情页,获取更丰富的数据
畅销榜列表页只会显示基础信息——标题、价格、评分、排名。但如果你做 FBA 研究,真正有价值的信息通常藏在单个商品详情页里。只抓列表页的话,你会错过这些字段:
| 字段 | 列表页 | 商品详情页 |
|---|---|---|
| 商品名 | ✅ | ✅ |
| 价格 | ✅ | ✅ |
| 评分 | ✅ | ✅ |
| BSR 排名 | ✅ | ✅(含子类目排名) |
| 品牌 | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| 首次上架时间 | ❌ | ✅ |
| 尺寸/重量 | ❌ | ✅ |
| 卖家数量 | ❌ | ✅ |
| 要点式功能介绍 | ❌ | ✅ |
| Buy Box 持有者 | ❌ | ✅ |
其中“首次上架时间”特别有价值——它能告诉你一个产品在市场上已经存在多久,这是判断竞争强度的重要信号。而知道卖家数量和 Buy Box 持有者,也能帮助你判断某个细分市场值不值得进入(如果 Amazon 自己占据了超过 30% 的 Buy Box 份额,竞争通常会很难打)。
Python 方案:遍历商品 URL
在从列表页收集到商品 URL 后,可以加入延迟逐个访问详情页:
for product in products:
time.sleep(random.uniform(3, 6))
detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
detail_soup = BeautifulSoup(detail_response.text, "html.parser")
# 提取品牌
brand_tag = detail_soup.find("a", id="bylineInfo")
product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
# 从页面源码或 URL 中提取 ASIN
# 从商品详情表中提取首次上架时间
# ... 更多字段 ...
提醒一下:如果你要抓 100 个单独的商品页面,封禁风险会明显上升。一定要把代理轮换和更长的延迟预算进去。
Thunderbit 方案:一键抓取子页面
在把列表页抓成表格后,点击 Thunderbit 里的“Scrape Subpages”。AI 会自动访问每个商品 URL,并为表格补充更多列——品牌、ASIN、规格、功能等,全自动完成。无需额外代码、选择器或配置。对于需要完整采购信息、但又不想自己维护详情页解析器的电商团队来说,这尤其有用。
自动化定时抓取:持续监控畅销榜变化
一次性抓取当然有用,但真正的竞争优势来自持续监控。追踪哪些产品在上升或下滑,尽早发现趋势,以及在几周或几个月内监控价格变化——这才是从“随手查查”升级为“数据驱动决策”的关键。
Python 方案:用 cron 定时执行
在 Linux 或 Mac 上,你可以用 cron 来调度 Python 脚本。下面是每天早上 8 点执行抓取的 crontab 示例:
0 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
如果要每周一早上 9 点执行:
0 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
在 Windows 上,可以使用任务计划程序实现同样的效果。如果你希望任务持续运行,但又不想让笔记本一直开着,可以部署到 VPS 或 AWS Lambda——不过这会增加基础设施管理复杂度。
记得加日志和错误通知,这样才能及时发现失败任务。最糟糕的情况莫过于两周后才发现你的爬虫早就悄悄挂了。
Thunderbit 方案:用自然语言设置定时爬虫
Thunderbit 的 Scheduled Scraper 支持用自然语言描述间隔——输入“每周一早上 9 点”或“每天早上 8 点”,AI 就能理解并执行。任务会在 Thunderbit 的云端服务器上运行(无需你的浏览器或电脑保持开启),并且数据会自动导出到 Google Sheets 或 Airtable。这样就能搭建一个实时监控仪表板,而且完全不需要服务器运维,非常适合希望持续可见、但不想承担 DevOps 成本的运营团队。
抓取 Amazon 时的法律与合规注意事项
我不是律师,这也不是法律建议。但在爬虫教程里完全不谈法律环境是不负责任的——论坛用户会直接提到服务条款问题,而且他们这样担心是有原因的。
Amazon 的 robots.txt: 截至 2026 年,Amazon 的 robots.txt 包含 80 多个明确的 Disallow 路径,但 /gp/bestsellers/ 并没有被标准 User-Agent 明确禁止。不过,35+ 个 AI 相关 User-Agent(例如 ClaudeBot、GPTBot、Scrapy 等)会被统一 Disallow: /。没有写明禁止,并不代表 Amazon 认可抓取。
Amazon 服务条款: Amazon 的 Conditions of Use(2025 年 5 月更新)明确禁止在没有书面许可的情况下,“使用任何自动化流程或技术访问、获取、复制或监控 Amazon 网站的任何部分”。这不是理论问题——Amazon 于 2025 年 11 月起诉 Perplexity AI 未经授权的自动化访问,并获得了初步禁令支持。
hiQ v. LinkedIn 先例: 在 hiQ Labs v. LinkedIn(第九巡回法院,2022 年)中,法院认为抓取公开可访问数据可能不违反《计算机欺诈和滥用法案》(CFAA)。但 hiQ 最终还是达成和解,并同意停止抓取——也就是说,在 CFAA 层面胜诉,并不意味着你不会面临合同违约诉讼。
实务建议:
- 只抓取公开可见的数据(价格、BSR、商品标题,不要抓个人敏感信息)
- 尊重速率限制,不要给服务器造成压力
- 将数据用于合法的竞品情报分析
- 在大规模抓取前咨询自己的法律顾问
- 注意到 20 多个美国州 已经有较全面的隐私立法
Thunderbit 的云端爬取使用的是标准、类似浏览器的请求模式,但你仍然应该先让自己的法律顾问确认合规性。
这次不用写 Python 如果你的目标是拿到一个表格,而不是搭一条数据管道,那么点一下就能完成。可直接导出到 Excel、Google Sheets、Airtable 或 Notion。 Get Started Free
你应该选哪种方法?快速决策指南
简单总结如下:
- “我在学 Python,想做一个周末项目。” → 方法 1(requests + BeautifulSoup)。你会学到很多关于 HTTP 请求、HTML 解析和 Amazon 反爬机制的知识。
- “我需要抓取 JS 很重的页面,或者登录后的会话。” → 方法 2(Selenium)。它更重,但能处理动态内容。
- “我要做大规模生产级抓取。” → 方法 3(抓取 API)。把代理和渲染交给别人处理吧。在每月 50 万请求以下,总拥有成本更偏向 API。
- “我不是开发者,我 2 分钟内就要拿到数据。” → 方法 4(Thunderbit)。无需代码、无需选择器、无需维护。
- “我需要持续监控,但不想管理服务器。” → Thunderbit Scheduled Scraper。设置一次,之后就不用管了。
试试 Thunderbit 抓 Amazon 畅销榜 Get Started Free
结论与核心收获
经过一整个周末的测试,真正让我印象深刻的是这些:
requests + BeautifulSoup 很适合学习,但它受限于懒加载问题(50 个商品里只能看到约 30 个),而且 CSS 选择器很脆弱,所以不太适合生产环境。
Selenium 解决了懒加载问题,能抓到每页完整 50 个商品,但速度慢、占内存,而且仍然可能被 Amazon 的反爬系统识别。
抓取 API 是生产级爬取里最稳定的选择——在 Amazon 上成功率大约 99%——但成本会随着规模上升,而且你还是要自己写解析代码。
Thunderbit 在拿到数据的速度上优势非常明显。AI 会自动处理页面变化、懒加载、分页和反爬措施,而且无需任何配置。对于非技术用户,或者需要持续获取数据、又不想承担 DevOps 负担的团队来说,它是最实用的选择。
最大的教训是什么?Amazon 的反爬机制和频繁的页面改版意味着,长期来看,免维护方案最省时间。你花在修复失效选择器和轮换代理上的每一小时,都是没有花在真正分析上的一小时。
想试试无代码方案?Thunderbit 免费版提供的额度足够你抓几个畅销榜类目,亲眼看看效果。更偏爱 Python 路线?上面的代码示例应该足够你开始上手。不管选哪条路,你最终都会把 Amazon 畅销榜数据放进表格里,而不是盯着浏览器标签页发呆。
如果你想了解更多网页抓取思路,可以看看我们关于 抓取 Amazon 商品和评论、把网站数据提取到 Excel 以及 最佳 AI 网页爬虫 的指南。你也可以在 Thunderbit YouTube 频道观看一步一步的视频讲解。
了解更多


