Free Proxy Health List

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

ローテーティングプロキシプールを作る

ヘルス管理付きの実用的なローテーション処理を約 20 行で。

ローテーティングプロキシプールを作る

1. 失敗カウント付きローテーション

import collections, itertools, requests

proxies = [l.strip() for l in open("proxies.txt") if l.strip()]
failures = collections.Counter()
pool = itertools.cycle(proxies)

def get(url, attempts=10):
    for _ in range(attempts):
        proxy = next(pool)
        if failures[proxy] >= 3:
            continue
        try:
            return requests.get(
                url,
                proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
                timeout=8,
            )
        except requests.RequestException:
            failures[proxy] += 1
    raise RuntimeError("pool exhausted")

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

プロキシごとに失敗回数を数え、繰り返し失敗するものを飛ばす — これが生のリストを使えるプールに変える要点です。これがないと、同じ死んだエントリのタイムアウトを払い続けることになります。公開間隔に合わせてファイルを更新し、その際にカウンタもリセットしてください。この失敗率を吸収できない本番用途では、運用されたローテーションエンドポイントのほうが適した道具です。

関連ガイド

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