なぜ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,000 | 15-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リストを維持するよりも効率的です。






