Як використовувати Proxy з Scrapy: повний посібник
Дізнайтеся, як налаштувати GProxy residential та datacenter proxy з Scrapy для масштабного web scraping. Охоплює налаштування middleware, proxy rotation та error handling.
Що вам знадобиться
- ✓Встановлено 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 для надійності
# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503]
DOWNLOAD_TIMEOUT = 30
Запустіть ваш spider
Протестуйте конфігурацію 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 та обмеженнями частоти запитів (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? +
Скільки одночасних запитів я можу запускати? +
Чи можу я використовувати sticky sessions зі Scrapy? +
Як мені обробляти CAPTCHAs? +
Готові спробувати?
Почніть з GProxy за хвилини — резидентні проксі від $0.85/GB, IPv6 від $0.03/проксі, оплата за використання.
