Hoe om proxy's in Python Scrapy op te stel en te roteer
Updated:
Scrapy se asinchroniese Twisted-enjin sluit 'n ingeboude HttpProxyMiddleware (teen prioriteit 750) in wat http://user:pass@ip:port-stringe ontleed wat aan request.meta['proxy'] toegeken is. Deur 'n pasgemaakte Downloader Middleware van 10 reëls teen prioriteit 740 te skryf, kan jou spiders outomaties oor 'n poel van onbeperkte VinaProxy statiese IP's roteer.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP₫40 000
- 5+ IP's₫35 000
- 10+ IP's₫25 000
- 20+ IP's₫25 000
- 50+ IP's₫25 000
- 100+ IP's₫25 000
- 200+ IP's₫25 000
- 500+ IP's₫25 000
- 1000+ IP's₫22 000
- 2000+ IP's₫20 000
- 1 IP₫40 000
- 5+ IP's₫35 000
- 10+ IP's₫25 000
- 20+ IP's₫25 000
- 50+ IP's₫25 000
- 100+ IP's₫25 000
- 200+ IP's₫25 000
- 500+ IP's₫25 000
- 1000+ IP's₫22 000
- 2000+ IP's₫20 000
Scrapy-proxy-middleware-volgorde en gelyktydigheidinstellings
Aangesien HttpProxyMiddleware teen volgorde 750 loop om user:pass van die proxy-URL te verwyder en die Proxy-Authorization-opskrif te enkodeer, moet enige pasgemaakte middleware wat request.meta['proxy'] stel teen 'n laer nommer loop (bv. 740):
| Scrapy-instelling | Aanbevole waarde | Doel |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Stuur die versoek deur die gespesifiseerde VinaProxy-proxy |
| Middleware-prioriteit | 740 (voor 750) | Verseker dat HttpProxyMiddleware die user:pass-opskrif enkodeer |
CONCURRENT_REQUESTS_PER_IP | 2 tot 4 | Beperk gelyktydige sokke per proxy-IP om HTTP 429 te vermy |
AUTOTHROTTLE_ENABLED | True | Pas kruipvertraging dinamies aan op grond van teikenvertraging |
Beste praktyke vir hoëvolume Scrapy-kruiptake
- Laai jou VinaProxy-proxilys in
from_crawler()en kenrequest.meta['proxy'] = random.choice(self.proxies)binneprocess_request()toe - Aktiveer
RANDOMIZE_DOWNLOAD_DELAY = Truesaam metDOWNLOAD_DELAY = 1.0sodat versoekintervalle per IP nooit roboties lyk nie - Kies tydens 'n herpoging (
429of503) 'n ander proxy uit jou poel voordat die versoek weer in die tou geplaas word
Stap vir stap
- 1
Formateer jou proxypoel as http://user:pass@ip:port
Plak jou VinaProxy-lys in ons Proxy Format Converter om URL-stringe te kry.
- 2
Skep 'n ProxyPoolMiddleware in middlewares.py
Definieer
process_request(self, request, spider)omrequest.meta['proxy'] = random.choice(self.proxies)in te stel. - 3
Registreer teen prioriteit 740 in settings.py
Voeg
'myproject.middlewares.ProxyPoolMiddleware': 740onderDOWNLOADER_MIDDLEWARESby en stelCONCURRENT_REQUESTS_PER_IP = 2. - 4
Toets met scrapy shell of scrapy crawl
Voer 'n toetsversoek teen
https://vinaproxy.com/api/my-ipuit om rotasie en verifikasie te bevestig.
Gereelde vrae
Waarom het my pasgemaakte Scrapy-proxy-middleware misluk toe dit op prioriteit 800 gestel is?
Scrapy se ingeboude HttpProxyMiddleware loop teen prioriteit 750. As jou middleware teen 800 (ná 750) loop, word die ingeboude user:pass-aanmeldinligting nooit na 'n Proxy-Authorization-opskrif omgeskakel nie. Stel altyd jou middleware-prioriteit laer as 750 (soos 740).
Hou Scrapy volgehoue verbindings oop na elke proxy?
Ja. Twisted se verbindingspoel onderhou volgehoue keep-alive-verbindings per proxy-eindpunt.
Is VinaProxy-proxy's onbeperk vir Scrapy-take met miljoene bladsye?
Ja. Alle Dedicated IPv4- en Static ISP-pakkette sluit onbeperkte maandelikse bandwydte in.
Skaal jou Scrapy-spiders met onbeperkte statiese IP-poele
Onmiddellike grootmaat Dedicated IPv4- en Static ISP-proxy's oor 7 lande.
Koop Scrapy-proxy's