Как да настроите и ротирате проксита в 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+ IP адреса35 000 VND
- 10+ IP адреса25 000 VND
- 20+ IP адреса25 000 VND
- 50+ IP адреса25 000 VND
- 100+ IP адреса25 000 VND
- 200+ IP адреса25 000 VND
- 500+ IP адреса25 000 VND
- 1000+ IP адреса22 000 VND
- 2000+ IP адреса20 000 VND
- 1 IP40 000 VND
- 5+ IP адреса35 000 VND
- 10+ IP адреса25 000 VND
- 20+ IP адреса25 000 VND
- 50+ IP адреса25 000 VND
- 100+ IP адреса25 000 VND
- 200+ IP адреса25 000 VND
- 500+ IP адреса25 000 VND
- 1000+ IP адреса22 000 VND
- 2000+ IP адреса20 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 в нашия Proxy Format Converter, за да получите 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, за да проверите ротацията и автентикацията.
Често задавани въпроси
Защо персонализираният ми Scrapy proxy middleware даде грешка при приоритет 800?
Вграденият HttpProxyMiddleware на Scrapy работи с приоритет 750. Ако вашият middleware работи с 800 (след 750), вградените идентификационни данни user:pass никога няма да бъдат преобразувани в заглавна част Proxy-Authorization. Винаги задавайте приоритет на вашия middleware под 750 (например 740).
Поддържа ли Scrapy постоянни отворени връзки към всяко прокси?
Да. Пулът от връзки на Twisted поддържа постоянни keep-alive връзки към всяка крайна точка на прокси.
Неограничени ли са VinaProxy прокситата за Scrapy задачи с милиони страници?
Да. Всички планове за Dedicated IPv4 и Static ISP включват неограничен месечен трафик.
Мащабирайте вашите Scrapy спайдъри с неограничени пулове от статични IP адреси
Моментални пакети от Dedicated IPv4 и Static ISP проксита в 7 държави.
Купете Scrapy проксита