Amazon 上的每件商品都有一个隐藏的主键:ASIN。无论是价格监控、目录研究还是竞争对手分析,ASIN 都是你构建一切的基础,因为无论商品标题或 URL 如何变化,它始终指向同一个商品页面。真正的难点不在于 ASIN 本身,而在于当你需要大规模获取 Amazon 公开商品页面时,如何让请求真正返回内容。
本指南将向你展示如何用 Python 以可靠的方式抓取 Amazon ASIN 数据。我们将介绍什么是 ASIN 以及如何找到它,然后构建一个小型爬虫,通过 ASIN 获取公开商品数据,并将每个请求通过 Crawlbase Smart AI Proxy路由,从而让页面以渲染后的状态返回,而非被拦截。整个流程仅涉及公开商品数据,文末的合法性章节在你正式投入使用前值得认真阅读。
什么是 Amazon ASIN?
ASIN 是 Amazon Standard Identification Number(亚马逊标准识别号)的缩写,是 Amazon 为其目录中每件商品分配的唯一 10 位字母数字代码。它是平台内部用于区分不同商品的标识符,大多数商品的 ASIN 以 B0 开头。图书是常见的例外:图书的 ASIN 通常是 ISBN-10。
ASIN 对爬取的价值在于其稳定性。商品标题可以被修改,URL 可能携带追踪参数,搜索排名也可能每小时都在变化,但 ASIN 在商品上架期间始终不变。这使它成为锚定数据集的正确键:一次性收集 ASIN 后,你就可以按计划重新获取每件商品的当前价格、库存状态和评分,而无需每次重新发现商品。
如何查找 ASIN
有两种简便方法可以获取商品的 ASIN。第一种是通过 URL。打开任意商品页面并查看路径:ASIN 位于 /dp/ 段之后。
https://www.amazon.com/dp/B0B7CH8DMR ^^^^^^^^^^ this is the ASIN
在较长的 SEO 风格 URL 中,同样的代码也会出现,同样位于 /dp/ 之后:
https://www.amazon.com/OtterBox-COMMUTER-iPhone-Pro-ONLY/dp/B0B7CH8DMR/
第二种方式是通过页面正文。滚动到大多数商品列表的"商品信息"或"附加信息"表格,ASIN 会作为独立行列出。当你抓取渲染后的 HTML 时,该值还会出现在名为 currentAsin 的内嵌字段中,这是一个可编程读取的可靠位置。
不要将 ASIN 与 SKU 混淆。ASIN 是 Amazon 的目录标识符,对销售该商品的每个卖家都是相同的。SKU(库存单位)是卖家为跟踪自己库存而分配的私有代码,不同卖家之间以及跨销售渠道都可能不同。进行跨商品列表分析时,应以 ASIN 为键,而非 SKU。
为什么直接请求 Amazon 会失败
如果你用裸 HTTP 客户端访问 Amazon 商品页面,你几乎不会得到预期的页面。Amazon 对自动化流量防御严格:来自数据中心 IP 的请求或不像真实浏览器的请求模式,会在到达商品字段之前就遭遇 CAPTCHA、"抱歉,出了点问题"的拦截页,或直接被封锁,而且发送量越大,被封的速度越快。
因此,一个可用的 Amazon 爬虫每次请求都需要两样东西:一个平台认为是真实访客的 IP,以及能绕过 CAPTCHA 和机器人检测的请求处理机制。你可以自己组建一个包含轮换住宅代理池和反封锁逻辑的方案,但维护这套设施才是主要工作量所在。Smart AI Proxy 将这一切折叠进单个端点:将你的普通 HTTP 客户端指向它作为代理,它就会通过受信任的 IP 将请求路由至 Crawlbase 的 Crawling API,并返回已渲染的页面。
Smart AI Proxy 是一个由 Crawling API 支持的即插即用代理端点。任何能通过 HTTP 代理发送流量的客户端(curl、Python requests、无头浏览器)都可以直接使用,无需 SDK。在端点背后,你将获得轮换住宅 IP、CAPTCHA 处理和防封锁能力,使原本对 Amazon 直接请求失败的代码,开始返回真实页面。
用 curl 发起第一个请求
创建一个免费的 Crawlbase 账户,在 Dashboard 的 Smart AI Proxy 部分查看连接详情并获取你的访问令牌。该令牌是你唯一需要的凭证:代理仅凭用户名进行身份验证,密码留空即可。在编写任何 Python 代码之前,先用一行 curl 命令确认它能正常工作,通过 Smart AI Proxy 发送商品页面请求并打印渲染后的 HTML。
curl -x "http://[email protected]:8012" -k \ "https://www.amazon.com/dp/B0B7CH8DMR"
两个参数承载了此请求。-x 设置代理,格式为 http://TOKEN@host:port;将 YOUR_TOKEN替换为你的访问令牌。-k 标志(长格式为 --insecure)允许 curl 在不验证代理 TLS 证书的情况下连接,这是必需的,因为 Smart AI Proxy 在请求到达 Amazon 之前会终止连接以处理转发和防封锁。不加 -k 向 Smart AI Proxy 发送请求将会失败,因此它不是可选项。请求成功时,你将收到包含商品内容的 HTML,而非 CAPTCHA 页面。
用 Python 抓取 Amazon ASIN 数据
curl 验证了链路可行;Python 则将其转化为可自动化的工具。你需要 Python 3.8 或更高版本,标准的 requests 库就足够了,因为 Smart AI Proxy 作为普通的 HTTP 代理接入,无需专用 SDK。
python --version python -m venv amazon_env source amazon_env/bin/activate pip install requests
在 Windows 上,请用 amazon_env\Scripts\activate 替换 source 这一行来激活虚拟环境。现在创建 amazon_asin_scraper.py。脚本将用你的令牌构建代理 URL,通过代理发送请求,并打印状态码和响应体。注意 verify=False:这是 Python 中与 curl 的 -k 等效的设置,是 Smart AI Proxy 的必要配置。
import os import requests token = os.environ["CRAWLBASE_TOKEN"] proxy = f"http://{token}@smartproxy.crawlbase.com:8012" proxies = {"http": proxy, "https": proxy} asin = "B0B7CH8DMR" url = f"https://www.amazon.com/dp/{asin}" response = requests.get(url, proxies=proxies, verify=False) print("Status:", response.status_code) print(response.text[:500])
先用 export CRAWLBASE_TOKEN=your_token_here 设置令牌,然后运行 python amazon_asin_scraper.py。返回状态码 200 以及商品 HTML 的开头内容,意味着页面已渲染返回。此时你可以将 HTML 交给 BeautifulSoup 等解析器提取标题、价格和 currentAsin 字段,但还有一种更简洁的方式可以完全跳过解析步骤。
Amazon 会快速封锁普通请求。Smart AI Proxy 是一个即插即用的代理端点:将 curl、Python requests 或任何 HTTP 客户端指向它,你的流量就会通过内置 CAPTCHA 和封锁处理的轮换住宅 IP 路由,商品页面将以渲染后的状态返回,而非被拦截。从免费套餐开始,用公开商品页面试试。
使用 autoparse 获取结构化 JSON
手动解析 Amazon 的 HTML 很脆弱:标记密集,选择器也会漂移。由于 Smart AI Proxy 运行在 Crawling API 之上,你可以通过请求头传递 Crawling API 参数,让 Crawlbase 为你完成解析。在名为 CrawlbaseAPI-Parameters 的请求头中发送 autoparse=true,代理将返回商品的结构化 JSON,而非原始 HTML。
import os import json import requests token = os.environ["CRAWLBASE_TOKEN"] proxy = f"http://{token}@smartproxy.crawlbase.com:8012" proxies = {"http": proxy, "https": proxy} headers = {"CrawlbaseAPI-Parameters": "autoparse=true"} asin = "B0B7CH8DMR" url = f"https://www.amazon.com/dp/{asin}" response = requests.get(url, proxies=proxies, headers=headers, verify=False) data = json.loads(response.text) print("Status:", response.status_code) print(json.dumps(data, indent=4))
运行后,响应将是结构化字段,而非大段 HTML:名称、价格、库存状态、评分、ASIN 本身等,无需编写任何选择器即可直接存储。一个精简的示例如下:
{ "name": "OtterBox Commuter Series Case for iPhone 14 Pro Max", "asin": "B0B7CH8DMR", "price": "$32.99", "availability": "In Stock", "rating": "4.6 out of 5 stars", "reviewsCount": 2841 }
指定目标国家/地区
Amazon 上的价格和库存状态因地区而异,因此价格研究任务通常需要以特定国家/地区的购物者视角获取结果。在同一个 CrawlbaseAPI-Parameters 请求头中传入带有两字母代码的 country 参数,请求将从该地区路由。用 & 符号分隔多个参数,可与 autoparse 结合使用。
headers = { "CrawlbaseAPI-Parameters": "autoparse=true&country=GB" } response = requests.get(url, proxies=proxies, headers=headers, verify=False)
设置 country=GB 后,页面将以英国访客的视角返回,包括"配送至"位置信息。换入任意有效的两字母代码,如 US、DE、JP,即可获取同一 ASIN 的特定地区定价。
扩展至多个 ASIN
单个商品只是演示;真实任务需要处理一批 ASIN。结构保持不变:循环遍历这些代码,通过带 autoparse 的 Smart AI Proxy 请求每一个,并收集结果。控制循环节奏,避免频繁轰炸 Amazon;代理的 IP 轮换可防止单个地址触发速率限制。
import os import json import time import requests token = os.environ["CRAWLBASE_TOKEN"] proxy = f"http://{token}@smartproxy.crawlbase.com:8012" proxies = {"http": proxy, "https": proxy} headers = {"CrawlbaseAPI-Parameters": "autoparse=true"} asins = ["B0B7CH8DMR", "B09V3HN1KC", "B0BDHWDR12"] results = [] for asin in asins: url = f"https://www.amazon.com/dp/{asin}" try: r = requests.get(url, proxies=proxies, headers=headers, verify=False) results.append(json.loads(r.text)) except (requests.RequestException, json.JSONDecodeError) as err: print(f"Skipped {asin}: {err}") time.sleep(2) with open("amazon_products.json", "w") as f: json.dump(results, f, indent=2) print(f"Saved {len(results)} products")
这将生成一个整洁的 amazon_products.json,你可以将其加载到电子表格、数据库或定价模型中。将硬编码列表替换为从文件读取的 ASIN,即可得到一个可重复执行的目录任务。有关在任意网站上避免封锁的更广泛介绍,请参阅如何在不被封锁的情况下抓取网站。
Scraper API 替代方案
带 autoparse 的 Smart AI Proxy 是灵活的选择,因为它适用于任何客户端和任何网站。如果 Amazon 是你的主要目标,且你更倾向于调用简单的 REST 端点而非配置代理,那么 Crawling API 是专为此场景构建的替代方案。它为 Amazon 等受支持的网站返回预解析的 JSON,涵盖商品、搜索及其他页面类型,无需任何代理配置。权衡在于适用范围:Smart AI Proxy 通过熟悉的代理接口处理任何 URL,而 Scraper API 则为其支持的特定网站提供最简洁的输出。对于以 Amazon 为主的数据管道,建议将两者与你的实际工作负载进行对比。
抓取 Amazon 数据合法吗?
抓取 Amazon 公开数据处于法律灰色地带,具体项目是否被允许取决于 Amazon 的服务条款、你所在的司法管辖区以及数据的用途。Amazon 的条款限制自动化访问,因此无论你的工具多么谨慎,爬取行为都可能与这些条款相悖。此处的任何代码都不会改变这一点;它只是让技术层面的工作得以实现。在着手之前,请阅读 Amazon 使用条件及其 robots.txt,并将其中的速率预期视为最低限度,而非仅供参考。
有几条原则值得坚守。只收集公开商品数据:任何人无需账号即可看到的标题、价格、库存状态、评分和评论数量。遵守 robots.txt,并将请求量控制在不给服务器造成压力的范围内。商业用途时,应寻求许可或签订官方数据协议,而非将沉默视为默许。切勿收集个人数据,包括任何与个人客户账号相关的信息。
本指南有意将范围限定为公开商品页面,因为这是使工作合理可辩护的边界。本指南不涉及任何需要登录的内容、账号或订单数据、卖家后台,以及与可识别人员相关的评论,也不绕过任何形式的身份验证。如果你的项目需要的数据超出公开商品范围,正确的做法是使用官方 Amazon API 或签订数据协议,而非构建更聪明的爬虫。
核心要点
-
ASIN 是核心键。它是稳定的 10 位代码(通常以
B0开头),位于商品 URL 中/dp/之后,因此应以其为基础构建数据集,而非依赖标题或 URL。 - 普通请求会被封锁。Amazon 会快速识别来自数据中心 IP 和机器人流量模式的请求,因此每次请求都需要受信任的 IP 和 CAPTCHA 处理能力。
-
Smart AI Proxy 即插即用。将任何 HTTP 客户端指向它作为代理,你的流量就会通过内置防封锁机制的轮换住宅 IP 路由;记住在 curl 中加
-k,在 Python 中加verify=False。 -
autoparse 省去解析步骤。在
CrawlbaseAPI-Parameters请求头中发送autoparse=true即可获取结构化 JSON,加入country=XX可获取特定地区的定价。 - Scraper API 是 Amazon 专属选项。对于以 Amazon 为主的任务,它通过简单的 REST 端点返回预解析的 JSON,无需配置代理。
- 坚守公开数据范围。遵守 Amazon 的服务条款和 robots.txt,控制请求频率,切勿触碰账号、个人数据或任何需要登录的内容。
常见问题
什么是 Amazon ASIN?
ASIN(Amazon Standard Identification Number,亚马逊标准识别号)是 Amazon 为其目录中每件商品分配的唯一 10 位字母数字代码。它是平台对商品列表的内部标识符,大多数商品以 B0 开头;图书是通常的例外,其 ASIN 即为 ISBN-10。由于该代码在商品上架期间保持不变,它是锚定爬取数据集的正确键。
如何找到商品的 ASIN?
最快的方式是通过 URL:ASIN 出现在 /dp/ 段之后,例如 amazon.com/dp/B0B7CH8DMR 中的 B0B7CH8DMR。它也出现在大多数商品列表的"商品信息"表格中,抓取页面时还存在于可编程读取的内嵌 currentAsin 字段中。
为什么我对 Amazon 的请求会被封锁?
Amazon 对自动化流量防御严格。来自数据中心 IP 和不像真实浏览器的请求模式会遭遇 CAPTCHA、拦截页或直接封锁,发送量越大被封越快。要获取真实页面,你需要受信任的 IP 和能绕过检测的请求处理,而通过 Smart AI Proxy 路由正好提供了这些。
ASIN 和 SKU 有什么区别?
ASIN 是 Amazon 的目录标识符,对销售该商品的每个卖家都是相同的。SKU(库存单位)是卖家为跟踪自己库存而分配的私有代码,不同卖家之间可能不同,也会在其他销售渠道中使用。分析比较同一商品在不同卖家之间的情况时,应以 ASIN 为键,而非 SKU。
对于 Amazon,应该使用 Smart AI Proxy 还是 Scraper API?
两者都可以。Smart AI Proxy 是一个适用于任何 HTTP 客户端和任何网站的即插即用代理端点,设置 autoparse=true 后可为 Amazon 商品返回结构化 JSON。Scraper API 专为 Amazon 等受支持的网站构建,通过简单的 REST 调用返回预解析的 JSON,无需配置代理。对于以 Amazon 为主的数据管道,建议将两者与你的实际工作负载进行对比;Scraper API 通常为该特定目标提供最简洁的输出。
抓取 Amazon 合法吗?
这取决于 Amazon 的服务条款、你所在的司法管辖区和数据用途,而 Amazon 的条款限制自动化访问。务必严格限于公开商品数据(标题、价格、库存状态和评分),遵守 robots.txt 及其中的速率预期,切勿触碰账号、个人数据或任何需要登录的内容。商业用途时,应获取许可或签订官方数据协议,而非依赖爬虫。
大规模爬取任何站点,无需与基础设施对抗。
Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。
