Scrapyでローテートプロキシを設定する方法
Scrapyの組み込みHttpProxyMiddlewareはrequest.metaからプロキシを読み取ります。ローテートゲートウェイでは1つのURLを設定し、各リクエストで新しいIPを取得します。
手順
- HttpProxyMiddlewareを有効に保持 (デフォルトでオン)
- 各リクエストまたはstart_requestsでmeta={"proxy": url}を設定
- プロキシURLにユーザー名とパスワードを入力
- サイトが依然としてレート制限する場合は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で十分です。