Comment configurer et faire tourner des proxys dans Python Scrapy
Mis à jour:
Le moteur asynchrone Twisted de Scrapy comprend le composant natif HttpProxyMiddleware (exécuté avec la priorité 750), qui analyse automatiquement les chaînes http://user:pass@ip:port attribuées à request.meta['proxy']. En rédigeant un Downloader Middleware personnalisé d'une dizaine de lignes avec la priorité 740, vos spiders peuvent faire tourner leurs requêtes sur un pool d'IP statiques VinaProxy sans quota de bande passante.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 ₫
- 5+ IPs35 000 ₫
- 10+ IPs25 000 ₫
- 20+ IPs25 000 ₫
- 50+ IPs25 000 ₫
- 100+ IPs25 000 ₫
- 200+ IPs25 000 ₫
- 500+ IPs25 000 ₫
- 1000+ IPs22 000 ₫
- 2000+ IPs20 000 ₫
- 1 IP40 000 ₫
- 5+ IPs35 000 ₫
- 10+ IPs25 000 ₫
- 20+ IPs25 000 ₫
- 50+ IPs25 000 ₫
- 100+ IPs25 000 ₫
- 200+ IPs25 000 ₫
- 500+ IPs25 000 ₫
- 1000+ IPs22 000 ₫
- 2000+ IPs20 000 ₫
Ordre des middlewares de proxy et gestion de la concurrence dans Scrapy
Étant donné que HttpProxyMiddleware s'exécute avec la priorité 750 pour retirer user:pass de l'URL et coder l'en-tête Proxy-Authorization, tout middleware personnalisé qui assigne request.meta['proxy'] doit impérativement utiliser un numéro inférieur (par exemple 740) :
| Paramètre Scrapy | Valeur recommandée | Objectif technique |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Achemine la requête via le proxy VinaProxy sélectionné |
| Priorité Middleware | 740 (avant 750) | Garantit que HttpProxyMiddleware encode l'en-tête d'authentification |
CONCURRENT_REQUESTS_PER_IP | 2 à 4 | Limite le nombre de connexions simultanées par IP pour éviter les blocages HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Adapte automatiquement le délai entre requêtes selon la latence de la cible |
Bonnes pratiques pour les collectes Scrapy à grande échelle
- Chargez votre liste de proxys VinaProxy dans
from_crawler()et appliquezrequest.meta['proxy'] = random.choice(self.proxies)dans la méthodeprocess_request() - Activez
RANDOMIZE_DOWNLOAD_DELAY = TrueavecDOWNLOAD_DELAY = 1.0pour injecter une variation aléatoire dans les intervalles de requêtes de chaque IP - En cas d'erreur nécessitant une relance (
429ou503), sélectionnez un proxy différent avant de réinsérer la requête dans la file
Étape par étape
- 1
Formater votre liste de proxys en http://user:pass@ip:port
Collez votre liste VinaProxy dans notre Convertisseur de format proxy pour générer les adresses URL.
- 2
Créer ProxyPoolMiddleware dans middlewares.py
Définissez la méthode
process_request(self, request, spider)qui attribuerequest.meta['proxy'] = random.choice(self.proxies). - 3
Enregistrer le middleware en priorité 740 dans settings.py
Ajoutez
'myproject.middlewares.ProxyPoolMiddleware': 740sousDOWNLOADER_MIDDLEWARESet fixezCONCURRENT_REQUESTS_PER_IP = 2. - 4
Tester avec scrapy shell ou scrapy crawl
Exécutez une requête de test vers
https://vinaproxy.com/api/my-ippour confirmer la rotation et l'authentification.
Questions fréquentes
Pourquoi mon middleware de proxy Scrapy échoue-t-il avec une priorité fixée à 800 ?
Le composant natif de Scrapy HttpProxyMiddleware s'exécute avec la priorité 750. Si votre middleware s'exécute à 800 (après 750), les identifiants de l'URL ne sont jamais convertis en en-tête Proxy-Authorization. Configurez impérativement une priorité inférieure à 750 (comme 740).
Scrapy maintient-il des connexions persistantes avec chaque serveur proxy ?
Oui. Le pool de connexions de Twisted maintient des sessions TCP keep-alive persistantes vers chaque passerelle proxy, réduisant les délais de négociation.
Les proxys VinaProxy sont-ils illimités pour les projets Scrapy de plusieurs millions de pages ?
Oui. Toutes les offres IPv4 dédiée et ISP statique de VinaProxy bénéficient d'un volume mensuel de données illimité.
Développez vos spiders Scrapy avec des pools d'IP statiques illimitées
Proxies IPv4 Dédiés et ISP Statiques en volume répartis sur 7 pays avec déploiement instantané.
Acheter des proxys Scrapy