Amazon 爬取代理:價格、Buy Box 與 Robot Check(2026)

發佈於 2026年6月12日 · 約 8 分鐘閱讀

Amazon 是價格監控與產品研究的金礦,也是全網防護最為激進的網站之一。從機房 IP 對它做爬取,你會在寥寥幾次請求內就看到 CAPTCHA、「Robot Check」攔截牆、變動的價格,或是一個 503。本指南涵蓋 Amazon 會檢查什麼、能存活下來的代理策略,以及讓價格與 Buy Box 資料保持精確的工作階段紀律。

Amazon 偵測什麼

住宅 IP,並讓地理與 marketplace 相符

在任何真實流量規模下,機房代理在 Amazon 上都是死路一條 — 真正能撐下去的是 ASN 乾淨的住宅 exit。同樣重要的是:讓 exit 國家與你所爬取的 marketplace 相符。透過美國 exit 去抓 amazon.de 的價格,你拿到的是美國的價格、貨幣與 Buy Box,這會悄悄汙染你的資料集。每個 marketplace 對應一個 exit 地理區。

用 sticky 工作階段取得精確價格

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):
    # Same sticky exit for every page of this product
    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)                 # new sticky exit per product
    if "Robot Check" in scrape_product(asin, proxy)[0]:
        # flagged - back off, rotate, retry on a fresh exit
        ...
    time.sleep(random.uniform(2.0, 5.0))

對每個 exit 限速並退避

正如 Google SERP 爬取一樣,讓你存活下來的紀律是每個 exit 的速率,而不是 pool 的大小。隨機化間隔、限制每個 IP 的並行量,當你看到「Robot Check」或一個 503 時,就停止命中那個 exit 並退避 — 對著一個被標記的 IP 重試,只會拉長封鎖時間。

別再疊上一個 Python 指紋

一個樸素的 requests 呼叫送出的 JA3,會在 IP 評分都還沒套用之前,就把你標記為自動化程式。用 curl_cffi(如上)或一個真實瀏覽器送出瀏覽器指紋 — 參見 用 curl_cffi 繞過 TLS 指紋偵測。如果 Amazon 丟出一道 JS CAPTCHA 牆,就升級到一個真實的瀏覽器引擎。

檢查清單

適用於所有 IP 產品 · 龐大的節點池隨時可用

立即註冊,儲值最高可享 100% 返現

新用戶註冊即送 500M免費流量,首次儲值另有贈金。優惠限時供應。