Scrapy Proxy Middleware: Руководство по настройке и ротации
TL;DR
Встроенный HttpProxyMiddleware Scrapy читает Request.meta["proxy"] или стандартные переменные окружения прокси; пользовательская промежуточная программа необходима только для политики выбора или телеметрии.
Установите URL-адрес прокси в запросе перед тем, как встроенная промежуточная программа будет его обрабатывать. Значение meta["proxy"] для каждого запроса переопределяет прокси-серверы окружения и игнорирует no_proxy.
Вращайте только среди настроенных, авторизованных маршрутов прокси и поддерживайте стабильный маршрут для состояния цепочек запросов.
RetryMiddleware Scrapy обрабатывает временные ошибки отдельно от выбора прокси. Не повторяйте ошибки аутентификации 407 слепо.
Nstdata предоставляет сгенерированные параметры Host, Port, Username, Password и session для прокси; Scrapy не генерирует эти значения.
Что вам нужно перед настройкой промежуточной программы прокси Scrapy?
Вам нужен проект Scrapy, разрешенная цель и работающий URL-адрес прокси от вашего провайдера. Для Nstdata создайте Канал, включите Генерацию прокси, выберите параметры продукта и маршрутизации, и скопируйте сгенерированный URL из деталей канала. Храните URL в секретном хранилище. Руководство по прокси Nstdata перечисляет gateway Host, Port, Channel ID, пароль, страну, продолжительность сессии и идентификатор сессии. Не заменяйте предполагаемым шлюзом или жестко не кодируйте реальный пароль канала в settings.py.
Установите Scrapy в виртуальной среде с помощью python -m pip install scrapy, затем создайте проект с помощью scrapy startproject proxy_demo. Поместите приведенные ниже примеры в существующие настройки и файлы пауков проекта. Эти фрагменты основаны на документации, но не являются живой рукопожатиями Nstdata: в этой статье нет учетных данных канала.
Попробуйте Nstproxy Proxy - Начните Бесплатно Уже Сегодня
Как Scrapy выбирает прокси для запроса?
Scrapy выбирает прокси через ключ proxy в мета-данных запроса или через переменные окружения прокси, обрабатываемые встроенной HttpProxyMiddleware. Справка по промежуточным программам загрузчика Scrapy указывает, что значение для каждого запроса имеет приоритет над http_proxy и https_proxy, и оно также игнорирует no_proxy. Этот приоритет может удивить команды, чья среда выполнения имеет настроенный корпоративный прокси.
URL-адрес прокси обычно начинается с http://, даже для HTTPS-адреса. Схема идентифицирует соединение прокси, а не целевой адрес. Встроенные обработчики загрузки Scrapy не все поддерживают SOCKS; в текущей документации упоминается, что HttpxDownloadHandler поддерживает SOCKS и отмечается ограничение для H2DownloadHandler. Используйте протокол и комбинацию обработчиков, поддерживаемых вашим развертыванием.
Метод 1: Как установить один прокси для запроса?
Установите один прокси в пауке, когда задача имеет фиксированный маршрут и нет логики выбора.
Шаг 1: Загрузите URL-адрес из среды выполнения
Инжектируйте PROXY_URL через секретный менеджер. Он должен содержать сгенерированный протокол, Host, Port, Username и Password. Не печатайте его.
Шаг 2: Присоедините его к запросу
import os
import scrapy
classIpCheckSpider(scrapy.Spider): name ="ip_check"defstart_requests(self):yield scrapy.Request("https://api.ipapi.is/", meta={"proxy": os.environ["PROXY_URL"]}, callback=self.parse, dont_filter=True,)defparse(self, response): self.logger.info("status=%s url=%s", response.status, response.url)yield{"status": response.status,"body_sample": response.text[:200]}
Документация Nstdata использует конечную точку проверки IP для инспекции выхода. Пример тела может раскрыть местоположение, поэтому обрабатывайте его как диагностические данные и удаляйте из производственных логов, если это не нужно.
Шаг 3: Проверьте маршрут
Запустите scrapy crawl ip_check -O ip-check.json в вашей авторизованной среде. Проверьте наблюдаемый выходной IP и регион. Убедитесь, что запрос использовал задействованный канал, не раскрывая учетные данные.
Метод 2: Как настроить прокси на уровне проекта?
Прокси-сервер на уровне проекта работает, когда каждый запрос должен использовать один и тот же маршрут и нет исключений для каждого запроса.
Шаг 1: Установите переменные окружения
Установите https_proxy, а при необходимости и http_proxy на сгенерированный URL-адрес прокси через инъекцию секретов задачи. Избегайте зафиксированного файла .env, содержащего учетные данные.
Шаг 2: Оставьте включенной встроенную промежуточную программу
Scrapy по умолчанию включает HttpProxyMiddleware в своих стандартных настройках. Не заменяйте DOWNLOADER_MIDDLEWARES_BASE; пользовательские записи должны находиться в DOWNLOADER_MIDDLEWARES. Официальная справка по промежуточным программам документирует модель активации и порядка.
Шаг 3: Проверьте наличие переопределений для каждого запроса
Запрос паука с meta["proxy"] переопределяет маршрут окружения. Запишите, какая политика активна в вашей конфигурации задания. Если задание смешивает проксированные и прямые запросы, явная настройка для каждого запроса проще для аудита.
Метод 3: Как вращать прокси в специальной промежуточной программе?
Пользовательское промежуточное программное обеспечение загрузчика может выбирать из ограниченного списка уже сгенерированных, одобренных URL-адресов прокси. Он не должен выдумывать имена пользователей поставщиков или создавать неограниченные сессии.
Шаг 1: Храните одобренные маршруты как секреты
Вставьте массив JSON в PROXY_URLS_JSON. Каждый элемент должен быть полным сгенерированным URL для разрешенного маршрута. В производстве предпочтите хранение секретов, а не простой дамп переменных окружения.
Шаг 2: Добавьте промежуточное программное обеспечение выбора
import itertools
import json
import os
classProxySelectionMiddleware:def__init__(self): routes = json.loads(os.environ["PROXY_URLS_JSON"])ifnot routes:raise ValueError("PROXY_URLS_JSON must contain a route") self.routes = itertools.cycle(routes)defprocess_request(self, request, spider):if request.meta.get("keep_proxy"):returnNone request.meta["proxy"]=next(self.routes)returnNone
Настройте его перед встроенным промежуточным программным обеспечением прокси Scrapy:
Промежуточное программное обеспечение выбирает маршрут, в то время как встроенный обработчик Scrapy выполняет подключение к прокси. Этот код иллюстративен и требует фактического проекта, маршрутов и авторизованной цели для выполнения.
Шаг 3: Сохраняйте состояния сессий и проверяйте повторы
Для цепочки запросов, которая должна сохранять один и тот же выход, передайте meta={"proxy": existing_url, "keep_proxy": True} для последующих запросов. Подтвердите политику временной сессии поставщика отдельно. Документация RetryMiddleware Scrapy перечисляет временные коды ответов и ограниченный бюджет повторных попыток; повторная попытка может снова попасть в ваше промежуточное программное обеспечение выбора. Решите, должна ли повторная попытка сохранять или изменять маршрут, затем протестируйте это поведение с контролируемой фикстурой. Никогда не используйте ротацию, чтобы игнорировать политику доступа цели.
Почему прокси Scrapy не работают или неожиданно ротация?
Прокси Scrapy могут не работать из-за неправильных учетных данных шлюза, приоритета промежуточного программного обеспечения, неподдерживаемых протоколов или ответов цели. Прокси 407 указывает на аутентификацию или состояние канала. Ошибка соединения указывает на хост, порт, исходный файервол или несоответствие протокола. Цель 403 или 429 требует проверки политики источника и скорости. 200 с вызовом страницы — это сбой контента, а не успешная извлечение. Руководство по устранению неполадок Nstdata охватывает 407 и проблемы с подключением.
Если ротация кажется неожиданной, ведите журнал редактированного идентификатора маршрута и идентификатора сессии для каждого запроса. Проверьте, запускается ли process_request снова при повторах, потерял ли последующий запрос keep_proxy и истек ли срок действия временной сессии поставщика. Статистика Scrapy должна различать попытки запросов, сбои прокси, ошибки целей и принятые элементы. Храните принятые элементы с исходным URL и временем запроса, чтобы изменение IP не скрывало повторяющееся получение.
Какую настройку вы должны использовать?
Используйте meta["proxy"] за запрос для явной маршрутизации, переменные окружения для единого задания и пользовательское промежуточное программное обеспечение, когда вам нужна проверенная политика выбора. Начните с одного запроса проверки IP, затем с небольшого авторизованного паука. Держите повторные попытки и валидацию контента отдельно от назначения маршрута.
Прокси Nstdata предоставляет сетевой маршрут; Менеджер прокси Nstdata может централизовать пулы и диагностику для нескольких заданий. Если вам нужно управляемое обнаружение сайтов и конверсия страниц, а не самостоятельно управляемый конвейер Scrapy, Nstdata Crawl — это отдельный Web Crawling API для данных, готовых к LLM.
В: Нужен ли мне пользовательский промежуточное программное обеспечение для одного прокси?
Нет. Установите Request.meta["proxy"] или стандартную переменную окружения прокси; встроенное промежуточное программное обеспечение Scrapy обрабатывает маршрут.
В: Переписывает ли meta["proxy"] переменные окружения прокси?
Да. Scrapy документирует, что прокси на уровне запроса имеет приоритет и игнорирует no_proxy.
В: Должен ли я повторять попытки HTTP 407?
Нет. Рассматривайте 407 как ошибку аутентификации или конфигурации канала, пока причина не будет исправлена.
Вопрос: Поддерживает ли каждый обработчик загрузки Scrapy SOCKS5?
Нет. Проверьте документацию текущего обработчика; поддержка встроенного прокси-программного обеспечения зависит от обработчика загрузки.
Вопрос: Может ли код работать без учетных данных Nstdata?
Синтаксис Scrapy можно просмотреть локально, но тест маршрута Nstdata в реальном времени требует канала и сгенерированных учетных данных прокси.
Сравните аутентификацию с использованием прокси username-password и IP-адресов в белом списке, настройте каждый метод, диагностируйте ошибки 407 и выберите безопасный рабочий процесс Nstdata.
Kai Watanabe
Nov. 5th 2026
Более 110 млн реальных IP с успешностью доступа 99,9%
Среднее время ответа ~0,5 с для задач с высокой параллельностью
Всего от $0.1/GB
Получите мгновенный доступ к премиальным пулам резидентных, серверных, IPv6- и ISP-прокси.