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: без спама, атак, обхода контроля доступа и парсинга вопреки правилам сайта.