Come configurare e ruotare i proxy in Python Scrapy
Aggiornato:
Il motore asincrono Twisted di Scrapy integra il middleware nativo HttpProxyMiddleware (con priorità 750), in grado di elaborare le stringhe http://user:pass@ip:port assegnate a request.meta['proxy']. Scrivendo un Downloader Middleware personalizzato di una decina di righe con priorità 740, i tuoi spider potranno ruotare in maniera completamente automatizzata su un pool di IP statici illimitati forniti da 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
Priorità del middleware proxy e parametri di concorrenza in Scrapy
Poiché HttpProxyMiddleware viene eseguito con priorità 750 per ripulire user:pass dall'URL e codificare l'header Proxy-Authorization, qualsiasi middleware personalizzato che imposta request.meta['proxy'] deve operare con un valore inferiore (ad esempio 740):
| Parametro Scrapy | Valore consigliato | Finalità tecnica |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Invia la richiesta di navigazione tramite il nodo proxy VinaProxy indicato |
| Priorità Middleware | 740 (prima di 750) | Assicura che HttpProxyMiddleware possa codificare correttamente l'header di autenticazione |
CONCURRENT_REQUESTS_PER_IP | 2 - 4 | Limita le connessioni simultanee per IP, prevenendo risposte di blocco HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Adatta in modo dinamico i tempi di attesa in base alla latenza del target |
Linee guida per scraping ad alta intensità con Scrapy
- Carica l'elenco dei proxy VinaProxy nel metodo
from_crawler()e definiscirequest.meta['proxy'] = random.choice(self.proxies)all'interno diprocess_request() - Attiva
RANDOMIZE_DOWNLOAD_DELAY = Truein combinazione conDOWNLOAD_DELAY = 1.0affinché la frequenza delle richieste da ciascun IP non risulti rigida o automatizzata - In caso di tentativi ripetuti (
429o503), estrai un proxy differente dal pool prima di reinserire la richiesta nella coda di scansione
Passo dopo passo
- 1
Formatta il pool di proxy come http://user:pass@ip:port
Incolla il tuo elenco VinaProxy nel nostro Convertitore di formato proxy per generare gli URL formattati.
- 2
Crea la classe ProxyPoolMiddleware in middlewares.py
Scrivi il metodo
process_request(self, request, spider)impostandorequest.meta['proxy'] = random.choice(self.proxies). - 3
Registra il middleware con priorità 740 in settings.py
Inserisci
'myproject.middlewares.ProxyPoolMiddleware': 740inDOWNLOADER_MIDDLEWARESe configuraCONCURRENT_REQUESTS_PER_IP = 2. - 4
Esegui un test con scrapy shell o un crawl di prova
Invia una richiesta a
https://vinaproxy.com/api/my-ipper accertarti della corretta rotazione e dell'autenticazione del proxy.
Domande frequenti
Perché il middleware proxy personalizzato in Scrapy non funziona con priorità 800?
Il componente nativo HttpProxyMiddleware opera con priorità 750. Se il tuo middleware viene impostato su 800 (dopo 750), le credenziali user:pass non verranno convertite nell'header Proxy-Authorization. Configura sempre una priorità minore di 750 (come 740).
Scrapy mantiene aperte connessioni persistenti verso ciascun server proxy?
Sì. Il pool di connessioni di Twisted gestisce sessioni TCP keep-alive persistenti verso ogni endpoint proxy per ridurre i tempi di latenza.
I proxy VinaProxy hanno soglie di consumo dati nello scraping di milioni di pagine?
No. Tutti i piani IPv4 dedicati e ISP statici di VinaProxy includono traffico mensile illimitato.
Scala i tuoi crawler Scrapy con pool di IP statici illimitati
Forniture all'ingrosso di proxy IPv4 Dedicati e ISP Statici in 7 paesi con attivazione rapida.
Acquista proxy Scrapy