Amazon は価格モニタリングと商品リサーチの宝の山であり、同時にウェブ上で最も攻撃的に防御されているサイトの 1 つです。datacenter IP からスクレイプすれば、わずか数リクエストのうちに CAPTCHA、「Robot Check」の壁、変動する価格、あるいは 503 を目にすることになります。本ガイドは、Amazon が何をチェックするのか、それを生き延びるプロキシ戦略、そして価格や Buy Box データの正確さを保つセッション規律を扱います。
datacenter プロキシは、まともなボリュームでは Amazon では行き止まりです——それを支えるのはクリーンな ASN を持つ residential の exit です。同じくらい重要なのは、exit の国をスクレイプ対象のマーケットプレイスに合わせることです。amazon.de の価格を US の exit 経由で取得すると、US の価格、通貨、Buy Box が返ってきて、データセットをひそかに汚染します。1 マーケットプレイスにつき 1 つの exit ジオです。
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))
Google SERP スクレイピングと同様に、あなたを生き延びさせる規律はプールのサイズではなく、exit ごとのレートです。間隔をランダム化し、IP ごとの並行度に上限を設け、「Robot Check」や 503 を見たら、その exit を叩くのをやめてバックオフしてください——フラグの立った IP に再試行を投げ込むのは、ブロックを長引かせるだけです。
素の requests 呼び出しは、IP スコアが適用される前に、あなたを自動化として印付ける JA3 を送信します。curl_cffi(上記)か本物のブラウザでブラウザのフィンガープリントを送ってください——curl_cffi で TLS フィンガープリントを回避を参照。Amazon が JS の CAPTCHA の壁を投げてきたら、本物のブラウザエンジンへエスカレートしてください。
新規ユーザーは登録時に500MBを獲得、さらに初回チャージにボーナスが付きます。期間限定オファーです。