Перейти до вмісту

Як використовувати Proxy з Scrapy: повний посібник

TL;DR

Дізнайтеся, як налаштувати GProxy residential та datacenter proxy з Scrapy для масштабного web scraping. Охоплює налаштування middleware, proxy rotation та error handling.

Мова: 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 для надійності

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

Запустіть ваш spider

Протестуйте конфігурацію 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 та обмеженнями частоти запитів (rate limits). Пул резидентних proxy GProxy, що налічує 10M+ IP у 150+ країнах, вирішує ці проблеми шляхом автоматичної ротації вашої вихідної IP.

Методи автентифікації proxy

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

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

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

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

Для промислового скрапінгу кастомний middleware дає повний контроль над призначенням proxy. Middleware перехоплює кожен запит перед відправкою, призначає proxy endpoint із параметрами ротації та обробляє помилки, пов'язані з proxy, такі як таймаути або помилки автентифікації 407. Backconnect endpoint від GProxy виконує ротацію на стороні сервера, тому кожне з'єднання через той самий endpoint отримує іншу IP.

Обробка помилок та повторні спроби

Надійний скрапінг потребує правильної обробки помилок. Налаштуйте retry middleware у Scrapy для роботи з вашою конфігурацією proxy: виконуйте повторні спроби при кодах статусу 403, 407, 429 та 503, а також встановіть розумну кількість спроб (3-5 attempts). 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

Scrape цін на товари у різних ритейлерів за допомогою гео-таргетованих proxy для перегляду локалізованих цін.

Відстеження SERP

Моніторинг рейтингу в пошукових системах з різних локацій, використовуючи резидентські IP конкретних країн.

Генерація лідів

Витягування списків компаній та контактних даних у великих масштабах з ротацією IP для уникнення виявлення.

Агрегація контенту

Збір статей, відгуків та оголошень з багатьох джерел з надійною ротацією proxy.

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

FAQ

Чи підтримує Scrapy SOCKS5 proxy? +
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.