Перейти к содержимому

Как использовать proxy со Scrapy: полное руководство

TL;DR

Узнайте, как настроить GProxy residential и datacenter proxy с Scrapy для крупномасштабного web scraping. Рассматриваются настройка middleware, rotation proxy и обработка ошибок.

Язык: Python

Что вам понадобится

  • Установленный Python 3.8+
  • Установленный Scrapy 2.x (pip install scrapy)
  • Аккаунт GProxy с активным proxy планом
  • Базовое знакомство со Scrapy spiders и settings

Пошаговая настройка

1

Установка Scrapy

Установите Scrapy и создайте новый проект

pip install scrapy
scrapy startproject myproject
cd myproject
2

Настройка proxy в settings.py

Добавьте настройки proxy в файл settings.py вашего проекта

# settings.py
HTTPPROXY_ENABLED = True
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.GProxyMiddleware': 350,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
}
3

Создание middleware для proxy

Создайте кастомный middleware в файле middlewares.py

class GProxyMiddleware:
    def process_request(self, request, spider):
        proxy = 'http://USER:PASS@proxy.gproxy.net:1000'
        request.meta['proxy'] = proxy
4

Добавление поддержки ротации

Для автоматической ротации IP используйте backconnect endpoint

class GProxyRotatingMiddleware:
    def process_request(self, request, spider):
        request.meta['proxy'] = 'http://USER-country-us:PASS@proxy.gproxy.net:1000'
    
    def process_exception(self, request, exception, spider):
        return request  # retry with new IP
5

Настройка параметров retry

Добавьте конфигурацию retry для надежности

# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503]
DOWNLOAD_TIMEOUT = 30
6

Запуск вашего паука

Протестируйте конфигурацию proxy

scrapy crawl myspider -o output.json

Примеры кода

Базовый Scrapy Spider с GProxy · python
import scrapy

class ProxySpider(scrapy.Spider):
    name = 'proxy_spider'
    start_urls = ['https://httpbin.org/ip']

    custom_settings = {
        'DOWNLOADER_MIDDLEWARES': {
            'myproject.middlewares.GProxyMiddleware': 350,
        },
        'CONCURRENT_REQUESTS': 32,
        'DOWNLOAD_DELAY': 0.5,
        'DOWNLOAD_TIMEOUT': 30,
    }

    def parse(self, response):
        yield {'ip': response.json()['origin']}
Полный Middleware для ротации proxy · python
import logging

logger = logging.getLogger(__name__)

class GProxyMiddleware:
    PROXY_URL = 'http://USER:PASS@proxy.gproxy.net:1000'

    @classmethod
    def from_crawler(cls, crawler):
        return cls()

    def process_request(self, request, spider):
        request.meta['proxy'] = self.PROXY_URL
        request.headers.pop('Proxy-Authorization', None)

    def process_response(self, request, response, spider):
        if response.status in [403, 407, 429]:
            logger.warning(f'Proxy error {response.status} for {request.url}')
            return request
        return response

    def process_exception(self, request, exception, spider):
        logger.error(f'Proxy exception: {exception}')
        return request
Spider с гео-таргетингом · python
import scrapy

class GeoSpider(scrapy.Spider):
    name = 'geo_spider'
    
    custom_settings = {
        'CONCURRENT_REQUESTS': 16,
    }

    def start_requests(self):
        countries = ['us', 'de', 'gb', 'fr', 'jp']
        for country in countries:
            proxy = f'http://USER-country-{country}:PASS@proxy.gproxy.net:1000'
            yield scrapy.Request(
                url='https://httpbin.org/ip',
                meta={'proxy': proxy},
                cb_kwargs={'country': country},
            )

    def parse(self, response, country):
        yield {
            'country': country,
            'ip': response.json()['origin'],
        }

Почему стоит использовать proxy с Scrapy?

Scrapy — это самый популярный Python фреймворк для веб-скрейпинга, обеспечивающий работу миллионов задач по сканированию ежедневно. При скрейпинге в больших масштабах вы неизбежно столкнетесь с блокировками IP, CAPTCHA и ограничениями частоты запросов. Пул резидентных proxy GProxy, насчитывающий более 10M+ IP в 150+ странах, решает эти проблемы путем автоматической ротации вашего исходящего IP.

Методы аутентификации proxy

GProxy поддерживает два метода аутентификации в Scrapy: аутентификация по логину/паролю через proxy URL и аутентификация по IP whitelist, где вы добавляете IP вашего сервера в панель управления GProxy. Оба метода бесперебойно работают со встроенной поддержкой proxy в Scrapy.

Базовая конфигурация proxy

Самый простой способ добавить proxy GProxy в Scrapy — через файл settings.py. Установите переменные окружения HTTP_PROXY и HTTPS_PROXY или настройте их напрямую в пользовательских настройках вашего паука. Для ротации proxy рекомендуется использовать кастомный downloader middleware, который назначает новый proxy URL для каждого запроса.

Кастомный Middleware для ротации proxy

Для промышленного скрейпинга кастомный middleware дает полный контроль над назначением proxy. Middleware перехватывает каждый запрос перед отправкой, назначает эндпоинт proxy с параметрами ротации и обрабатывает ошибки, связанные с proxy, такие как тайм-ауты или ошибки аутентификации 407. Эндпоинт backconnect от GProxy выполняет ротацию на стороне сервера, поэтому каждое соединение через один и тот же эндпоинт получает разный IP.

Обработка ошибок и повторные попытки

Надежный скрейпинг требует правильной обработки ошибок. Настройте retry middleware в Scrapy для работы с вашей конфигурацией proxy: выполняйте повторные попытки при кодах состояния 403, 407, 429 и 503, и установите разумное количество повторов (3-5 попыток). Sticky sessions в GProxy позволяют сохранять один и тот же IP при повторных попытках, когда это необходимо — это полезно для многостраничных сценариев.

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

Scrapy отлично справляется с параллельным скрейпингом, а инфраструктура GProxy хорошо выдерживает высокую нагрузку. Начните с CONCURRENT_REQUESTS = 32 и DOWNLOAD_DELAY = 0.5, затем корректируйте значения в зависимости от поведения целевого сайта. С резидентными proxy GProxy вы обычно можете выполнять 50-100 параллельных запросов без проблем.

Geo-targeting в Scrapy

GProxy поддерживает таргетинг на уровне стран и городов. Передайте целевую страну как часть ваших учетных данных proxy (например, user-country-us), чтобы направлять запросы через IP в этой локации. Это необходимо для скрейпинга контента с географическими ограничениями или локализованных результатов поиска.

Сценарии применения

E-commerce Price Monitoring

Мониторинг цен на товары у различных ритейлеров с использованием гео-таргетированных proxy для просмотра локализованных цен.

SERP Tracking

Отслеживание рейтинга в поисковых системах из разных локаций с использованием резидентских IP конкретных стран.

Lead Generation

Извлечение списков компаний и контактных данных в больших масштабах с использованием ротируемых IP для предотвращения обнаружения.

Content Aggregation

Сбор статей, отзывов и объявлений из множества источников с надежной ротацией proxy.

Pro советы
Используйте AUTOTHROTTLE_ENABLED = True для автоматической настройки частоты запросов. Установите CONCURRENT_REQUESTS_PER_DOMAIN, чтобы ограничить нагрузку на конкретный сайт. Включите HTTP кэширование во время разработки, чтобы не тратить трафик proxy. Используйте пакет scrapy-rotating-proxies для продвинутого управления пулом.

FAQ

Поддерживает ли Scrapy SOCKS5 прокси? +
Scrapy не поддерживает SOCKS5 нативно. Используйте HTTP/HTTPS эндпоинты GProxy вместо этого или установите scrapy-splash или pysocks для поддержки SOCKS5.
Сколько параллельных запросов я могу запускать? +
GProxy отлично справляется с высокой конкурентностью. Начните с 32 параллельных запросов и увеличивайте до 100+ в зависимости от вашего тарифного плана и целевого сайта.
Могу ли я использовать sticky sessions в Scrapy? +
Да. Используйте параметр session в GProxy proxy URL, чтобы сохранять один и тот же IP для нескольких запросов — это полезно для процессов логина или пагинации.
Как мне обрабатывать CAPTCHAs? +
Резидентные IP от GProxy значительно снижают частоту появления CAPTCHAs. Для оставшихся CAPTCHAs интегрируйте сервис решения или увеличьте частоту ротации.

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

Начните с GProxy за минуты — резидентные прокси от $0.85/GB, IPv6 от $0.03/прокси, оплата по факту использования.

Другие интеграции

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.