Как настроить HTTP-прокси в Scrapy

Команда Proxyca · 06.11.2026


Как настроить HTTP-прокси в Scrapy

HTTP-прокси-мидлвар Scrapy может применять прокси к отдельному запросу через request.meta['proxy']. Start with one explicit request, then propagate the setting to subsequent requests deliberately. A proxy configured for the first request should not be assumed to cover every request your spider later creates.

В этом руководстве используются аутентификация HTTP-прокси и один диагностический URL. Это пример настройки для разрешённого сценария, а не способ обхода ограничений доступа. Общий контекст по сетям смотрите в руководство по проверке прокси.

Отправная точка: один спайдер, одна конечная точка и один запрос. Не храните учётные данные в файле спайдера. Отключите повторные попытки для первой диагностики, чтобы одну ошибку было легко интерпретировать. Примерные настройки тайм-аута и параллелизма не являются универсальной конфигурацией для продакшена.

Создайте минимальный запрос через прокси

Этот Документация Scrapy HttpProxyMiddleware описывает настройку прокси на уровне запроса. В примере ниже аутентифицированный URL прокси считывается из переменной окружения, а ipify запрашивается о наблюдаемом адресе.

import os
import scrapy

class ProxyCheckSpider(scrapy.Spider):
    name = "proxy_check"
    custom_settings = {
        "CONCURRENT_REQUESTS": 1,
        "RETRY_ENABLED": False,
        "DOWNLOAD_TIMEOUT": 30,
    }

    async def start(self):
        yield scrapy.Request(
            "https://api.ipify.org?format=json",
            meta={"proxy": os.environ["PROXY_URL"]},
            callback=self.parse,
            errback=self.failed,
        )

    def parse(self, response):
        yield {"observed_ip": response.json()["ip"]}

    def failed(self, failure):
        self.logger.error(
            "Proxy diagnostic failed: %s",
            failure.type.__name__,
        )

Сохраните это как proxy_check.py и выполните scrapy runspider proxy_check.py. This example uses the asynchronous start() точка входа, описанная для актуальных версий Scrapy. Если в вашем проекте зафиксирована более старая версия, используйте соответствующую ей документацию по паукам, а не комбинируйте несовместимые примеры жизненного цикла.

Запрос отправляется на внешний сервис определения IP-адреса. Если нужно, чтобы диагностический трафик не покидал вашу собственную инфраструктуру, используйте конечную точку, которую вы контролируете. Не вводите настоящий пароль в терминал, транскрипт которого будет доступен другим.

Правильно задайте адрес эндпоинта

Для доступа через HTTP-прокси с аутентификацией URL обычно имеет вид http://username:password@host:port. Obtain the actual scheme and endpoint from your order. Encode special characters in the username and password as URL components before building the URL; do not encode the whole URL as one string.

Храните учётные данные для целевого ресурса отдельно. Доступ паука к сайту, включая любой вход в аккаунт, не обеспечивается аутентификацией на прокси. Никогда не добавляйте пароль от прокси в качестве параметра запроса в целевой URL.

Применить прокси к последующим запросам

Когда диагностика пройдёт успешно, добавьте один разрешённый запрос к адресу назначения. При его создании явно задайте тот же meta['proxy'] значение, если это и есть нужный маршрут. В крупном проекте проще поддерживать это решение, если централизовать его в собственном промежуточном слое загрузчика (downloader middleware), чем повторять его в обратных вызовах.

Не копируйте целиком meta словарь в каждый новый запрос, не понимая его содержимого. Рассматривайте выбор прокси как именованную часть конфигурации вашего приложения. Записывайте имя хоста назначения и не секретную метку конечной точки, чтобы логи оставались полезными и не раскрывали учётные данные.

Разберитесь с приоритетом конфигурации

Настройки Scrapy могут поступать из командной строки, конфигурации паука и настроек проекта. справочник по настройкам документирует этот приоритет. Если фактическое поведение отличается от вашего файла, поищите настройку с более высоким приоритетом, прежде чем править несколько несвязанных компонентов.

Для диагностики сократите число задействованных компонентов. Не включайте повторные попытки, пока не будет понятен первый результат. Позже подберите значения тайм-аута загрузки, параллелизма и задержки для разрешённой нагрузки. Эти настройки управляют вашим краулером; они не определяют разрешение целевого ресурса или опубликованные им лимиты запросов.

Классифицируйте результат, прежде чем менять прокси

Возвращённый IP означает, что диагностический эндпоинт получил запрос. Сбой в callback может быть связан с разбором ответа или кодом паука. Ошибка загрузчика относится к другому этапу. Разделяйте эти этапы, чтобы ошибка разбора JSON не считалась недоступностью прокси.

Если целевой ресурс отвечает, например, кодом 403 или 429, определите, какой сервис отвечает, и следуйте его правилам доступа. Наш руководство по подключению для скрапинга объясняет разницу между аутентификацией, ответами целевого ресурса и ответственной обработкой повторных попыток.

Часто задаваемые вопросы

Настраивает ли это SOCKS-прокси?

Нет. В этом руководстве используется HTTP proxy middleware из Scrapy. Для конечной точки SOCKS нужен отдельно поддерживаемый транспорт или интеграция; простого изменения отображаемого названия протокола недостаточно.

Почему первый запрос сработал, а последующие идут напрямую?

Проверьте, как создаются эти последующие запросы. Задайте маршрут явно для каждого нужного запроса или реализуйте единую политику в middleware.

Где получить данные прокси?

Откройте Proxyca, выберите тариф и доступную страну и используйте выданные эндпоинт и учётные данные. Открыть Proxyca в Telegram.