ProxyHealthList

ホーム / ユースケース / Scrapy

Scrapy 用の無料プロキシ

Scrapy は request.meta['proxy'] で組み込みのプロキシ対応があります。毎時検証の無料一覧と小さなローテーションミドルウェアを組み合わせましょう。

HTTP 一覧(TXT) 全一覧(JSON)

ローテーション用ミドルウェア

このミドルウェアをプロジェクトに入れ、settings.py で有効化します。検証済み一覧を一度読み込み、リクエストごとにランダムなプロキシを割り当て、プロキシ失敗時は別のプロキシで再試行します。

# middlewares.py
import random, requests

class VerifiedProxyMiddleware:
    LIST = "https://raw.githubusercontent.com/xyzs996/free-proxy-health-list/main/proxies/protocols/http/data.txt"

    def __init__(self):
        txt = requests.get(self.LIST, timeout=15).text
        self.proxies = [f"http://{l.strip()}" for l in txt.splitlines() if l.strip()]

    def process_request(self, request, spider):
        request.meta["proxy"] = random.choice(self.proxies)

    def process_exception(self, request, exception, spider):
        request.meta["proxy"] = random.choice(self.proxies)
        return request
# settings.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.VerifiedProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
RETRY_ENABLED = True
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 15
DOWNLOAD_DELAY = 1.0

ヒント

無料プロキシは不安定なので RETRY_ENABLED を有効にし RETRY_TIMES を多めに。fast 部分集合から始め、長時間のクロールの合間に一覧を再読み込みしてください。常に robots.txt を守りましょう。

よくある質問

Scrapy でプロキシを 1 つ設定するには?

request.meta['proxy'] = 'http://host:port' を設定するか http_proxy を export。

Scrapy は SOCKS5 対応?

既定のミドルウェアは HTTP を処理。SOCKS には外部ハンドラが必要です。

一覧はどこから?

CDN から TXT か JSON の検証済み一覧をダウンロード。毎時再チェックされます。

関連