Як налаштувати та ротувати проксі в Python Scrapy
Updated:
Асинхронний рушій Twisted у Scrapy містить вбудований HttpProxyMiddleware (із пріоритетом 750), який аналізує рядки http://user:pass@ip:port, передані в request.meta['proxy']. Власний Downloader Middleware на 10 рядків із пріоритетом 740 дозволяє вашим павукам автоматично ротувати пул безлімітних статичних IP VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
Порядок middleware для проксі у Scrapy та налаштування паралелізму
Оскільки HttpProxyMiddleware виконується з порядком 750, щоб вилучити user:pass з URL-адреси проксі та закодувати заголовок Proxy-Authorization, будь-який власний middleware, що встановлює request.meta['proxy'], повинен мати менший номер (наприклад, 740):
| Налаштування Scrapy | Рекомендоване значення | Призначення |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Спрямовує запит через указаний проксі VinaProxy |
| Пріоритет Middleware | 740 (до 750) | Гарантує, що HttpProxyMiddleware закодує заголовок user:pass |
CONCURRENT_REQUESTS_PER_IP | Від 2 до 4 | Обмежує кількість одночасних сокетів на один IP проксі, щоб уникнути HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Динамічно адаптує затримку сканування залежно від затримки цільового сервера |
Найкращі практики для масштабного збору даних у Scrapy
- Завантажуйте список проксі VinaProxy у
from_crawler()і призначайтеrequest.meta['proxy'] = random.choice(self.proxies)усерединіprocess_request() - Увімкніть
RANDOMIZE_DOWNLOAD_DELAY = Trueразом ізDOWNLOAD_DELAY = 1.0, щоб інтервали між запитами для кожного IP не виглядали роботизовано - Під час повторної спроби (
429або503) виберіть інший проксі зі свого пулу перед повторним додаванням запиту в чергу
Покроково
- 1
Відформатуйте свій пул проксі як http://user:pass@ip:port
Вставте свій список VinaProxy у наш Конвертер форматів проксі, щоб отримати рядки URL.
- 2
Створіть ProxyPoolMiddleware у middlewares.py
Визначте
process_request(self, request, spider), щоб задатиrequest.meta['proxy'] = random.choice(self.proxies). - 3
Зареєструйте з пріоритетом 740 у settings.py
Додайте
'myproject.middlewares.ProxyPoolMiddleware': 740уDOWNLOADER_MIDDLEWARESі встановітьCONCURRENT_REQUESTS_PER_IP = 2. - 4
Протестуйте через scrapy shell або scrapy crawl
Виконайте тестовий запит до
https://vinaproxy.com/api/my-ip, щоб перевірити ротацію та автентифікацію.
Часті запитання
Чому мій власний middleware проксі у Scrapy не спрацював із пріоритетом 800?
Вбудований HttpProxyMiddleware у Scrapy виконується з пріоритетом 750. Якщо ваш middleware запускається з пріоритетом 800 (після 750), облікові дані user:pass із рядка URL не перетворюються на заголовок Proxy-Authorization. Завжди встановлюйте пріоритет вашого middleware нижче за 750 (наприклад, 740).
Чи підтримує Scrapy постійні з'єднання відкритими для кожного проксі?
Так. Пул з'єднань Twisted підтримує постійні з'єднання keep-alive для кожного кінцевого вузла проксі.
Чи є проксі VinaProxy безлімітними для завдань Scrapy на мільйони сторінок?
Так. Усі тарифи Dedicated IPv4 та Static ISP містять необмежений щомісячний трафік.
Масштабуйте своїх павуків Scrapy з безлімітними пулами статичних IP
Миттєва масова видача проксі Dedicated IPv4 та Static ISP у 7 країнах.
Купити проксі для Scrapy