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, определите, какой сервис отвечает, и следуйте его правилам доступа. Наш руководство по подключению для скрапинга объясняет разницу между аутентификацией, ответами целевого ресурса и ответственной обработкой повторных попыток.
Нет. В этом руководстве используется HTTP proxy middleware из Scrapy. Для конечной точки SOCKS нужен отдельно поддерживаемый транспорт или интеграция; простого изменения отображаемого названия протокола недостаточно.
Проверьте, как создаются эти последующие запросы. Задайте маршрут явно для каждого нужного запроса или реализуйте единую политику в middleware.
Откройте Proxyca, выберите тариф и доступную страну и используйте выданные эндпоинт и учётные данные. Открыть Proxyca в Telegram.