Kako podesiti i rotirati proxyje u Python Scrapyju
Updated:
Scrapyjev asinhroni Twisted engine uključuje ugrađeni HttpProxyMiddleware (na prioritetu 750) koji parsira http://user:pass@ip:port stringove dodijeljene u request.meta['proxy']. Pisanje prilagođenog Downloader Middlewarea od 10 linija koda na prioritetu 740 omogućava vašim spiderima da automatski rotiraju kroz pool neograničenih VinaProxy statičkih IP adresa.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IP-ova35.000 ₫
- 10+ IP-ova25.000 ₫
- 20+ IP-ova25.000 ₫
- 50+ IP-ova25.000 ₫
- 100+ IP-ova25.000 ₫
- 200+ IP-ova25.000 ₫
- 500+ IP-ova25.000 ₫
- 1000+ IP-ova22.000 ₫
- 2000+ IP-ova20.000 ₫
- 1 IP40.000 ₫
- 5+ IP-ova35.000 ₫
- 10+ IP-ova25.000 ₫
- 20+ IP-ova25.000 ₫
- 50+ IP-ova25.000 ₫
- 100+ IP-ova25.000 ₫
- 200+ IP-ova25.000 ₫
- 500+ IP-ova25.000 ₫
- 1000+ IP-ova22.000 ₫
- 2000+ IP-ova20.000 ₫
Redoslijed Scrapy proxy middlewarea i postavke konkurentnosti
Budući da se HttpProxyMiddleware izvršava pod rednim brojem 750 kako bi uklonio user:pass iz proxy URL-a i enkodirao Proxy-Authorization zaglavlje, svaki prilagođeni middleware koji postavlja request.meta['proxy'] mora se izvršavati pod manjim brojem (npr. 740):
| Scrapy postavka | Preporučena vrijednost | Svrha |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Usmjerava zahtjev kroz navedeni VinaProxy proxy |
| Prioritet middlewarea | 740 (prije 750) | Osigurava da HttpProxyMiddleware enkodira user:pass zaglavlje |
CONCURRENT_REQUESTS_PER_IP | 2 do 4 | Ograničava istovremene sockete po proxy IP-u kako bi se izbjegao HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dinamički prilagođava odgodu puzanja na osnovu ciljane latencije |
Najbolje prakse za Scrapy puzanja velikog obima
- Učitajte svoju VinaProxy proxy listu u
from_crawler()i dodijeliterequest.meta['proxy'] = random.choice(self.proxies)unutarprocess_request() - Omogućite
RANDOMIZE_DOWNLOAD_DELAY = TrueuzDOWNLOAD_DELAY = 1.0kako intervali zahtjeva po IP-u nikada ne bi izgledali robotski - Pri ponovnom pokušaju (
429ili503), odaberite drugi proxy iz svog poola prije ponovnog stavljanja zahtjeva u red čekanja
Korak po korak
- 1
Formatirajte svoj proxy pool kao http://user:pass@ip:port
Zalijepite svoju VinaProxy listu u naš Proxy Format Converter kako biste dobili URL stringove.
- 2
Kreirajte ProxyPoolMiddleware u middlewares.py
Definišite
process_request(self, request, spider)da postavirequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrujte na prioritetu 740 u settings.py
Dodajte
'myproject.middlewares.ProxyPoolMiddleware': 740podDOWNLOADER_MIDDLEWARESi postaviteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Testirajte pomoću scrapy shell ili scrapy crawl
Pokrenite testni zahtjev prema
https://vinaproxy.com/api/my-ipda potvrdite rotaciju i autentifikaciju.
Često postavljana pitanja
Zašto moj prilagođeni Scrapy proxy middleware nije uspio kada je postavljen na prioritet 800?
Scrapyjev ugrađeni HttpProxyMiddleware radi na prioritetu 750. Ako vaš middleware radi na 800 (nakon 750), ugrađeni user:pass pristupni podaci nikada se ne pretvaraju u Proxy-Authorization zaglavlje. Uvijek postavite prioritet svog middlewarea ispod 750 (kao što je 740).
Da li Scrapy drži perzistentne veze otvorenim prema svakom proxyju?
Da. Twistedov pool konekcija održava perzistentne keep-alive veze po svakoj proxy krajnjoj tački.
Da li su VinaProxy proxyji neograničeni za Scrapy poslove od više miliona stranica?
Da. Svi Dedicated IPv4 i Static ISP paketi uključuju neograničen mjesečni protok.
Skalirajte svoje Scrapy spidere uz neograničene poolove statičkih IP adresa
Trenutni bulk Dedicated IPv4 i Static ISP proxyji u 7 zemalja.
Kupite Scrapy proxyje