用 Python 抓取亚马逊畅销榜的 4 种方法:我亲测后的真实对比

最后更新于 August 21, 2026
用 Python 抓取亚马逊畅销榜的 4 种方法:我亲测后的真实对比

上周末,我一边喝咖啡,一边连续试了 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 + BS4Selenium抓取 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.80JS 渲染会有 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 秒就正确识别出了所有相关字段。

amazon-thunderbit-product-data.webp

你可以重命名、删除或新增列。你甚至可以为每个字段添加自定义 AI 提示词——比如输入“按 Electronics/Apparel/Home 分类”,就能给每个商品自动加上类目标签。

第 4 步:点击“Scrape”

点击“Scrape”按钮。Thunderbit 会把页面中的所有商品数据整理成结构化表格。在云端模式下,它可以并行处理最多 50 个页面,同时自动处理懒加载和分页。

第 5 步:免费导出

点击“Export”,然后选择导出目标:Excel、Google Sheets、Airtable 或 Notion。所有套餐都支持免费导出,没有隐藏费用。

product-data-export.webp

从打开页面到拿到完整表格,我总共只花了大约 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 频道观看一步一步的视频讲解。

了解更多

Fawad Khan
Fawad Khan
Fawad 靠写作谋生,而且说实话,他挺喜欢这份工作。他花了很多年琢磨,什么样的文案能真正打动人,什么样的内容又会让读者直接划过去。你要是问他营销,他能聊上几个小时;你要是问他卡邦尼意面,他能聊得更久。
Topics
Web Scraping ToolsAI Web Scraper
目录
Thunderbit · AI 网页数据助手

1 次点击 内提取任意页面的数据

25 万+ 用户信赖
提供免费方案
从网页到表格
描述你需要的内容——Thunderbit 的 AI Agent 会帮你抓取并导出到 Excel、Google Sheets、Airtable 或 Notion。免费即可开始。
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week