К содержимому

Настройка прокси в Scrapy: meta запроса, middleware и переменные окружения

В Scrapy есть встроенный прокси-middleware, поэтому прокси можно задать для отдельного запроса, для всего паука или через окружение. В этом руководстве показан каждый способ, настройки, которые делают краулинг аккуратным, и проверка того, что прокси действительно используется.

Ключ proxy в meta

Документация Scrapy описывает HttpProxyMiddleware как компонент, который задаёт HTTP-прокси для запросов через значение proxy в meta объекта Request. Этот ключ можно задать самому, значением вроде http://some_proxy_server:port или http://username:password@some_proxy_server:port. Документация добавляет, что значение в запросе имеет приоритет над переменными окружения и что оно игнорирует no_proxy.

Ключ proxy в meta: пример

import scrapy

class IpSpider(scrapy.Spider):
    name = "ip"

    async def start(self):
        yield scrapy.Request(
            "https://ipinfo.io/json",
            meta={"proxy": "http://USERNAME:PASSWORD@proxy-host:port"},
        )

    def parse(self, response):
        yield response.json()

Замените USERNAME, PASSWORD, proxy-host и port значениями вашего прокси. Метод start() соответствует текущей документации Scrapy.

Один прокси для каждого запроса

Чтобы не повторять ключ meta, задайте его в downloader middleware. В документации сказано, что downloader middleware включается настройкой DOWNLOADER_MIDDLEWARES, где у каждого пути класса есть порядковый номер, и что process_request() вызывается для каждого запроса, который через него проходит.

Один прокси для каждого запроса: пример

# myproject/middlewares.py
class ProxyMiddleware:
    def process_request(self, request):
        request.meta.setdefault("proxy", "http://USERNAME:PASSWORD@proxy-host:port")
        return None

Только пример: замените значения-заглушки своими.

Один прокси для каждого запроса: пример

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.ProxyMiddleware": 543,
}

Берите логин и пароль из переменной окружения или файла с секретами, а не пишите их в коде. Проверьте сигнатуру process_request() в документации той версии Scrapy, которую вы используете.

Переменные окружения

HttpProxyMiddleware, как и urllib.request в Python, учитывает переменные окружения http_proxy, https_proxy и no_proxy. Задайте их до запуска краулера, и код паука менять не придётся.

Переменные окружения: пример

export http_proxy="http://USERNAME:PASSWORD@proxy-host:port"
export https_proxy="http://USERNAME:PASSWORD@proxy-host:port"
scrapy crawl ip

Символы вроде @, : и / в пароле нужно кодировать с помощью процентного кодирования в URL прокси. См. [руководство об адресе, порте и логине прокси](/ru/guides/proxy-address-port-login/).

HTTP или SOCKS

Документация Scrapy сообщает, что URL SOCKS-прокси вроде socks5://username:password@some_proxy_server:port можно использовать, только если обработчик загрузки его поддерживает; из встроенных обработчиков она называет поддерживающим тот, что основан на httpx, а остальные встроенные обработчики не поддерживают. На той же странице отмечено, что URL прокси обычно используют схему http://. Для стандартного проекта Scrapy используйте HTTP-прокси. Если нужен SOCKS5, сначала выясните, какой обработчик загрузки вы используете, и прочитайте его документацию.

Проверьте, что прокси используется

Запустите паука выше и прочитайте поля country и org в ответе от https://ipinfo.io/json; как их читать, объясняет руководство по проверке местоположения прокси. Если вы видите свой собственный адрес, ключ meta не был задан для этого запроса или переменные окружения были заданы уже после старта краулера. Добавьте middleware, чтобы ключ был в каждом запросе.

Сделайте краулинг аккуратным

Прокси меняет адрес, который видит сайт, но правила сайта продолжают действовать. В Scrapy для этого есть настройки. В документации по настройкам сказано, что ROBOTSTXT_OBEY заставляет Scrapy соблюдать политики robots.txt и что она включена в settings.py, созданном командой scrapy startproject. DOWNLOAD_DELAY задаёт минимальное число секунд между двумя последовательными запросами к одному домену и нужна, чтобы не нагружать серверы слишком сильно, а CONCURRENT_REQUESTS_PER_DOMAIN ограничивает число одновременных запросов к домену. Расширение AutoThrottle динамически подстраивает задержки по времени загрузки, чтобы достичь целевой параллельности для каждого удалённого сайта. Перед краулингом сайта прочитайте его условия использования.

Сделайте краулинг аккуратным: пример

# settings.py
ROBOTSTXT_OBEY = True
DOWNLOAD_DELAY = 1
CONCURRENT_REQUESTS_PER_DOMAIN = 2
AUTOTHROTTLE_ENABLED = True

Эти значения — отправная точка; подберите числа, которые подходят сайту и вашей задаче.

Частые ошибки

Статус 407 означает, что прокси не принял логин и пароль: скопируйте их заново и проверьте кодирование, затем см. руководство по ошибке аутентификации. Ошибки соединения и тайм-ауты обычно означают неверный хост, порт или схему; проверки перечислены в руководстве по сбою подключения. Документация описывает RetryMiddleware как повторяющий запросы, которые завершились сбоем по временным причинам, например из-за тайм-аута соединения или ошибки HTTP 500, поэтому несколько сбоев в логе не всегда означают проблему с прокси. Если вы собираете страницы обычными HTTP-вызовами, а не через Scrapy, см. руководство по Python requests.

Как это сделать с Proxy302

Для любой из этих настроек нужны только хост, порт, логин и пароль прокси Proxy302. Ротируемый резидентный трафик оплачивается за ГБ, а страна выхода задаётся при создании прокси; HTTP работает на порту 2222 хоста proxy.proxy302.com. Статический ISP IP остаётся фиксированным весь срок аренды и не ротируется. В таблице показаны выходы в 7 странах по нашей последней почасовой проверке; зонд отправляет запрос в ChatGPT, это лишь пример цели. Подробности — на странице ротируемых резидентных прокси и в руководстве по проверке местоположения прокси.

Измеренные выходы: ChatGPT, 7 стран

Измеренные выходы: ChatGPT, 7 стран
ПунктГородСеть (провайдер)ASN
СШАBaton Rouge, LouisianaVerizon BusinessAS6167
ВеликобританияBirkenhead, EnglandVirgin Media LimitedAS5089
ГерманияHannover, Lower Saxonyhtp GmbHAS13045
ЯпонияSaitama, SaitamaJCOM Co., Ltd.AS9824
СингапурYishun New Town, SingaporeSingtel Fibre BroadbandAS9506
БразилияSilvianópolis, Minas Geraisintertel telecomunicacao LTDAAS268801
ИндонезияДжакартаPT Mahawira Nusantara GrupAS151576

Почасовая проверка зонда Proxy302, 28 октября 2026, 14:56 UTC: по одному запросу к ChatGPT из каждой страны через динамический резидентный выход, по публичной точке входа Proxy302. Публично показаны только первые три октета IP. Один замер на страну, не среднее; следующие проверки будут отличаться.

Как это сделать с Proxy302: шаги

  1. Шаг 1

    Откройте страницу ротационных резидентных прокси, выберите линию, оставьте протокол HTTP или выберите SOCKS5 и нажмите «Проверить цену и создать».

  2. Шаг 2

    Откройте «Мои активы» (раздел консоли со всем, что вы купили) и скопируйте HOST, PORT, USERNAME и PASSWORD. На странице «Подключение» есть готовый пример с вашими данными.

  3. Шаг 3

    Введите данные в браузер или программу, которую вы настраиваете.

  4. Шаг 4

    Подтвердите выход запросом к https://ipinfo.io/json через прокси.

  5. Шаг 5

    Из материкового Китая сначала запустите вспомогательную программу на странице «Подключение» и держите её открытой, пока работает прокси.

Цены и ограничения

Бюджетная линия стоит $1,50 за ГБ, $1,35 за ГБ в пакете 100 ГБ и $1,20 за ГБ при 300 ГБ. Бесплатного пробного периода нет, а минимальная покупка составляет 1 ГБ. Набор доступных локаций меняется ежедневно.

Частые вопросы

Какой формат URL прокси принимает Scrapy?

В документации в качестве примеров приведены http://some_proxy_server:port и http://username:password@some_proxy_server:port.

Поддерживает ли Scrapy прокси SOCKS5?

В документации сказано, что URL SOCKS-прокси работает, только если обработчик загрузки его поддерживает, а из встроенных назван обработчик на основе httpx.

Учитывает ли значение proxy в meta переменную no_proxy?

Нет. В документации сказано, что значение proxy в meta запроса имеет приоритет над переменными окружения и игнорирует no_proxy.

Заставляет ли прокси Scrapy игнорировать robots.txt?

Нет. ROBOTSTXT_OBEY — отдельная настройка Scrapy, и прокси её не меняет.

Ссылки и источники

6
  1. Документация Scrapy: Downloader Middleware, HttpProxyMiddleware и RetryMiddleware

    Официальная документация · Проверено:

    Прочитано 28 октября 2026 (версия документации 2.19.0): ключ proxy в meta, http_proxy/https_proxy/no_proxy, форматы URL с учётными данными, приоритет значения из meta, зависимость SOCKS от обработчика загрузки, DOWNLOADER_MIDDLEWARES и process_request(), а также RetryMiddleware.

  2. Документация Scrapy: Requests and Responses

    Официальная документация · Проверено:

    Прочитано 28 октября 2026: словарь meta у Request, ключ proxy в meta и асинхронный метод start() паука.

  3. Документация Scrapy: Settings

    Официальная документация · Проверено:

    Прочитано 28 октября 2026: ROBOTSTXT_OBEY (включена в settings.py, созданном командой startproject), DOWNLOAD_DELAY и CONCURRENT_REQUESTS_PER_DOMAIN.

  4. Документация Scrapy: расширение AutoThrottle

    Официальная документация · Проверено:

    Прочитано 28 октября 2026: расширение динамически подстраивает задержки по времени загрузки, чтобы достичь AUTOTHROTTLE_TARGET_CONCURRENCY для каждого удалённого сайта.

  5. Факты о продуктах и прайс Proxy302

    Наблюдение за продуктом · Проверено:

    Файл фактов о продуктах сайта (значения сверены с консолью, бэкендом и прайсом 18-19 октября 2026): продукты, цены в долларах США (1 PTC = 1 USD), сроки аренды, протоколы и порты, число стран, лимиты количества, отсутствие бесплатного теста.

  6. Почасовая проверка связности Proxy302

    Наблюдение за продуктом · Проверено:

    Публичный JSON зонда proxy302.com/live/connectivity/chatgpt.json, прочитан 28 октября 2026, 14:56 UTC: по одному запросу на страну через динамический резидентный выход; город, ASN, сеть и время ответа.

Готовы попробовать?

Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.