スクレイピング時にAmazon IPバンを回避する方法

AmazonのIP禁止システムを理解し、検出を避けるために実証済みの戦略を学びます。 住宅のプロキシ構成要求、ランダム化、地質ターゲティング、および回復手順をカバーします.

スクレイピング時にAmazon IPバンを回避する方法

AmazonのIPバンシステムを理解する

アマゾンは、インターネット上で最も洗練されたアンチボットシステムの一つを運営しています。 IPアドレスが禁止されると、価格設定、研究、競争力のあるインテリジェンス操作を駆動する製品データへのアクセスが失われます。 AmazonがIPを検出して禁止する方法を理解することは、その防止のための最初のステップです。

Amazonは個々のIPをブロックするだけでなく、行動プロファイルを構築します。 単一の疑わしいIPは、ソフトブロック(CAPTCHA)をトリガーするかもしれませんが、永続的な違反はハードブロック(完全なアクセス拒否)につながります。 システムは IP の範囲を渡るパターンを追跡します、従って隣接するアドレスに 1 つの IP 禁止される得ることはscrutiny を高めることができます。 検出方法の包括的な理解のために、ガイドを参照してください アンチボットシステムがプロキシを検出する方法. .

Amazonが自動トラフィックを検出する方法

Amazonの検出は複数のレイヤーで同時に動作します。

要求レベルの検出

要求レベルの検出
シグナルAmazonのチェックリスクレベル
TLSの指紋TLS handhake は既知のボットライブラリ (Python リクエスト、curl) にマッチします。高い
ヘッダー注文非ブラウザで送信された HTTP ヘッダメディア
ミス・ヘッダアクセプト言語、アクセプトエンコーディングなど高い
ユーザーエージェント無効、無効、または既知のボットユーザーエージェント文字列高い
クッキーの取扱いセッションクッキーの受け入れや返還は行いませんメディア

行動検出

行動検出
パターンコンテンツリスクレベル
固定間隔正確な間隔で到着するリクエスト(5.0秒)高い
シーケンシャルクローリング数値またはアルファベット順で ASIN を訪問高い
ナビゲーションパスなし閲覧せずに製品ページに直接ジャンプメディア
高い容積の要求1つのIPから1分あたりのリクエストの数百クリティカル
JavaScript の実行なしJavaScriptを実行せずに読み込まれたページメディア

IPレベルの検出

Amazonは、データセンターIPの範囲と既知のプロキシプロバイダのデータベースを維持します。 データセンター IP は、動作に関係なく、即時に高まるスカルチニーに直面しています。 住宅用IP 実際のアマゾン買い物客とプールを共有するため、より高い信頼から始めましょう。

Amazonブロックの種類

異なるブロックタイプを理解することで、適切に対応できます。

ソフトブロック(CAPTCHA)

最も一般的な応答。 Amazon は製品データではなく CAPTCHA のページを提供しています。 これは警告です - 同じIPから続けて、あなたはハードブロックにエスカレートします。 CAPTCHAを受け取ったらすぐに戻って、新しいIPに切り替えます。

ハードブロック (503/403 エラー)

アクセスの完全な拒否、通常HTTP 503または403ステータスコードを返します。 ハードブロックは、特定のIPのために数日かかることがあります。 ブロックを解除すると、IP は、ブロックが切れるまで、Amazon で効果的に利用できなくなります。

コンテンツ操作

Amazonは、誤った価格、欠落したレビュー、または不完全な製品データなど、疑わしいボットに異なるコンテンツを提供しています。 200応答を受信するので、検出するのが困難です。 スクラップされたデータを既知の値に対して検証し、これをキャッチします。

キーのテイクアウト: CAPTCHAs は警告信号、ちょうど障害物です。 現在のアプローチが調整を必要とするインジケータとしてすべてのCAPTCHAを扱います。

予防戦略

1. 住宅のプロキシの使用

あなたが作ることができる最もインパクトのある変化です。 住宅のプロキシは、実際のインターネットの加入者に割り当てられたIPアドレスを使用しており、本物の買い物客からあなたの要求を区別できるようにします。 ProxyHatの住宅用プロキシプールは、100万ものIPを持つ195以上の国をカバーしています。

# ProxyHat residential proxy with geo-targeting
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# For Amazon.de
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# For Amazon.co.uk
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080

2. スマート回転の実装

単一のIPからAmazonに5-10以上のリクエストを送信しないでください。 ProxyHat のゲートウェイは、デフォルトでリクエストごとに IP を自動的に回転させますが、アプリケーションレベルのコントロールも実装する必要があります。

import requests
import random
import time
PROXY_BASE = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def make_request(url, max_retries=3):
    """Make a request with automatic retry on failure."""
    for attempt in range(max_retries):
        # Each request gets a fresh IP from the rotating proxy
        proxies = {"http": PROXY_BASE, "https": PROXY_BASE}
        headers = {
            "User-Agent": random.choice(USER_AGENTS),
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "en-US,en;q=0.9",
            "Accept-Encoding": "gzip, deflate, br",
        }
        try:
            response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            # Check for CAPTCHA
            if "captcha" in response.text.lower() or response.status_code == 503:
                print(f"CAPTCHA/block detected on attempt {attempt + 1}")
                time.sleep(random.uniform(10, 30))  # Longer backoff
                continue
            if response.status_code == 200:
                return response
        except requests.RequestException:
            time.sleep(random.uniform(5, 15))
    return None

3. リクエストパターンをランダム化

リクエストパターンのあらゆる側面には、統計的な検出を避けるためにランダム性が含まれている必要があります。

import random
import time
def random_delay(min_sec=2, max_sec=7):
    """Add human-like random delay."""
    delay = random.uniform(min_sec, max_sec)
    # Occasionally add a longer pause (simulates reading a page)
    if random.random() < 0.1:  # 10% chance
        delay += random.uniform(10, 30)
    time.sleep(delay)
def shuffle_targets(urls):
    """Randomize the order of URLs to avoid sequential patterns."""
    shuffled = urls.copy()
    random.shuffle(shuffled)
    return shuffled
def get_random_user_agent():
    """Return a realistic, current User-Agent string."""
    agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    ]
    return random.choice(agents)

4. 市場への地理位置合わせ

ドイツのIPからamazon.comにアクセスするか、日本のIPからamazon.deは自動化された活動の強い信号です。 常にターゲット市場にあなたのプロキシの場所に一致させます。

4. 市場への地理位置合わせ
マーケットプレイスプロキシ 国ProxyHat の設定
amazon.com - アマソンアメリカ合衆国USERNAME-country-US
amazon.co.uk(アマソン)イギリスUSERNAME-country-GB
amazon.deさんドイツUSERNAME-country-DE
アズン株式会社ジャパンジャパンUSERNAME-country-JP
アマソン.frフランスUSERNAME-country-FR
amazon.inのインドUSERNAME-country-IN

チェックイン ProxyHatのフルロケーションリスト 対応する全ての国へ

5. ハンドルセッションを適切に処理

アマゾンはクッキーを介してセッションを追跡します。 クッキーの受け入れと返送は、リクエストが実際のブラウザのように見えるようになります。 閲覧開始(検索結果、レビュー)は、同じIPとクッキージャーを維持するために、スティッキーセッションを使用します。

# Sticky session for paginated scraping
PROXY_SESSION = "http://USERNAME-session-amz{session_id}:PASSWORD@gate.proxyhat.com:8080"
def create_session(session_id):
    """Create a requests session with sticky proxy and cookies."""
    session = requests.Session()
    proxy = PROXY_SESSION.format(session_id=session_id)
    session.proxies = {"http": proxy, "https": proxy}
    session.headers.update({
        "User-Agent": get_random_user_agent(),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    })
    return session

6. あなたの成功率を監視して下さい

HTTP 200 レート、CAPTCHA レート、ブロック速度をリアルタイムで追跡します。 検出が増加したときにスクレーパーを自動的にスロットルするようにしきい値を設定します。

class SuccessTracker:
    def __init__(self, captcha_threshold=0.1, block_threshold=0.05):
        self.total = 0
        self.success = 0
        self.captchas = 0
        self.blocks = 0
        self.captcha_threshold = captcha_threshold
        self.block_threshold = block_threshold
    def record(self, status):
        self.total += 1
        if status == "success":
            self.success += 1
        elif status == "captcha":
            self.captchas += 1
        elif status == "block":
            self.blocks += 1
    @property
    def should_throttle(self):
        if self.total < 10:
            return False
        captcha_rate = self.captchas / self.total
        block_rate = self.blocks / self.total
        return captcha_rate > self.captcha_threshold or block_rate > self.block_threshold
    @property
    def success_rate(self):
        return self.success / self.total if self.total > 0 else 0

バンの後の回復

IP が禁止されている場合は、回復する方法は次のとおりです。

  1. すぐに停止して下さい: 禁止されたIPまたは近くのIPからのリクエストを引き続き送信しないでください。
  2. スイッチIPs: 異なる範囲から住宅IPの新鮮なセットを使用してください。 ProxyHat の大きなプールは、常にクリーンな IP を利用できるようにします。
  3. あなたのアプローチを調節して下さい: パターンリクエスト、遅延、ヘッダを再開する前に確認します。
  4. ゆっくり始めて下さい: 再開時は、低リクエスト率で始めて徐々に増加します。
  5. それを待って下さい: アマゾンは、通常、特定のIPでハードブロックのために24-48時間以内に期限が切れる。

Node.js 禁止の防止

Node.js の同等の実装です。 ProxyHat ノード SDK. .

const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080";
const USER_AGENTS = [
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
];
async function safeAmazonRequest(url, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const agent = new HttpsProxyAgent(PROXY_URL);
    try {
      const response = await axios.get(url, {
        httpsAgent: agent,
        headers: {
          "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
          "Accept-Language": "en-US,en;q=0.9",
          Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Encoding": "gzip, deflate, br",
        },
        timeout: 30000,
        validateStatus: () => true,
      });
      if (response.data.toLowerCase().includes("captcha") || response.status === 503) {
        console.log(`CAPTCHA/block on attempt ${attempt + 1}`);
        await new Promise((r) => setTimeout(r, 10000 + Math.random() * 20000));
        continue;
      }
      if (response.status === 200) return response;
    } catch (err) {
      await new Promise((r) => setTimeout(r, 5000 + Math.random() * 10000));
    }
  }
  return null;
}
// Random delay between requests
function randomDelay(minMs = 2000, maxMs = 7000) {
  const delay = minMs + Math.random() * (maxMs - minMs);
  return new Promise((r) => setTimeout(r, delay));
}

予防チェックリスト

Amazonスクレーパーを実行する前に、このチェックリストを使用します。

  • 住宅用プロキシの使用(データセンターではありません)
  • プロキシの地理位置はターゲット市場と一致します
  • ユーザエージェントの文字列は現在の文字列であり、回転
  • すべての標準ブラウザヘッダーは含まれています
  • リクエスト遅延をランダム化(2-7秒)
  • URL はシャッフルで、順次処理されません。
  • クッキーの取り扱いが有効になっています
  • CAPTCHAの検出および自動バックオフは場所にあります
  • 成功率の監視は活動的です
  • 並列リクエストが5-10で開始される場合、コンカレンスが制限されます。

キーテイクアウト

  • Amazonの検出は多層化されています:指紋、行動パターン、およびIPの評判はすべて問題です。
  • 住宅のプロキシは非交渉可能です — データセンターのIPはすぐに高まるスクラッチに直面します。
  • ターゲットAmazonマーケットプレースにプロキシ地理位置を合わせます。
  • 遅延、ユーザーエージェント、リクエストオーダー、セッションパターンのすべてをランダム化します。
  • 初期警告としてCAPTCHAを扱い、すぐに調整します。
  • 検出が増加したときに成功率を監視し、自動的にスロットル。

完全なAmazonスクレイピングセットアップのために、 Amazon製品データスクレイピングガイド 全体を見る eコマーススクレイピング戦略. 始める ProxyHatの住宅用プロキシ 信頼できるアマゾンアクセスのため。

始める準備はできましたか?

AIフィルタリングで148か国以上、5,000万以上のレジデンシャルIPにアクセス。

料金を見るレジデンシャルプロキシ
← ブログに戻る