Amazon 是价格监控和选品的金矿,也是全网防御最凶的站点之一。用机房 IP 去抓,几个请求内就会撞验证码、「Robot Check」墙、价格乱跳,或 503。这篇讲清 Amazon 查什么、什么样的代理策略扛得住,以及让价格和 Buy Box 数据保持准确的会话纪律。
机房代理在 Amazon 上量就是死路——ASN 干净的住宅出口才撑得住。同样重要:出口国家要对上你抓的站点。用美国出口拉 amazon.de 价格,拿到的是美国定价、货币和 Buy Box,悄悄污染你的数据集。一个站点一种出口地理。
Amazon 按会话个性化——加购、配送地、价格测试都存在 cookie 里。每个请求都轮换 IP,你就不停重置这个上下文,拿到不一致的价格和 Buy Box 赢家。对一个商品的整次抓取保持一条 sticky 会话,然后在商品或任务边界轮换:
import itertools, time, random
from curl_cffi import requests
PROXIES = ["socks5h://USERNAME:[email protected]:913", "..."]
pool = itertools.cycle(PROXIES)
def scrape_product(asin, proxy):
# 这个商品每一页都走同一条 sticky 出口
s = requests.Session(impersonate="chrome",
proxies={"http": proxy, "https": proxy})
detail = s.get(f"https://www.amazon.com/dp/{asin}")
offers = s.get(f"https://www.amazon.com/gp/offer-listing/{asin}")
return detail.text, offers.text
for asin in asins:
proxy = next(pool) # 每个商品换一条 sticky 出口
if "Robot Check" in scrape_product(asin, proxy)[0]:
# 被标记——退避、轮换、换新出口重试
...
time.sleep(random.uniform(2.0, 5.0))
和 抓 Google SERP 一样,保命的纪律是每个出口的速率,不是池子大小。随机化间隔、给每个 IP 的并发设上限,看到「Robot Check」或 503 就别再打那个出口、退避——重试进被标记的 IP 只会延长封禁。
一个普通 requests 调用发的 JA3 在 IP 分还没生效之前就把你标成自动化。用 curl_cffi(上面)或真实浏览器发浏览器指纹——见 用 curl_cffi 绕过 TLS 指纹。如果 Amazon 扔出 JS 验证码墙,升级到真实浏览器引擎。
新用户注册即送500M免费流量,首次充值额外加赠,活动期间限时开放。