
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: без спама, атак, обхода контроля доступа и парсинга вопреки правилам сайта.
Бесплатные публичные прокси общедоступны и управляются неизвестными лицами. Никогда не передавайте через них пароли, токены и персональные данные. Соблюдайте правила допустимого использования GitHub: без спама, атак, обхода контроля доступа и парсинга вопреки правилам сайта.