Рабочая настройка прокси в Scrapy, важные правила повторов и как не нагружать сайты.
Один адрес и два способа его задать
Ротационный прокси — это один HOST и PORT с логином и паролем; IP выхода меняется на стороне сервиса, список IP вести не нужно. Scrapy берёт прокси из ключа meta proxy, а логин и пароль можно указать в URL: http://username:password@some_proxy_server:port. Значение в meta приоритетнее переменных окружения http_proxy и https_proxy.
Если прокси нужен только части запросов, задавайте его в нужных Request; если всем — используйте небольшой downloader middleware. Переменные окружения и спецсимволы в пароле разобраны в руководстве по настройке прокси в Scrapy; эта страница — про ротацию и повторы.
# middlewares.py
class ProxyMiddleware:
def process_request(self, request, spider):
# Only set it when the request does not carry its own proxy.
request.meta.setdefault("proxy", "http://LOGIN:PASSWORD@HOST:PORT")
# settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.ProxyMiddleware": 350,
}
Только пример. Приоритет 350 срабатывает раньше встроенного HttpProxyMiddleware, который читает значение из meta.
Ротационный адрес даёт новый IP на каждое новое подключение. Scrapy может держать соединение открытым и посылать по нему несколько запросов, поэтому несколько запросов могут идти с одного IP. Не предполагайте «один IP на запрос»: запишите IP выхода в лог, как в пауке ниже, и потом решайте.
Если задача должна остаться на одном адресе, например вход и несколько страниц после него, создайте прокси в режиме одного IP («Выбор региона / липкий IP») и держите эти запросы вместе. Для независимых страниц подойдёт режим «Выбор региона / новый IP на соединение».
import scrapy
PROXY = "http://LOGIN:PASSWORD@HOST:PORT"
class IpCheckSpider(scrapy.Spider):
name = "ip_check"
def start_requests(self):
for i in range(5):
yield scrapy.Request(
"https://ipinfo.io/ip?n=%d" % i,
meta={"proxy": PROXY, "max_retry_times": 3},
dont_filter=True,
)
def parse(self, response):
self.logger.info("exit IP: %s", response.text.strip())
Только пример. Подставьте прокси из «Мои активы», запустите scrapy crawl ip_check и прочитайте IP в логе. start_requests остаётся классической точкой входа; в новых версиях Scrapy есть ещё асинхронный start().
Сайт просит снизить темп: уменьшите частоту и учитывайте Retry-After
403, 404
Нет
Повтор даст тот же ответ; проверьте URL и правила сайта
407
Нет
Прокси отклонил логин и пароль: исправьте LOGIN и PASSWORD, не повторяйте
Источник: документация Scrapy по downloader middleware (RETRY_HTTP_CODES по умолчанию), прочитана 12.11.2026; колонка «Что делать» — рекомендация. В разных версиях Scrapy значения могут отличаться.
# settings.py
ROBOTSTXT_OBEY = True
DOWNLOAD_TIMEOUT = 30
# retries (the documented defaults)
RETRY_ENABLED = True
RETRY_TIMES = 2 # extra tries after the first download
RETRY_HTTP_CODES = [408, 429, 500, 502, 503, 504, 522, 524]
# be gentle with the target site
DOWNLOAD_DELAY = 1.0
CONCURRENT_REQUESTS_PER_DOMAIN = 4
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1.0
AUTOTHROTTLE_MAX_DELAY = 30.0
AUTOTHROTTLE_TARGET_CONCURRENCY = 2.0
Только пример. RETRY_TIMES — число дополнительных попыток после первой загрузки. Для отдельного запроса можно задать meta["max_retry_times"] или meta["dont_retry"] = True, чтобы пропустить повторы.
AutoThrottle по умолчанию выключен. Включённый, он считает задержку по скорости ответов сайта, не опускается ниже DOWNLOAD_DELAY, а ответы не 200 не могут её сократить — при ошибках сбор замедляется, а не ускоряется. По умолчанию START_DELAY равен 5.0, MAX_DELAY 60.0, TARGET_CONCURRENCY 1.0.
Оставьте ROBOTSTXT_OBEY включённым, задайте DOWNLOAD_DELAY и CONCURRENT_REQUESTS_PER_DOMAIN явно, не полагаясь на значения по умолчанию, и прочитайте условия сайта. Прокси меняет, откуда идут запросы, но не меняет, сколько запросов выдержит сайт.
На странице динамических резидентных прокси выберите страну, режим выхода и HTTP или SOCKS5, затем создайте. HTTP использует порт 2222, SOCKS5 — порт 3333.
Запустите паука ip_check и прочитайте пять IP в логе.
Ожидаемый результат Пять IP из выбранной страны.
Шаг 4. Добавьте настройки повторов и задержек
Вставьте настройки, запустите небольшой сбор и посмотрите число повторов и ответов 429 в статистике Scrapy в конце.
Диагностика
Все ответы 407 или прокси не отвечает
Проверьте Значение в meta — полный URL со схемой, LOGIN и PASSWORD скопированы точно?
Решение Исправьте URL, закодируйте спецсимволы пароля и сначала проверьте через curl -x.
Когда остановиться Не увеличивайте RETRY_TIMES: неверный пароль даёт ошибку каждый раз.
Много ответов 429
Проверьте Посмотрите CONCURRENT_REQUESTS_PER_DOMAIN, DOWNLOAD_DELAY и заголовок Retry-After.
Решение Снизьте параллельность, увеличьте задержку, включите AutoThrottle.
Когда остановиться Если 429 продолжаются при низкой частоте, сайт может не разрешать такой сбор; остановитесь.
Страницы после входа теряют сессию
Проверьте Менялся ли IP выхода между входом и следующей страницей?
Решение Для такого сценария используйте режим одного IP и держите запросы вместе.
Частые вопросы
Как использовать ротационный прокси в Scrapy?
Задайте request.meta["proxy"] = http://LOGIN:PASSWORD@HOST:PORT в каждом Request или в небольшом downloader middleware.
Какие коды Scrapy повторяет по умолчанию?
408, 429, 500, 502, 503, 504, 522 и 524, до RETRY_TIMES дополнительных попыток (по умолчанию 2). Сверьтесь с документацией вашей версии Scrapy.
Нужно ли повторять 403 или 407?
Нет. 407 значит, что прокси отклонил логин и пароль — исправьте их; 403 обычно повторяется, поэтому проверьте URL и правила сайта.
Получает ли каждый запрос новый IP?
Не обязательно. Новый IP приходит с новым соединением, а Scrapy может отправить несколько запросов по одному. Запишите IP выхода в лог, чтобы увидеть, что происходит у вас.
Сколько стоят динамические резидентные прокси Proxy302?
Бюджетная линия — $1,50 за ГБ, в больших пакетах за ГБ дешевле; купленный трафик не сгорает. Бесплатного теста нет.
Файл фактов сайта, проверен 12.11.2026: динамические резидентные, новый IP на каждое новое подключение, есть режим одного IP, HTTP порт 2222 и SOCKS5 порт 3333 на proxy.proxy302.com, Бюджетная линия $1,50 за ГБ, бесплатного теста нет.
Прочитано 12.11.2026: HttpProxyMiddleware берёт прокси из ключа meta proxy, принимает http://username:password@some_proxy_server:port, значение meta приоритетнее переменных окружения; RetryMiddleware по умолчанию RETRY_ENABLED True, RETRY_TIMES 2, RETRY_HTTP_CODES [408, 429, 500, 502, 503, 504, 522, 524]; ключи meta max_retry_times и dont_retry; RobotsTxtMiddleware управляется ROBOTSTXT_OBEY.
Прочитано 12.11.2026: по умолчанию выключено; AUTOTHROTTLE_START_DELAY 5.0, AUTOTHROTTLE_MAX_DELAY 60.0, AUTOTHROTTLE_TARGET_CONCURRENCY 1.0; задержка считается по латентности, не опускается ниже DOWNLOAD_DELAY, ответы не 200 не могут её сократить.
Значения по умолчанию взяты из версии документации для разработки; сверьтесь с вашей версией Scrapy.
Прочитано 12.11.2026: DOWNLOAD_DELAY — минимум секунд между двумя подряд запросами к одному домену; CONCURRENT_REQUESTS_PER_DOMAIN ограничивает одновременные запросы к одному домену; ROBOTSTXT_OBEY заставляет Scrapy соблюдать robots.txt; DOWNLOAD_TIMEOUT — время ожидания загрузчика до таймаута.
Прочитано 12.11.2026: 429 — слишком много запросов за период; Retry-After может указать, сколько ждать.
Готовы попробовать?
Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.