Python Scrapy でプロキシを設定・ローテーションする方法
更新日:
Scrapy の非同期 Twisted エンジンには、プライオリティ 750 で動作する組み込みの HttpProxyMiddleware が用意されており、request.meta['proxy'] に代入された http://user:pass@ip:port 形式の接続文字列を自動解釈します。プライオリティ 740 でわずか 10 行のカスタム Downloader Middleware を作成するだけで、スパイダーが VinaProxy の通信量無制限な静的 IP プールを自動巡回できるようになります。
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
Scrapy プロキシミドルウェアの優先順位と同時実行制御設定
組み込みの HttpProxyMiddleware は優先順位 750 で実行され、プロキシ URL から user:pass を除去して Proxy-Authorization ヘッダーを生成するため、request.meta['proxy'] を設定するカスタムミドルウェアは必ずそれより小さい値(例:740)で登録する必要があります:
| Scrapy 設定項目 | 推奨設定値 | 技術的機能と役割 |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | 指定した VinaProxy プロキシ経由でリクエストをルーティング |
| ミドルウェア優先度 | 740(750 より前) | 組み込みの HttpProxyMiddleware が認証ヘッダーを正しくエンコードすることを保証 |
CONCURRENT_REQUESTS_PER_IP | 2 〜 4 | プロキシ IP ごとの同時ソケット接続数を制限し、HTTP 429 制限を防止 |
AUTOTHROTTLE_ENABLED | True | 対象サーバーの応答レイテンシに応じてクロール遅延を動的に自動調整 |
大規模 Scrapy クロールにおけるベストプラクティス
- ミドルウェアの
from_crawler()で VinaProxy プロキシリストを読み込み、process_request()内でrequest.meta['proxy'] = random.choice(self.proxies)を適用してリクエストごとに IP をランダム選択します DOWNLOAD_DELAY = 1.0とあわせてRANDOMIZE_DOWNLOAD_DELAY = Trueを有効にし、同一 IP からのリクエスト間隔に自然な揺らぎを持たせます- HTTP
429や503によるリトライ発生時は、リクエストをキューへ戻す前に別のプロキシ IP へ切り替えます
手順
- 1
プロキシリストを http://user:pass@ip:port 形式に変換
VinaProxy のプロキシリストを当サイトの プロキシ形式変換ツール に入力し、URL 形式を生成します。
- 2
middlewares.py 内に ProxyPoolMiddleware を定義
process_request(self, request, spider)を実装し、request.meta['proxy'] = random.choice(self.proxies)を設定します。 - 3
settings.py で優先度 740 としてミドルウェアを登録
DOWNLOADER_MIDDLEWARESに'myproject.middlewares.ProxyPoolMiddleware': 740を追加し、CONCURRENT_REQUESTS_PER_IP = 2を指定します。 - 4
scrapy shell またはクロール実行で動作確認
https://vinaproxy.com/api/my-ipへテストリクエストを送信し、IP ローテーションと認証が正常に動作することを確認します。
よくある質問
カスタム Scrapy プロキシミドルウェアを優先度 800 に設定すると失敗する理由は?
Scrapy 標準の HttpProxyMiddleware は優先度 750 で実行されます。もしカスタムミドルウェアを 800(750 の後)に設定すると、URL 内の user:pass が Proxy-Authorization ヘッダーに変換されません。必ず優先度を 750 より前(例:740)に設定してください。
Scrapy は各プロキシに対して持続的な接続(Keep-Alive)を維持しますか?
はい。Twisted の接続プールによって、各プロキシエンドポイントに対する持続的な Keep-Alive 接続が維持され、ハンドシェイクのオーバーヘッドを抑えます。
数百万ページ規模の大規模スクレイピングでデータ通信量に制限はありますか?
いいえ。VinaProxy のすべての専用 IPv4 および静的 ISP プランには、月間データ転送量無制限が含まれています。
通信量無制限の静的 IP プールで Scrapy スパイダーを拡張
世界 7 カ国対応、即時発行可能な高品質専用 IPv4 & 静的 ISP プロキシ。
Scrapy 用プロキシを購入