Ako nastaviť a rotovať proxy v Python Scrapy
Updated:
Asynchrónny engine Twisted v Scrapy obsahuje vstavaný HttpProxyMiddleware (s prioritou 750), ktorý spracováva reťazce http://user:pass@ip:port priradené k request.meta['proxy']. Vytvorenie vlastného 10-riadkového Downloader Middleware s prioritou 740 umožní vašim spiderom automaticky rotovať cez pool neobmedzených statických IP adries od 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
Poradie proxy middleware a nastavenia súbehu v Scrapy
Pretože HttpProxyMiddleware beží s prioritou 750, aby odstránil user:pass z URL proxy a zakódoval hlavičku Proxy-Authorization, akýkoľvek vlastný middleware nastavujúci request.meta['proxy'] musí bežať s nižším číslom (napr. 740):
| Nastavenie Scrapy | Odporúčaná hodnota | Účel |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Smeruje požiadavku cez zadanú VinaProxy proxy |
| Priorita middleware | 740 (pred 750) | Zabezpečuje, že HttpProxyMiddleware zakóduje hlavičku user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 až 4 | Obmedzuje počet súbežných socketov na proxy IP, aby sa predišlo HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dynamicky prispôsobuje oneskorenie prechádzania podľa latencie cieľa |
Osvedčené postupy pre veľkoobjemový crawling v Scrapy
- Načítajte zoznam svojich VinaProxy proxy v
from_crawler()a priraďterequest.meta['proxy'] = random.choice(self.proxies)vo vnútriprocess_request() - Povoľte
RANDOMIZE_DOWNLOAD_DELAY = Truespolu sDOWNLOAD_DELAY = 1.0, aby intervaly medzi požiadavkami z jednej IP nikdy nepôsobili roboticky - Pri opakovanom pokuse (
429alebo503) vyberte zo svojho poolu inú proxy pred opätovným zaradením požiadavky do frontu
Krok za krokom
- 1
Naformátujte svoj proxy pool ako http://user:pass@ip:port
Vložte svoj zoznam od VinaProxy do nášho nástroja Proxy Format Converter a získajte reťazce URL.
- 2
Vytvorte ProxyPoolMiddleware v middlewares.py
Definujte
process_request(self, request, spider), ktorý nastavírequest.meta['proxy'] = random.choice(self.proxies). - 3
Zaregistrujte middleware s prioritou 740 v settings.py
Pridajte
'myproject.middlewares.ProxyPoolMiddleware': 740podDOWNLOADER_MIDDLEWARESa nastavteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Otestujte pomocou scrapy shell alebo scrapy crawl
Spustite testovaciu požiadavku na
https://vinaproxy.com/api/my-ip, aby ste overili rotáciu a autentifikáciu.
Často kladené otázky
Prečo môj vlastný Scrapy proxy middleware zlyhal, keď mal nastavenú prioritu 800?
Vstavaný HttpProxyMiddleware v Scrapy beží s prioritou 750. Ak váš middleware beží s prioritou 800 (po 750), prihlasovacie údaje user:pass v URL sa nikdy neprekonvertujú na hlavičku Proxy-Authorization. Prioritu svojho middleware vždy nastavte na hodnotu nižšiu ako 750 (napríklad 740).
Udržiava Scrapy trvalé spojenia otvorené pre každú proxy?
Áno. Connection pool knižnice Twisted udržiava trvalé keep-alive spojenia pre každý proxy koncový bod.
Sú VinaProxy proxy neobmedzené pre úlohy v Scrapy s miliónmi stránok?
Áno. Všetky programy Dedicated IPv4 a Static ISP zahŕňajú neobmedzený mesačný prenos dát.
Škálujte svoje Scrapy spidery s neobmedzenými poolmi statických IP
Okamžité hromadné Dedicated IPv4 a Static ISP proxy v 7 krajinách.
Kúpiť Scrapy proxy