Перейти к основному содержанию
Scrapy - мощный фреймворк для масштабного парсинга. Лучший способ управления прокси в Scrapy - использовать кастомный Downloader Middleware. Это позволяет централизовать логику прокси и держать пауков чистыми.

Шаг 1: Создайте Proxy Middleware

Сначала создадим middleware, который будет прикреплять учётные данные прокси к каждому запросу.
  1. В вашем проекте Scrapy откройте файл middlewares.py.
  2. Добавьте следующий класс. Он считывает учётные данные из settings.py и легко расширяется для работы с динамическими параметрами.
middlewares.py
Это продвинутое middleware позволяет передавать динамические параметры (например, -country-de) из паука в middleware с помощью request.meta['proxy_username_params'].

Шаг 2: Настройте settings.py

Теперь включим middleware и добавим ваши учётные данные.
  1. Откройте файл settings.py.
  2. Добавьте базовые учётные данные прокси.
  3. Включите ScrapyCatproxyProxyMiddleware в DOWNLOADER_MIDDLEWARES.
settings.py
Ваша базовая настройка завершена! Любой запрос от любого паука в вашем проекте теперь будет автоматически использовать прокси Catproxy.

Практический пример: Парсинг спецпредложений Steam

Теперь используем созданное middleware для парсинга всех игр со скидками из магазина Steam. Этот паук стал намного чище, поскольку вся логика прокси находится в middleware.

Паук (steam_specials_spider.py)

Обратите внимание, насколько чист этот паук. Он сосредоточен исключительно на логике парсинга и передаче динамических параметров в middleware.
spiders/steam_specials_spider.py
CSS-селекторы могут меняться! Такие сайты, как Steam, часто обновляют дизайн. CSS-селекторы в этом примере актуальны на момент написания, но в будущем может потребоваться их обновление.

Что демонстрирует этот пример

  • Лучшая практика: Паук чист и сфокусирован на том, что парсить. Middleware обрабатывает, как подключиться. Это надёжный и масштабируемый подход.
  • Динамическое управление: Паук может легко изменить геолокацию или сессию для любого запроса, просто изменив значение proxy_username_params в словаре meta.
  • Переиспользование кода: ScrapyCatproxyProxyMiddleware теперь может использоваться всеми пауками в вашем проекте без дублирования кода.