スクレイピングに必要なプロキシの数は?

ターゲットカウント、要求量、回転ニーズ、予算に基づいてプロキシプールをサイジングするための実用的な計算フレームワーク。 式とサイジングテーブルが含まれています.

スクレイピングに必要なプロキシの数は?

なぜWebスクレイピング用のプロキシカウントマッター

スクラッププロジェクトが直面する最初の質問の1つは、必然的に簡単です。 実際に何のプロキシが必要? 数分で IP が禁止されます。 あまりにも多くの使用し、あなたが触れない容量で予算を無駄に. 適切な番号は、ターゲットサイト、ボリュームリクエスト、回転戦略、ブロックの許容範囲によって異なります。

このガイドは実用的な計算フレームワークを提供しているので、プロキシプールを自信を持ってサイズすることができます。

プロキシを掻くために新しい場合は、 ウェブスクレイピングプロキシの完全なガイド 基礎的な概念のため。

コア式

一番シンプルなところ、必要な同時IP数は次のとおりです。

required_ips = (requests_per_minute) / (safe_rpm_per_ip)

アクセス 安全 rpm per ip ブロックをトリガーすることなく、単一のIPがターゲットサイト上で持続できる最大リクエスト率です。 これは、ターゲットによって劇的に変化します。

コア式
ターゲット タイプIPごとの安全なRPMインフォメーション
小さなブログ/静的サイト20-60のミニマルアンチボット
Eコマース(Shopify、WooCommerce)2018年5月15日モードレートの制限
主要プラットフォーム(Amazon、Google)1-5日攻撃的な検出
ソーシャルメディア(LinkedIn、Instagram)0.5~2非常に厳密な執行

計算例

eコマースサイトから毎日50,000の製品ページをスクレイピングする必要があると仮定し、8時間以内のジョブを完了します。

# Target: 50,000 pages in 8 hours
requests_per_minute = 50000 / (8 * 60)  # ≈ 104 RPM
safe_rpm_per_ip = 10                     # e-commerce average
required_ips = 104 / 10  # ≈ 11 concurrent IPs

練習では、 30~50% バッファ リトリート、障害、およびレートリミットクールダウン。 なので、現実的な必要性は周りにあります 15-17対流IP. .

プロキシの要件に影響を与える要因

1. ターゲットサイトの特徴

高度なサイト アンチボットシステム フラグを立てる前に各IPが少数の要求をすることができるのでより多くのIPを要求して下さい。 Google、Amazon、および主要なソーシャルプラットフォームは、指紋と行動分析に大きく投資します。 これらのサイトをターゲティングするときに 3-5x 以上の IP の予算が示唆されます。

2. 要求の容積および頻度

連続スクラップ (24/7 監視) は、バッチジョブよりも多くの IP を必要とします。 毎日のバッチを実行すると、ウィンドウの間にプールを積極的に回転させることができます。 リアルタイム監視のために、すべてのIPはアクティブに長くとどまり、あなたの総条件を高めます。

3. 地理的な配分

複数の地域(ローカライズされた価格設定、ジオ固有の検索結果)のデータが必要な場合は、各ターゲット地理情報にIPが必要です。 10か国で価格を掻くプロジェクトは、国ごとに15個のIPを必要とするかもしれません。 利用可能なチェック ProxyHatの場所 ジオディストリを計画する

4. セッションと回転要件

一部のタスク(ログアウトフロー、マルチページチェックアウト解析)には、 スティッキーセッション 同じ IP が 1 分間主張する場所。 効果的なプール利用率を削減し、IPを長持ちする。 セッション状態のない純粋なデータ収集は、各IPを効率的に使用することで、すべてのリクエストで回転させることができます。

5. 住宅対データセンター

レジデンシャルIPは、より高い信頼スコアを持ち、禁止する前により多くの要求を行うことができますので、それらの少数を必要とする場合があります。 しかし、彼らはGBあたりの費用がかかります。 データセンターIPは安価ですが、フラグが速くなるので、より大きなプールが必要です。 より深い比較については、 住宅対データセンター対モバイルプロキシ. .

使用事例によるサイジングテーブル

使用事例によるサイジングテーブル
ユースケース毎日のリクエスト推奨IPプロキシタイプ
小規模SEO監査(1サイト)1,000-5,000円5月10日賃貸住宅
プロダクト価格の監視10,000~50,00015-30の賃貸住宅
SERPトラッキング(100キーワード)5,000-20,000円10月25日賃貸住宅
Eコマースカタログスクレイピング50,000-200,000の30-80の賃貸住宅
大規模データ集計500,000 +100-500+の住宅の回転

総帯域幅の計算

プロキシカウントは1つの次元です。帯域幅はもう1つです。 総データ転送を見積もります。

# Average page sizes
static_page = 50 KB      # HTML only
dynamic_page = 200 KB    # HTML + JSON/API responses
full_render = 2-5 MB     # with all assets (headless browser)
# Example: 50,000 pages/day × 200 KB average
daily_bandwidth = 50000 * 200 / 1024 / 1024  # ≈ 9.5 GB/day

これは、あなたが右を選択するのに役立ちます ProxyHatプラン IPと帯域幅の両方のニーズに基づいています。

実装:ダイナミックプールサイジング

静的に推測するよりもむしろ、実際の条件に適応するダイナミックプールサイジングを実行します。 以下は、 ProxyHat ゲートウェイ と 適応通貨 を使用する例です。

Python の例

import asyncio
import aiohttp
from dataclasses import dataclass, field
from time import time
@dataclass
class PoolSizer:
    """Dynamically adjusts concurrent proxy connections based on success rate."""
    min_concurrent: int = 5
    max_concurrent: int = 100
    target_success_rate: float = 0.95
    current_concurrent: int = 10
    results: list = field(default_factory=list)
    def record(self, success: bool):
        self.results.append((time(), success))
        # Keep only last 100 results
        self.results = self.results[-100:]
    @property
    def success_rate(self) -> float:
        if not self.results:
            return 1.0
        return sum(1 for _, s in self.results if s) / len(self.results)
    def adjust(self):
        rate = self.success_rate
        if rate >= self.target_success_rate and self.current_concurrent < self.max_concurrent:
            # Success rate is good — try more concurrency
            self.current_concurrent = min(self.current_concurrent + 2, self.max_concurrent)
        elif rate < self.target_success_rate * 0.9:
            # Success rate dropping — reduce concurrency
            self.current_concurrent = max(self.current_concurrent - 5, self.min_concurrent)
async def scrape_with_adaptive_pool(urls: list[str]):
    sizer = PoolSizer()
    proxy = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
    semaphore = asyncio.Semaphore(sizer.current_concurrent)
    async with aiohttp.ClientSession() as session:
        async def fetch(url):
            async with semaphore:
                try:
                    async with session.get(url, proxy=proxy, timeout=aiohttp.ClientTimeout(total=30)) as resp:
                        success = resp.status == 200
                        sizer.record(success)
                        return await resp.text() if success else None
                except Exception:
                    sizer.record(False)
                    return None
        for batch_start in range(0, len(urls), sizer.current_concurrent):
            batch = urls[batch_start:batch_start + sizer.current_concurrent]
            await asyncio.gather(*[fetch(url) for url in batch])
            sizer.adjust()
            # Update semaphore for next batch
            semaphore = asyncio.Semaphore(sizer.current_concurrent)
            print(f"Concurrent IPs: {sizer.current_concurrent}, Success rate: {sizer.success_rate:.1%}")

生産の使用のため、 ProxyHatのPython SDK 接続プールと回転を自動的に処理します。

Node.js 例

const HttpsProxyAgent = require('https-proxy-agent');
const fetch = require('node-fetch');
class AdaptivePoolSizer {
  constructor(min = 5, max = 100) {
    this.min = min;
    this.max = max;
    this.current = 10;
    this.results = [];
    this.targetRate = 0.95;
  }
  record(success) {
    this.results.push({ time: Date.now(), success });
    if (this.results.length > 100) this.results = this.results.slice(-100);
  }
  get successRate() {
    if (!this.results.length) return 1;
    return this.results.filter(r => r.success).length / this.results.length;
  }
  adjust() {
    if (this.successRate >= this.targetRate && this.current < this.max) {
      this.current = Math.min(this.current + 2, this.max);
    } else if (this.successRate < this.targetRate * 0.9) {
      this.current = Math.max(this.current - 5, this.min);
    }
  }
}
async function scrapeWithAdaptivePool(urls) {
  const sizer = new AdaptivePoolSizer();
  const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
  for (let i = 0; i < urls.length; i += sizer.current) {
    const batch = urls.slice(i, i + sizer.current);
    const results = await Promise.allSettled(
      batch.map(url =>
        fetch(url, { agent, timeout: 30000 })
          .then(res => { sizer.record(res.ok); return res.text(); })
          .catch(() => { sizer.record(false); return null; })
      )
    );
    sizer.adjust();
    console.log(`Concurrent: ${sizer.current}, Success: ${(sizer.successRate * 100).toFixed(1)}%`);
  }
}

プロキシプールをサイジングするときの一般的な間違い

  • すべてのターゲットの同じカウントを使用します。 静的なブログで動作するプールはAmazonで失敗します。 ターゲットごとの常にベンチマーク。
  • 再試行のオーバーヘッドを無視します。 失敗したリクエストは帯域幅と時間を消費します。 積極的なターゲットのための20-40%の試行率の要因。
  • セッションの要件を考慮しない。 ログインフローのスティッキーセッションが必要な場合は、各セッションがIPを結びます。 リクエスト率ではなく、同時セッションに基づいて計算します。
  • 地理的ニーズの忘れ。 米国の10個のIPは、日本でのローカライズされた結果を掻くのに役立ちます。 地理ごとの計画。
  • オーバープロビジョニング "ケースでちょうど。" ProxyHat のような住宅用プロキシを回転させると、大きなプールを自動的にアクセスします。 プール内のIP数ではなく、帯域幅を支払う。 焦点 正しいプロキシタイプを選ぶ IP を隠すのではなく。

ProxyHat 利点:プールの管理は簡単

ProxyHatの回転住宅プロキシゲートウェイでは、手動でIPのリストを管理する必要はありません。 リクエストを通した gate.proxyhat.com 数百万人のプールから自動的に新しいIPを受信します。 つまり:

  • マニュアルIPリスト管理なし
  • リクエスト毎の自動回転(または必要に応じて粘着セッション)
  • IP へのアクセス 190カ国以上
  • 使用する帯域幅にペイ、IP 手数料なし

"proxy count" は、ゲートウェイを介して実行する同時接続の数が、あなたの通貨レベルになります。 上記の式で始まり、適応型サイジングコードを生産で微調整させます。

スクラップアーキテクチャをプロキシとの完全なウォークスルーのために、私たちのを参照してください ウェブスクレイピングプロキシの完全なガイド. あなたのプールサイジングを補完する回転戦略について学ぶために、読む ブロックせずにウェブサイトをScrapeする方法. .

よくある質問

小規模なスクレイピングが必要なのはどれくらいの長所ですか?

適度に保護された場所を目標とする1日あたりの5,000の要求の下の小規模なプロジェクトでは、5-10の同時住宅のプロキシは通常十分です。 ProxyHat のようなゲートウェイを回転させると、concurrency レベルを 5-10 に設定し、システムが IP の割り当てを処理するだけです。

JavaScript-heavyサイトには、もっとプロキシが必要ですか?

はい。 ヘッドレスブラウザスクレイピングは、リクエストごとに遅くなります(2〜10秒、HTMLのみの場合は0.5〜1秒)。つまり、各同時スロットはリクエストを処理します。 同じスループットを維持するために2〜2倍の通貨が必要な場合があります。 ガイドを見る ブロック回避 最適化のヒントのため。

住宅やデータセンターのプロキシを使用する必要がありますか?

ほとんどのスクレイピングタスクのために、住宅のプロキシはより高い成功率を提供し、より少ない同時接続を必要とします。 データセンターのプロキシはGB当たり安いですが、ブロックされた高速で、より大きなプールを必要としています。 お問い合わせ プロキシタイプ比較 詳しい指導のため。

ProxyHatの回転プールはどのように機能しますか?

ProxyHat のゲートウェイを介してそれぞれ ()gate.proxyhat.com:8080)は別の住宅IPを自動的に割り当てられます。 個々のIPを管理しないで、対立とシステムが回転を処理します。 これは、静的IPリストを維持するよりも効率的です。

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

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

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