Så konfigurerar och roterar du proxyer i Python Scrapy
Updated:
Scrapys asynkrona Twisted-motor innehåller en inbyggd HttpProxyMiddleware (med prioritet 750) som tolkar strängar i formatet http://user:pass@ip:port som tilldelats request.meta['proxy']. Genom att skriva en anpassad Downloader Middleware på 10 rader med prioritet 740 kan dina spindlar automatiskt rotera mellan en pool av obegränsade statiska VinaProxy-IP-adresser.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP:er35 000 VND
- 10+ IP:er25 000 VND
- 20+ IP:er25 000 VND
- 50+ IP:er25 000 VND
- 100+ IP:er25 000 VND
- 200+ IP:er25 000 VND
- 500+ IP:er25 000 VND
- 1000+ IP:er22 000 VND
- 2000+ IP:er20 000 VND
- 1 IP40 000 VND
- 5+ IP:er35 000 VND
- 10+ IP:er25 000 VND
- 20+ IP:er25 000 VND
- 50+ IP:er25 000 VND
- 100+ IP:er25 000 VND
- 200+ IP:er25 000 VND
- 500+ IP:er25 000 VND
- 1000+ IP:er22 000 VND
- 2000+ IP:er20 000 VND
Ordning för Scrapy-proxymiddleware och samtidighetsinställningar
Eftersom HttpProxyMiddleware körs med ordningsnummer 750 för att ta bort user:pass från proxy-URL:en och koda headern Proxy-Authorization, måste all anpassad middleware som ställer in request.meta['proxy'] köras med ett lägre nummer (t.ex. 740):
| Scrapy-inställning | Rekommenderat värde | Syfte |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Dirigerar förfrågan via den angivna VinaProxy-proxyn |
| Middleware-prioritet | 740 (före 750) | Säkerställer att HttpProxyMiddleware kodar headern user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 till 4 | Begränsar samtidiga sockets per proxy-IP för att undvika HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Anpassar crawl-fördröjningen dynamiskt baserat på målets latens |
Bästa praxis för storskalig webbskrapning med Scrapy
- Läs in din VinaProxy-proxylista i
from_crawler()och tilldelarequest.meta['proxy'] = random.choice(self.proxies)inutiprocess_request() - Aktivera
RANDOMIZE_DOWNLOAD_DELAY = Truetillsammans medDOWNLOAD_DELAY = 1.0så att förfrågningsintervallen per IP-adress aldrig framstår som robotaktiga - Vid nytt försök (
429eller503), välj en annan proxy från din pool innan förfrågan köas om
Steg för steg
- 1
Formatera din proxypool som http://user:pass@ip:port
Klistra in din VinaProxy-lista i vår Proxy Format Converter för att få URL-strängar.
- 2
Skapa en ProxyPoolMiddleware i middlewares.py
Definiera
process_request(self, request, spider)för att sättarequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrera med prioritet 740 i settings.py
Lägg till
'myproject.middlewares.ProxyPoolMiddleware': 740underDOWNLOADER_MIDDLEWARESoch ställ inCONCURRENT_REQUESTS_PER_IP = 2. - 4
Testa med scrapy shell eller scrapy crawl
Kör en testförfrågan mot
https://vinaproxy.com/api/my-ipför att verifiera rotation och autentisering.
Vanliga frågor
Varför misslyckades min anpassade Scrapy-proxymiddleware när den sattes till prioritet 800?
Scrapys inbyggda HttpProxyMiddleware körs med prioritet 750. Om din middleware körs med 800 (efter 750) konverteras de infogade inloggningsuppgifterna user:pass aldrig till en Proxy-Authorization-header. Ställ alltid in din middleware-prioritet under 750 (såsom 740).
Håller Scrapy beständiga anslutningar öppna till varje proxy?
Ja. Twisteds anslutningspool upprätthåller beständiga keep-alive-anslutningar per proxyändpunkt.
Är VinaProxy-proxyer obegränsade för Scrapy-jobb med miljontals sidor?
Ja. Alla Dedicated IPv4- och Static ISP-planer inkluderar obegränsad månatlig bandbredd.
Skala upp dina Scrapy-spindlar med obegränsade statiska IP-pooler
Omedelbara Dedicated IPv4- och Static ISP-proxyer i bulk i 7 länder.
Köp Scrapy-proxyer