GBProxies

Scrapyでローテートプロキシを設定する方法

Scrapyの組み込みHttpProxyMiddlewareはrequest.metaからプロキシを読み取ります。ローテートゲートウェイでは1つのURLを設定し、各リクエストで新しいIPを取得します。

手順

  1. HttpProxyMiddlewareを有効に保持 (デフォルトでオン)
  2. 各リクエストまたはstart_requestsでmeta={"proxy": url}を設定
  3. プロキシURLにユーザー名とパスワードを入力
  4. サイトが依然としてレート制限する場合はCONCURRENT_REQUESTS_PER_DOMAINを下げてください

コード例

import scrapy

PROXY = "http://USERNAME-cc-gb:PASSWORD@gw.gbproxies.cc:10000"

class PricesSpider(scrapy.Spider):
    name = "prices"
    start_urls = ["https://example.com/catalog"]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, meta={"proxy": PROXY})

    def parse(self, response):
        for href in response.css("a.product::attr(href)").getall():
            yield response.follow(href, self.parse_item, meta={"proxy": PROXY})

    def parse_item(self, response):
        yield {"title": response.css("h1::text").get(), "url": response.url}

USERNAMEとPASSWORDをコンソールのProxiesページのプロキシログインに置き換えてください。ポート10000は住宅用HTTPです。各製品のポートは以下を参照してください。

ヒント

  • IMAGES_ENABLEDをオフにし、メディアダウンロードを避けてGBを節約
  • 安定した実行にはDOWNLOAD_TIMEOUT 30とRETRY_TIMES 3を設定

よくある質問

ローテーションミドルウェアは必要ですか?

いいえ。ゲートウェイが自動でローテーションします。1つのプロキシURLで十分です。

Scrapyでローテートプロキシを設定する方法