Како подесити и ротирати проксије у Python Scrapy
Updated:
Scrapy-јев асинхрони Twisted погон садржи уграђени HttpProxyMiddleware (са приоритетом 750) који рашчлањује http://user:pass@ip:port ниске додељене у request.meta['proxy']. Писање прилагођеног Downloader Middleware-а од 10 редова на приоритету 740 омогућава вашим пауцима да аутоматски ротирају кроз базен неограничених VinaProxy статичких IP адреса.
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
Редослед Scrapy прокси middleware-а и подешавања истовремености
Будући да се 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 прокси middleware није успео када је постављен на приоритет 800?
Scrapy-јев уграђени HttpProxyMiddleware ради на приоритету 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 проксије