Как использовать proxy со Scrapy: полное руководство
Узнайте, как настроить GProxy residential и datacenter proxy с Scrapy для крупномасштабного web scraping. Рассматриваются настройка middleware, rotation proxy и обработка ошибок.
Что вам понадобится
- ✓Установленный Python 3.8+
- ✓Установленный Scrapy 2.x (pip install scrapy)
- ✓Аккаунт GProxy с активным proxy планом
- ✓Базовое знакомство со Scrapy spiders и settings
Пошаговая настройка
Установка Scrapy
Установите Scrapy и создайте новый проект
pip install scrapy
scrapy startproject myproject
cd myproject
Настройка proxy в settings.py
Добавьте настройки proxy в файл settings.py вашего проекта
# settings.py
HTTPPROXY_ENABLED = True
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.GProxyMiddleware': 350,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
}
Создание 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
Добавление поддержки ротации
Для автоматической ротации 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
Настройка параметров retry
Добавьте конфигурацию retry для надежности
# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503]
DOWNLOAD_TIMEOUT = 30
Запуск вашего паука
Протестируйте конфигурацию proxy
scrapy crawl myspider -o output.json
Примеры кода
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']}
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
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.
AUTOTHROTTLE_ENABLED = True для автоматической настройки частоты запросов. Установите CONCURRENT_REQUESTS_PER_DOMAIN, чтобы ограничить нагрузку на конкретный сайт. Включите HTTP кэширование во время разработки, чтобы не тратить трафик proxy. Используйте пакет scrapy-rotating-proxies для продвинутого управления пулом.FAQ
Поддерживает ли Scrapy SOCKS5 прокси? +
Сколько параллельных запросов я могу запускать? +
Могу ли я использовать sticky sessions в Scrapy? +
Как мне обрабатывать CAPTCHAs? +
Готовы попробовать?
Начните с GProxy за минуты — резидентные прокси от $0.85/GB, IPv6 от $0.03/прокси, оплата по факту использования.
