Jak nastavit a rotovat proxy v Python Scrapy
Updated:
Asynchronní jádro Twisted frameworku Scrapy obsahuje vestavěný HttpProxyMiddleware (s prioritou 750), který zpracovává řetězce http://user:pass@ip:port přiřazené do request.meta['proxy']. Vytvoření vlastního 10řádkového Downloader Middleware s prioritou 740 umožní vašim spiderům automaticky rotovat v rámci poolu neomezených statických IP adres 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
Pořadí proxy middleware a nastavení souběhu ve Scrapy
Protože HttpProxyMiddleware běží s prioritou 750, aby odstranil user:pass z URL proxy a zakódoval hlavičku Proxy-Authorization, jakýkoli vlastní middleware nastavující request.meta['proxy'] musí běžet s nižším číslem (např. 740):
| Nastavení Scrapy | Doporučená hodnota | Účel |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Směruje požadavek přes zadanou VinaProxy proxy |
| Priorita middleware | 740 (před 750) | Zajišťuje, že HttpProxyMiddleware zakóduje hlavičku user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 až 4 | Omezuje počet současných socketů na IP adresu proxy, aby se předešlo chybě HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dynamicky přizpůsobuje zpoždění crawlera na základě latence cíle |
Osvědčené postupy pro rozsáhlý crawling ve Scrapy
- Načtěte seznam proxy od VinaProxy v metodě
from_crawler()a přiřaďterequest.meta['proxy'] = random.choice(self.proxies)uvnitřprocess_request() - Povolte
RANDOMIZE_DOWNLOAD_DELAY = Truespolečně sDOWNLOAD_DELAY = 1.0, aby intervaly požadavků pro každou IP adresu nepůsobily roboticky - Při opakovaném pokusu (
429nebo503) vyberte před opětovným zařazením požadavku do fronty jinou proxy ze svého poolu
Krok za krokem
- 1
Naformátujte svůj pool proxy jako http://user:pass@ip:port
Vložte svůj seznam od VinaProxy do našeho nástroje Proxy Format Converter a získejte řetězce URL.
- 2
Vytvořte ProxyPoolMiddleware v middlewares.py
Definujte
process_request(self, request, spider)pro nastavenírequest.meta['proxy'] = random.choice(self.proxies). - 3
Zaregistrujte middleware s prioritou 740 v settings.py
Přidejte
'myproject.middlewares.ProxyPoolMiddleware': 740podDOWNLOADER_MIDDLEWARESa nastavteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Otestujte pomocí scrapy shell nebo scrapy crawl
Spusťte testovací požadavek na
https://vinaproxy.com/api/my-ippro ověření rotace a autentizace.
Často kladené otázky
Proč můj vlastní proxy middleware ve Scrapy selhal při nastavení priority 800?
Vestavěný HttpProxyMiddleware ve Scrapy běží s prioritou 750. Pokud váš middleware běží s prioritou 800 (tedy až po 750), přihlašovací údaje user:pass v URL se nikdy nepřevádějí na hlavičku Proxy-Authorization. Vždy nastavte prioritu svého middleware pod 750 (například na 740).
Udržuje Scrapy otevřená trvalá připojení ke každé proxy?
Ano. Connection pool v Twisted udržuje trvalá keep-alive spojení pro každý koncový bod proxy.
Jsou proxy od VinaProxy neomezené pro scrapování milionů stránek ve Scrapy?
Ano. Všechny tarify Dedicated IPv4 a Static ISP zahrnují neomezený měsíční přenos dat.
Škálujte své Scrapy spidery s neomezenými pooly statických IP
Okamžitý hromadný odběr Dedicated IPv4 a Static ISP proxy ze 7 zemí.
Koupit proxy pro Scrapy