Free Proxy Health List

ライブスナップショット · 3,287 proxies

Scrapy プロキシミドルウェア

リクエストごとに切り替え、失敗時に再試行する、そのまま使えるダウンローダーミドルウェア。

Scrapy プロキシミドルウェア

1. middlewares.py

import itertools, random

class RotatingProxyMiddleware:
    def __init__(self):
        with open("proxies.txt") as handle:
            self.proxies = [line.strip() for line in handle if line.strip()]
        random.shuffle(self.proxies)
        self.pool = itertools.cycle(self.proxies)

    def process_request(self, request, spider):
        request.meta["proxy"] = f"http://{next(self.pool)}"

2. settings.py

DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.RotatingProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
}
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 10

時間を節約するための注意点

順序が重要です。プロキシミドルウェアはリトライミドルウェアより前で動かす必要があります。そうすることで再試行のたびに新しいプロキシが選ばれ、失敗したものを繰り返しません。DOWNLOAD_TIMEOUT は低めに — 無料プロキシはパイプラインで最も遅い部分です — そして失敗率を吸収するため RETRY_TIMES を上げてください。

関連ガイド

公開スナップショットの利用範囲
無料の公開プロキシは不特定の第三者が運用し共有されています。パスワードやトークン、個人情報を送信しないでください。GitHub の利用規定に従い、スパム、攻撃、アクセス制御の回避、サイトポリシーに反する収集には使用しないでください。