ECサイトデータスクレイピングのためのプロキシ:完全ガイド

Eコマースデータのスクレイピングに住宅用プロキシを使用する方法を学びます。 Amazon、Shopify、Walmart戦略、Python、Node.jsのコード例、ジオターゲティング価格監視、およびスケーリングインフラをカバーしています.

ECサイトデータスクレイピングのためのプロキシ:完全ガイド

キーテイクアウト

  • Eコマーススクレイピングは、競争力のある価格設定、市場調査、製品インテリジェンスをスクレイピングしますが、主要なプラットフォームは、保護されていないスクレーパーを数分でブロックする積極的なアンチボットシステムを使用します。
  • 住宅用プロキシは、プラットフォームが本物の買い物客とは区別できない実際のISP署名IPを使用するため、eコマーススクレイピングのための最も効果的なプロキシタイプです。
  • 異なるプラットフォームでは、ジオターゲティングでAmazonの高回転が必要で、Shopifyストアはより軽く、数多く、WalmartはAPIエンドポイントとレンダリングされたページを組み合わせたものです。
  • ジオターゲティングプロキシは、eコマースプラットフォームが訪問者の場所に基づいて異なる価格、製品可用性、プロモーションを提供するため、地域全体の価格監視に不可欠です。
  • 生産等級のeコマーススクレイピングパイプラインは、回転住宅のプロキシ、スマートリトリーロジック、構造化されたデータ抽出、およびスケジュールされたバッチ処理を組み合わせて、何百万もの製品リストを確実に監視します。

なぜECデータスクレイピングマター

E-コマースは、Web上の他のデータソースよりも、より実用的な競争力のあるインテリジェンスを生成します。 製品の価格は1時間ごとに変わります。 新しい売り手は毎日市場に参入します。 プロモーションは時間内に現れて消えます。 オンラインで製品を販売する事業、またはその営利を競う事業 eコマーススクレイピングのためのプロキシ データドリブン戦略の基礎です。

ここでは、eコマーススクレイピングが有効にするものは次のとおりです。

  • 動的価格設定インテリジェンス: 競合他社の価格をリアルタイムに監視し、独自の価格設定戦略を調整して、競争力を維持しながらマージンを最大化します。
  • 製品カタログの監視: 新製品の発売、在庫レベル、製品説明を追跡し、競合他社の店舗間で機能変更を追跡します。
  • 市場調査: 製品カテゴリ、ベストセラーのランキング、顧客レビューの感情を分析し、新しいセグメントに入る前に市場動向を分析します。
  • MAPの承諾: ブランドは、ディーラーとリセラーネットワーク全体で最小広告価格違反を監視できます。
  • リード生成: マーケットプレースから販売者情報、ブランドディレクトリ、ビジネス連絡先データを抽出します。

課題は、電子商取引プラットフォームがインターネット上で最も重く保護されているサイトの中であることです。 Amazon、Walmart、ターゲット、eBay、および主要なShopifyは、自動データ収集をブロックするように設計された洗練されたアンチボットシステムをすべて展開しています。 適切なプロキシインフラストラクチャがなければ、スクレーパーは単一のデータポイントを収集する前に失敗します。

Eコマースサイトのスクレイピングの課題

E-コマースプラットフォームは、アンチボット技術に何百万を投資しています。 これらの防衛を理解することは、スクレイピングパイプラインを構築する前に不可欠です。

高度なアンチボットシステム

大手eコマースプラットフォームは、エンタープライズグレードのボット検出を展開しています。 Amazon は IP の評判のスコアリング、TLS の指紋、ブラウザの行動分析および機械学習の分類を結合する専有システムを使用します。 Walmart は、マウスの動き、スクロールパターン、JavaScript 実行環境を分析する PerimeterX (現 HUMAN Security) を統合しています。 Shopifyは、既知のスクレイピングIPの世界的な脅威インテリジェンスデータベースを維持し、Cloudflare Bot Managementを利用しています。

動的コンテンツとJavaScriptレンダリング

現代の電子商取引サイトは、製品データ、価格、およびレビューを動的に JavaScript 経由で読み込みます。 JavaScript を実行しないシンプルな HTTP リクエストは空のシェルを返します。価格、製品の詳細、レビューはありません。 これは、効果的なeコマーススクレイピングは、多くの場合、PuppeteerやPlaywrightなどのヘッドレスブラウザが必要です。これにより、リソース消費量が増加し、プロキシ管理がより複雑になります。

地理的な価格設定とコンテンツ

Eコマースプラットフォームは、訪問者の場所に基づいて異なるコンテンツを提供します。 Amazon.comは、ニューヨーク、ロンドン、または東京から閲覧するかどうかに応じて、さまざまな価格、配送オプション、および製品の可用性を示しています。 ジオターゲティングを考慮しない価格監視システムは、不正確で誤解を招くデータを生成します。 価格を監視したい特定の地域でプロキシが必要です。

レート制限とセッション管理

E-コマースサイトは、厳格なレート制限を実施します。 Amazonは、通常、CAPTCHAまたはブロックをトリガーする前に、単一のIPから1分あたりの10-15リクエストを可能にします。 ウォルマートは、新しいIPや信頼できないIPでも厳格です。 これらの限界は、100,000製品のカタログを監視するということを意味し、数千のIPアドレスが調整され、静的プロキシのほんのりではありません。

構造変化とA/Bテスト

E-コマースサイトは、A/Bテストと再設計によりHTML構造を常に変更します。 今日の価格を抽出するCSSセレクターは、明日何も戻らないかもしれません。 堅牢なスクレイピングシステムは、人間の介入なしに、これらの変更を処理するために、監視、検証、および適応的な解析を含む必要があります。

なぜプロキシがEコマーススクレイピングに不可欠である理由

プロキシなし、意味のあるスケールで任意の電子商取引スクレイピングプロジェクトは不可能です。 理由は次のとおりです。

  • IP の回転は妨げません: 数千もの IP 間でリクエストを配信することで、単一のアドレスが速度制限を超えたり、ボット検出パターンをトリガーしたりすることはありません。
  • 住宅IPは評判の点検を渡します: アンチボットシステムは、データセンターIPの範囲のデータベースを維持します。 住宅用プロキシ 実際のISPによって割り当てられたIPを実際の世帯に使用し、本物の買い物客から消滅可能にします。
  • ジオターゲティングは、地域価格設定を可能にします。 特定の国や都市のプロキシ ローカルな価格、通貨、プロモーション、および製品の可用性など、ローカルの消費者が見るものを見てみましょう。
  • 必要に応じてセッションの持続性: いくつかのスクレイピングタスク(アイテムをカートに追加し、パジネーションをナビゲートし、チェックアウトフローを確認)は、複数のリクエスト間で同じIPを維持する必要があります。 粘りのあるプロキシセッションがこれを可能にします。
  • スケーラビリティ: 数百万人のIPを持つプロキシネットワークにより、建築変化のない1,000製品を1,000,000製品に監視することができます。

Eコマーススクレイピングに最適なプロキシタイプ

すべてのプロキシタイプが電子商取引プラットフォーム間で等しく実行されるわけではありません。 ターゲットサイト、スクレイピングボリューム、予算によって異なります。 プロキシタイプに深くダイブするには、 住宅対データセンター対モバイル比較ガイド. .

Eコマーススクレイピングに最適なプロキシタイプ
プラットフォーム賃貸住宅データセンターモバイルおすすめ商品
アマゾン高い成功(95%+)低(ヘビーブロック)非常に高い(98%+)賃貸住宅
ウォルマート高い成功 (93%+)非常に低い(妨げられる)非常に高い (97%+)賃貸住宅
Shopifyストア非常に高い (97%+)モデレート(60-80%)非常に高い(99%+)住宅/データセンターミックス
イーベイ高い (94%+)低い変復調装置(40-60%)非常に高い (97%+)賃貸住宅
ターゲット高い (92%+)非常に低い(妨げられる)高い (96%+)賃貸住宅
最高の購入高い (91%+)低い (20-40%)高い(95%+)賃貸住宅
エスティー非常に高い (96%+)適当な(50-70%)非常に高い(98%+)賃貸住宅

最下のライン: 住宅用プロキシは、電子商取引スクレイピングのデフォルト選択です。 データセンターのプロキシは、高度なボット保護なしで、より小さなShopifyストアに対して確実に機能します。 モバイルプロキシは、最高の成功率を提供しますが、高い帯域幅コストで、最も強力なアンチボット防衛で高値ターゲットを保有します。

主要なプラットフォームをスクレイピング:プロキシ戦略

アマゾン

Amazonは最もスクラップされたeコマースサイトであり、その結果、最も保護されています。 彼らのアンチボットシステムは、IPの評判、要求パターン、TLS指紋、および行動信号を同時に分析します。

Amazonのプロキシ戦略:

  • 製品ページ、検索結果、およびレビューページのためのリクエストごとに新しいIPを回転住宅のプロキシを使用する。
  • Amazonドメイン(US IPs for amazon.com, DE IPs for amazon.de, JP IPs for amazon.co.jp)と一致するジオターゲティングを有効にします。
  • 並列リクエストを5-10に制限し、クラスターレベルの検出を回避します。
  • 同じセッションからリクエスト間で2-5秒ランダム化遅延を追加します。
  • 20以上のブラウザバージョンのプールからユーザーエージェントの文字列を回転させます。

Shopifyストア

4,000,000以上のオンラインストアで電力をShopify。 個々の店舗はボット保護により異なりますが、Shopifyのプラットフォームレベルの保護には、レート制限とCloudflareの統合が含まれます。

Shopifyのプロキシ戦略:

  • 多くのShopifyストアは、 /products.json レンダリングせずに構造化された製品データを返すエンドポイント — 最初にこの試みをしてください。
  • JSON エンドポイントのない店舗では、住宅用プロキシを適度な回転(新しい IP を 3-5 リクエストごとに更新)で回転させることができます。
  • Shopifyのレート制限は通常、IPごとの2リクエスト/秒です。これにより、アクセスを維持できます。
  • Shopifyストアの数千を掻くと、データセンタープロキシは保護されていないストアのために動作し、帯域幅コストを節約することができます。 ブロックする店舗の住宅に戻る。

ウォルマート

Walmartは、最も洗練されたボット検出プラットフォームの一つであるHUMAN Security(旧PerimeterX)を使用しています。 データセンターIPによるシンプルなHTTPリクエストは、すぐにブロックされます。

Walmartのプロキシ戦略:

  • 住宅のプロキシは必須です — データセンターIPは、ほぼゼロの成功率を持っています。
  • ヘッドレスブラウザ(Puppeteer/Playwright)を使用して、WalmartはJavaScriptチャレンジ検証に大きく依存しています。
  • 複数ページの商品リストをナビゲートしたり、パジネーションを検索するときに、スティッキーセッション(5〜10分)を実行します。
  • ウォルマートのAPIエンドポイント(Walmart)walmart.com/api/ ルート) レンダリングされたページよりも軽い保護が時々あります。両方の実験。

実装ガイド: Python

以下は、Pythonを使用して、生産準備済みのeコマーススクレイピングセットアップです。 ProxyHatのPython SDK. Pythonでのプロキシ使用の基礎ガイドについては、参照してください Pythonでプロキシを使用する. .

回転プロキシの基本的な製品スクレーパー

import requests
from bs4 import BeautifulSoup
import random
import time
# ProxyHat proxy configuration
PROXY_USER = "USERNAME"
PROXY_PASS = "PASSWORD"
PROXY_HOST = "gate.proxyhat.com"
PROXY_PORT = 8080
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/131.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/131.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/131.0.0.0 Safari/537.36",
]
def get_proxy(country="US"):
    """Build ProxyHat proxy URL with geo-targeting."""
    proxy_url = f"http://{PROXY_USER}-country-{country}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
    return {"http": proxy_url, "https": proxy_url}
def scrape_product(url, country="US", retries=3):
    """Scrape a product page with automatic retry and IP rotation."""
    for attempt in range(retries):
        try:
            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",
            }
            response = requests.get(
                url,
                proxies=get_proxy(country),
                headers=headers,
                timeout=30,
            )
            if response.status_code == 200:
                return parse_product(response.text)
            elif response.status_code == 503:
                print(f"Blocked on attempt {attempt + 1}, rotating IP...")
                time.sleep(random.uniform(2, 5))
        except requests.exceptions.RequestException as e:
            print(f"Request error: {e}")
            time.sleep(random.uniform(1, 3))
    return None
def parse_product(html):
    """Extract product data from HTML."""
    soup = BeautifulSoup(html, "html.parser")
    return {
        "title": soup.select_one("h1#productTitle, h1[data-automation-id='productTitle']"),
        "price": soup.select_one(".a-price .a-offscreen, [data-testid='price']"),
        "rating": soup.select_one(".a-icon-star-small .a-icon-alt, .rating-number"),
        "availability": soup.select_one("#availability span, .prod-fulfillment-messaging"),
    }
# Scrape products from multiple regions
products_to_monitor = [
    "https://www.amazon.com/dp/B0EXAMPLE1",
    "https://www.amazon.com/dp/B0EXAMPLE2",
]
for url in products_to_monitor:
    for country in ["US", "GB", "DE"]:
        result = scrape_product(url, country=country)
        if result:
            print(f"[{country}] {result}")
        time.sleep(random.uniform(2, 5))

Shopify ストアスクレーパー JSON API を使用して

import requests
import json
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
PROXIES = {"http": PROXY_URL, "https": PROXY_URL}
def scrape_shopify_store(store_url):
    """Scrape all products from a Shopify store via JSON API."""
    products = []
    page = 1
    while True:
        url = f"{store_url}/products.json?page={page}&limit=250"
        response = requests.get(url, proxies=PROXIES, timeout=20)
        if response.status_code != 200:
            break
        data = response.json()
        batch = data.get("products", [])
        if not batch:
            break
        for product in batch:
            products.append({
                "title": product["title"],
                "handle": product["handle"],
                "vendor": product["vendor"],
                "product_type": product["product_type"],
                "variants": [
                    {
                        "sku": v.get("sku"),
                        "price": v["price"],
                        "compare_at_price": v.get("compare_at_price"),
                        "available": v["available"],
                    }
                    for v in product["variants"]
                ],
            })
        page += 1
    return products
# Usage
store_data = scrape_shopify_store("https://example-store.myshopify.com")
print(f"Found {len(store_data)} products")

実装ガイド:Node.js

ヘッドレスブラウザで JavaScript ベースのスクレイピング - ウォルマートや他の保護されたサイトに不可欠 - 参照してください Node.jsプロキシガイド 基礎的なセットアップのため。 以下は、eコマース固有の実装です。 ProxyHat ノード SDK. .

ヘッドレスブラウザは、Puppeteerでスクレイピング

const puppeteer = require("puppeteer");
const PROXY_HOST = "gate.proxyhat.com";
const PROXY_PORT = 8080;
const PROXY_USER = "USERNAME";
const PROXY_PASS = "PASSWORD";
async function scrapeProductPage(url, country = "US") {
  const proxyUser = `${PROXY_USER}-country-${country}`;
  const browser = await puppeteer.launch({
    headless: "new",
    args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
  });
  const page = await browser.newPage();
  await page.authenticate({ username: proxyUser, password: PROXY_PASS });
  // Set realistic viewport and user agent
  await page.setViewport({ width: 1920, height: 1080 });
  await page.setUserAgent(
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/131.0.0.0 Safari/537.36"
  );
  try {
    await page.goto(url, { waitUntil: "networkidle2", timeout: 45000 });
    // Wait for price element to load
    await page.waitForSelector('[data-testid="price"], .a-price', {
      timeout: 10000,
    });
    const product = await page.evaluate(() => {
      const getText = (selector) =>
        document.querySelector(selector)?.textContent?.trim() || null;
      return {
        title: getText("h1"),
        price: getText('[data-testid="price"], .a-price .a-offscreen'),
        rating: getText(".rating-number, .a-icon-star-small .a-icon-alt"),
        reviewCount: getText("#acrCustomerReviewCount, .rating-count"),
        availability: getText("#availability span, .prod-fulfillment-messaging"),
        seller: getText("#sellerProfileTriggerId, .seller-name"),
      };
    });
    return product;
  } catch (error) {
    console.error(`Scraping failed for ${url}:`, error.message);
    return null;
  } finally {
    await browser.close();
  }
}
// Monitor prices across regions
async function monitorPrices(asinList, countries) {
  const results = [];
  for (const asin of asinList) {
    for (const country of countries) {
      const domain = { US: "amazon.com", GB: "amazon.co.uk", DE: "amazon.de" }[country];
      const url = `https://www.${domain}/dp/${asin}`;
      const data = await scrapeProductPage(url, country);
      if (data) {
        results.push({ asin, country, ...data, scrapedAt: new Date().toISOString() });
      }
      // Random delay between requests
      await new Promise((r) => setTimeout(r, 2000 + Math.random() * 3000));
    }
  }
  return results;
}
// Usage
monitorPrices(["B0EXAMPLE1", "B0EXAMPLE2"], ["US", "GB", "DE"]).then((data) =>
  console.log(JSON.stringify(data, null, 2))
);

ジオターゲット価格監視

地域全体の価格変動は、電子商取引インテリジェンスで最も価値のあるデータセットの1つです。 同じ製品は、国間20~40%の価格差を持ち、同じ国内の都市間であっても、同じ国内でも同じ製品です。 ProxyHatのジオターゲティング 正確な地域の価格監視のために重要な国と都市レベルのルーティングをサポートしています。

ジオターゲティングは価格監視のためにどのように機能するか

特定の場所にプロキシを介してリクエストをルーティングすると、eコマースプラットフォームは、IPアドレスを介して訪問者の位置を検出します。 これは、位置固有の動作をトリガーします。

  • 通貨と価格: プラットフォームは、地域固有の価格帯でローカル通貨の価格を表示します。
  • プロダクト可用性: 地域によって在庫や配送オプションが異なります。 一部の製品は特定の市場でのみ入手可能です。
  • プロモーション: 地域営業イベント、休日割引、ロイヤリティプログラムは国により異なります。
  • 税表示: 一部の地域は、税金価格を表示し、他は税金込みの価格を示しています。
# Monitor the same product across 5 markets
import requests
PROXY_BASE = "USERNAME-country-{country}:PASSWORD@gate.proxyhat.com:8080"
markets = {
    "US": {"domain": "amazon.com", "currency": "USD"},
    "GB": {"domain": "amazon.co.uk", "currency": "GBP"},
    "DE": {"domain": "amazon.de", "currency": "EUR"},
    "JP": {"domain": "amazon.co.jp", "currency": "JPY"},
    "CA": {"domain": "amazon.ca", "currency": "CAD"},
}
def monitor_price(asin, country, market_info):
    proxy = f"http://{PROXY_BASE.format(country=country)}"
    url = f"https://www.{market_info['domain']}/dp/{asin}"
    response = requests.get(
        url,
        proxies={"http": proxy, "https": proxy},
        headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0.0.0"},
        timeout=30,
    )
    # Parse price from response...
    return {"country": country, "currency": market_info["currency"], "url": url}

リアルタイム対バッチ価格監視

E-コマースの価格監視は、異なるプロキシ要件を持つ2つの建築パターンに分類されます。

リアルタイム対バッチ価格監視
アスペクトリアルタイム監視バッチ監視
更新頻度5~15分1日1~4回
ユースケースダイナミックなリプライ、フラッシュセールトラッキング歴史分析、トレンドレポート
プロキシ帯域幅高(連続要求)モデレート(集中バースト)
通貨のニーズ50-200並列リクエスト10-50 並列リクエスト
最高のプロキシタイプ回転住宅回転住宅
必要なIPプールのサイズ大きい(10,000+ IPs)モデレート(1,000 + IP)
見積もりコスト(10K製品)$200-500 /月$50-150 /月

リアルタイム監視 競合他社の価格変更に数分で対応しなければならない補充エンジンを実行する際に必要です。 このアーキテクチャは、持続的な負荷の下で高い成功率を維持するために、回転住宅のプロキシを使用して、継続的にあなたの製品リストを介してサイクルする永続的なスクレーピング労働者を必要とします。

バッチ監視 ほとんどの使用例に適します: 毎日の価格のレポート、毎週の競争の分析および傾向の追跡。 スケジュールされたジョブは、1日2〜4回実行され、同時リクエストのバーストを使用してフル製品カタログをスクレイピングし、結果をデータベースに保存し、次の実行までシャットダウンします。 このアプローチは、プロキシ帯域幅が著しく低下します。

推薦: バッチ監視から始めましょう。 ほとんどの価格設定決定は、最小レベルの粒度を必要としません。 一日2〜3回、最初のスクレイピングジョブを実行します。 競合他社が価格を頻繁に変更する製品カテゴリ(電子機器、フライト、トレンドアイテム)のみリアルタイムモニタリングに移動します。

一般的なEコマースアンチボット対策の取扱い

住宅用プロキシでも、電子商取引アンチボットシステムは自動パターンを検出することができます。 成功率を最大化する実証済みの技術、当社の戦略の構築 ブロックせずにスクレイピングするガイド. .

CAPTCHAの取扱い

アマゾンとウォルマートは、自動アクティビティを疑ったときにCAPTCHAを提示します。 最高のアプローチは予防です。

  • IP を積極的に回転させる — あらゆるリクエストに対する新しい IP は、CAPTCHA をトリガーする単一の IP に十分な信号を蓄積するチャンスを減らします。
  • 実際のブラウザのヘッダーの注文と値に正確に一致する、現実的なリクエストヘッダーを使用します。
  • セッション全体で同じブラウザバージョンを使用して、一貫性のあるTLS指紋を維持します。
  • CAPTCHAがまだ現れた場合、指数関数のバックオフを実行します。IPを5分間停止してから15分、その後1時間。

指紋のランダム化を要求して下さい

import random
def generate_headers():
    """Generate realistic, randomized request headers."""
    chrome_versions = ["130.0.0.0", "131.0.0.0", "132.0.0.0"]
    platforms = [
        ("Windows NT 10.0; Win64; x64", "Windows"),
        ("Macintosh; Intel Mac OS X 10_15_7", "macOS"),
        ("X11; Linux x86_64", "Linux"),
    ]
    platform, platform_name = random.choice(platforms)
    chrome_ver = random.choice(chrome_versions)
    return {
        "User-Agent": f"Mozilla/5.0 ({platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chrome_ver} Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Language": random.choice([
            "en-US,en;q=0.9",
            "en-US,en;q=0.9,es;q=0.8",
            "en-GB,en;q=0.9",
        ]),
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": random.choice(["no-cache", "max-age=0"]),
        "Sec-Ch-Ua-Platform": f'"{platform_name}"',
        "Sec-Fetch-Dest": "document",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "none",
        "Upgrade-Insecure-Requests": "1",
    }

IP の回転によるスマートな再試行

import time
import random
def scrape_with_smart_retry(url, max_retries=5, country="US"):
    """Scrape with exponential backoff and automatic IP rotation."""
    base_delay = 2
    for attempt in range(max_retries):
        proxy = get_proxy(country)  # New IP each attempt
        headers = generate_headers()
        try:
            response = requests.get(url, proxies=proxy, headers=headers, timeout=30)
            if response.status_code == 200:
                return response.text
            elif response.status_code == 403:
                print(f"Attempt {attempt + 1}: Forbidden (IP likely flagged)")
            elif response.status_code == 429:
                print(f"Attempt {attempt + 1}: Rate limited")
            elif response.status_code == 503:
                print(f"Attempt {attempt + 1}: Service unavailable (CAPTCHA)")
        except requests.exceptions.Timeout:
            print(f"Attempt {attempt + 1}: Timeout")
        except requests.exceptions.ConnectionError:
            print(f"Attempt {attempt + 1}: Connection error")
        # Exponential backoff with jitter
        delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
        print(f"Waiting {delay:.1f}s before retry...")
        time.sleep(delay)
    return None

Eコマーススクレイピングインフラストラクチャのスケーリング

数百製品から数百万もの上場を監視するために、コスト、信頼性、データの鮮度に影響を与える建築決定が必要です。

スケールのアーキテクチャ

スケールのアーキテクチャ
スケール製品情報建築設計プロキシ帯域幅
スモール1-10Kのシングルスクリプト、cronのスケジュール5-20 GB/月
メディア10K-100Kのキューワーカー(Redis/RabbitMQ)50-200 GB/月
スタンダード100K-1M+の分散労働者、Kubernetes500 GB-5 TB/月

キューベーススクレイピングパイプライン

中規模から大規模運用まで、キューベースのアーキテクチャは信頼性とスケーラビリティを提供します。

# Producer: enqueue scraping jobs
import redis
import json
r = redis.Redis()
def enqueue_products(product_urls, priority="normal"):
    queue_name = f"scrape:{priority}"
    for url in product_urls:
        job = json.dumps({"url": url, "retries": 0, "created_at": time.time()})
        r.lpush(queue_name, job)
# Consumer: process scraping jobs
def worker(country="US"):
    while True:
        # Priority queue: check high-priority first
        job_data = r.rpop("scrape:high") or r.rpop("scrape:normal")
        if not job_data:
            time.sleep(1)
            continue
        job = json.loads(job_data)
        result = scrape_with_smart_retry(job["url"], country=country)
        if result:
            # Store result in database
            r.lpush("results:pending", json.dumps({
                "url": job["url"],
                "data": result,
                "scraped_at": time.time(),
            }))
        elif job["retries"] < 3:
            # Re-queue failed jobs
            job["retries"] += 1
            r.lpush("scrape:normal", json.dumps(job))

帯域幅最適化

Eコマースページは重く、画像とスクリプトでそれぞれ500 KB〜2 MBです。 スケールで、帯域幅は無駄にかかります。 最適化:

  • 不要なリソースのブロック: ヘッドレスブラウザでは、画像、フォント、CSS、トラッキングスクリプトをブロックします。 製品のデータは HTML と API の呼び出しにあります。
  • 利用可能な API エンドポイントを使用する: Shopifyの /products.json、Amazon の製品広告 API は正規販売者、Walmart のアフィリエイト API は、帯域幅のほんの一部で構造化されたデータをすべて返します。
  • 変更されていないプロダクトのキャッシュ: 価格が変更される可能性が高い商品だけを再処理して下さい。 頻繁に更新されたリストを優先する歴史的なパターンを使用してください。
  • 保存されたデータを圧縮する: デバッグに必要な場合にのみ、生のHTMLを保存します。 構造化されたデータをすぐに抽出し、貯えて下さい。

法的および倫理的考慮事項

Eコマースデータのスクレイピングは、進化し続ける法的枠組みで動作します。 境界を理解することは、持続可能なスクレイピング操作を構築する上で不可欠です。

一般的に受け入れられるもの

  • パブリックデータ収集: 公に見える製品情報(価格、タイトル、可用性)をスクレイピングし、ルーリングなどのサポートを幅広く受け付けています。 hiQラボv. LinkedIn アメリカ
  • 競争力のあるインテリジェンス: 価格戦略、市場分析、ビジネスインテリジェンスのスクレイピングデータを使用して、業界全体で標準的な慣行です。
  • MAP監視: ブランドは、承認された無許可のリセラー全体で自社製品の広告価格を監視するブランドは、十分に確立された正当なユースケースです。

ベストプラクティス

  • robots.txt シグナルの尊重: 法的拘束力のない中、クロール・ディレイ・命令を尊重しながら、良い信仰を発揮します。
  • 個人データのスクレイピングを避ける: 適用されるデータ保護規則に基づく適法な根拠なしに、査読者名、電子メール、その他の個人情報を収集しないでください。
  • 率の限界責任: サイトのパフォーマンスに影響を与える可能性があるレートでリクエストを送信しないでください。 プロキシの回転は、負荷を分配しないようにします。
  • アクセス制御を回避しないでください。 公的な製品ページをスクレイピングすることは、ログイン壁を迂回したり、制限された売り手のダッシュボードにアクセスしたりとは異なります。
  • 必要なものだけを保存します。 使用するケースに必要な特定のデータポイントを収集します。 サイトのアーカイブ全体を一括ダウンロードしないでください。

EコマーススクレイピングのためのProxyHatを開始

ProxyHatは、あらゆる規模で信頼性の高いeコマースデータ収集に必要なプロキシインフラストラクチャを提供します。 はじめる方法は次のとおりです。

  1. プランを選択してください: レビュー ProxyHat 価格 製品監視ボリュームに合ったトラフィック配分を選択します。 参照のために、毎日10,000製品を3つの地域に監視するのに約10-30 GBの月を使用します。
  2. ジオターゲティングの設定: プロキシのユーザー名でターゲットを絞る国や都市レベルのターゲットを使用して、ターゲット市場におけるIPによるリクエストをルーティングします。
  3. スタックとの統合: 利用する Python SDK, Node.js SDKの使い方または SDKについて 合理化された統合のため。 お問い合わせ ドキュメント 高度の構成のため。
  4. バッチ監視を始めて下さい: コア製品リストの毎日のスクレイピングジョブを構築し、データ品質を検証し、カバレッジと頻度を拡大します。
  5. 必要に応じてスケール: ProxyHat の住宅プロキシプールは、プロキシ設定を変更することなく、1,000 から 1,000,000 の製品までニーズに合わせてスケールアップします。

より多くのスクレイピング技術とプロキシ戦略のために、私たちの探検 ウェブスクレイピングユースケースガイド そして、 ウェブスクレイピングに最適なプロキシ 比較。

よくある質問

Amazonのスクレイピングに最適なプロキシは何ですか?

住宅用プロキシを回転させるのは、Amazonスクレイピングに最適な選択肢です。 Amazonのアンチボットシステムは、データセンターIPの範囲の広範なデータベースを維持し、積極的にブロックします。 住宅用プロキシは、Amazonの評判チェックを通過する実際のISP割り当てIPを使用します。 最良の結果を得るためには、あなたがスクレイピングしているアマゾンドメイン(US IPs for amazon.com、ドイツIPs for amazon.de)と一致する地質標的住宅プロキシを使用して、すべての要求にIPを回転させます。

eコマースの価格監視に必要なプロキシ帯域幅はどのくらいかかりますか?

帯域幅は、製品数、スクレイピング周波数、およびHTTPリクエストまたはヘッドレスブラウザを使用するかどうかによって異なります。 一般的な製品ページは、HTTP または 1-2 MB を経由して、ヘッドレスブラウザで 100-500 KB です。 1日1万製品をHTTP経由で監視するには、1か月あたり約5〜5GBが必要です。 ヘッドレスブラウザでスクレイピングされた同じカタログは10-20 GBを必要とします。 毎日のスクレイピングの実行回数と、追跡する地域の変動数に乗算します。

eコマースサイトをプロキシなしでスクレイピングできますか?

意味のあるスケールではございません。 プロキシなし、単一のIPアドレスは、主要なプラットフォームで数分以内にレート制限またはブロックされます。 Amazon は 50-100 リクエスト後に 1 つの IP をブロックします。 数百製品をカバーする小規模な監視タスクでも、中断を避けるためにIP回転が必要です。 eコマーススクレイピングにはプロキシはオプションではありません。コアインフラストラクチャの要件です。

競合他社のウェブサイトから製品価格をスクレイピングすることは違法ですか?

公に利用可能な製品情報をスクレイピング — 価格, タイトル, 説明, 可用性 — 一般的に競争の激しい目的のために法的と考えられます. 米国裁判所は、このような場合に公開データをスクレイピングする権利をサポートしました hiQラボv. LinkedIn。ただし、個人データのスクレイピング、レート制限の尊重、ログインウォールなどの技術アクセス制御の迂回は避けるべきです。 特定の管轄区域および使用場合のための法的な相談常に相談して下さい。

eコマースサイトをスクレイピングする際にCAPTCHAsを処理する方法は?

最高のCAPTCHA戦略は、予防です。 回転住宅プロキシを使用して、検出をトリガーするために、単一のIPに十分な信号を蓄積しないようにします。 適切なヘッダの注文で現実的なブラウザヘッダーを送信します。 リクエスト間のランダム化遅延(2-5秒)を追加します。 CAPTCHAがまだ現れた場合は、指数関数のバックオフを実行します。フラグが付けられたIPを一時停止して間隔を増加させます。 ProxyHatの大型住宅用IPプールと1回のリクエスト回転により、ほとんどのスクレーパーは主要なeコマースプラットフォームで90-95%のCAPTCHAフリーの成功率を達成できます。

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

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

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