Како да поставите и ротирате проксија во 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
Редослед на 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?
Вградениот 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 проксија