Scrapy でプロキシを使う
HttpProxyMiddleware は既定で有効です。接続文字列をリクエストの meta に入れるだけで動きます。
最小のスパイダー
有効化の設定は要りません。HttpProxyMiddleware は既定のパイプラインに入っていて、meta の proxy キーを読みます。認証情報は通常の接続文字列と同じく、アドレスの中に含めます。
import scrapy
class IpSpider(scrapy.Spider):
name = "ip"
proxy = "http://LOGIN__cr.de:PASSWORD@gw.dataimpulse.com:823"
def start_requests(self):
yield scrapy.Request(
"https://ipinfo.io/json",
meta={"proxy": self.proxy},
)
def parse(self, response):
self.logger.info(response.text)収集時に気をつけること
ポート 823 での再試行は別の IP から出ます。これは不具合ではなくローテーションの動作です。Scrapy の再試行はここで正しく働きますが、リクエスト間で IP が変わらない前提の処理は書けません。固定が要る場合は 10000〜20000 の固定ポートを使います。
DOWNLOAD_TIMEOUT は余裕を持たせてください。住宅用の出口はデータセンターより応答が遅く、タイムアウトのないリクエストは数分ぶら下がることがあります。同時接続はプランで 2000 まで許容され、通常の収集では届きません。