proxys.store

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 まで許容され、通常の収集では届きません。

次を読む