Comment utiliser des proxies avec Scrapy
Scrapy route chaque requête via un proxy de trois manières : une clé méta par requête, une variable d'environnement ou un middleware de téléchargement rotatif. Voici chacune, avec du code fonctionnel pour les proxies s4m authentifiés.
Trois façons dont Scrapy communique avec un proxy
Scrapy propose un HttpProxyMiddleware qui est activé par défaut. Il lit le proxy à partir de l'un des deux endroits suivants : la clé proxy dans le dictionnaire meta d'une requête, ou les variables d'environnement standard http_proxy / https_proxy. Pour un proxy fixe sur l'ensemble d'un crawl, la variable d'environnement est le chemin le plus rapide ; pour un contrôle et une rotation par requête, définissez request.meta["proxy"] vous-même, généralement à partir d'un middleware de téléchargement personnalisé.
L'authentification est la partie que les gens oublient. Scrapy ne lit pas USER:PASS@ à partir de l'URL du proxy comme le fait curl — il s'attend à un en-tête Proxy-Authorization. L'approche propre consiste à construire cet en-tête une fois et à l'attacher dans votre middleware. Les proxies s4m s'authentifient avec USER:PASS contre proxy.s4m.online, HTTP sur le port 3128 (l'adaptation naturelle pour le middleware de proxy HTTP de Scrapy). Pour SOCKS5, vous deviez faire passer le crawl par un pont local SOCKS-to-HTTP, mais pour la plupart des extractions, le point de terminaison HTTP est plus simple. En savoir plus sur la page proxy, et voir d'autres guides d'extraction.
Un middleware de proxy rotatif
Ajoutez ceci dans middlewares.py, activez-le dans settings.py, et chaque requête choisit un proxy de votre pool avec l'en-tête d'authentification correct.
# middlewares.py
import base64
import random
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
PROXIES = [f"http://{HOST}:3128"] # add more endpoints/ports to rotate
class S4mProxyMiddleware:
def _auth_header(self):
raw = f"{USER}:{PASS}".encode()
return b"Basic " + base64.b64encode(raw)
def process_request(self, request, spider):
request.meta["proxy"] = random.choice(PROXIES)
# Scrapy needs the Proxy-Authorization header explicitly:
request.headers[b"Proxy-Authorization"] = self._auth_header()
# settings.py
DOWNLOADER_MIDDLEWARES = {
# keep Scrapy's built-in proxy middleware after ours
"myproject.middlewares.S4mProxyMiddleware": 350,
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
CONCURRENT_REQUESTS = 8
DOWNLOAD_DELAY = 0.5
RETRY_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]Connectez-le
D'un projet propre à un crawl proxy.
Ajouter le middleware
Collez la classe S4mProxyMiddleware dans le fichier middlewares.py de votre projet et remplacez USER, PASS et HOST par vos identifiants et point de terminaison s4m.
Activez-le dans les paramètres
Enregistrez-le dans DOWNLOADER_MIDDLEWARES avec une priorité inférieure à celle de HttpProxyMiddleware de Scrapy (un nombre plus petit s'exécute en premier), afin que votre proxy et votre en-tête soient définis avant que le middleware intégré ne s'exécute.
Ajuster la politesse
Définissez DOWNLOAD_DELAY et CONCURRENT_REQUESTS pour rester en dessous de la limite de taux de la cible, et activez RETRY_HTTP_CODES pour 429 et 5xx afin que les blocages transitoires soient automatiquement réessayés.
Vérifiez l'IP de sortie
Ajoutez une première requête à un point de terminaison IP-echo comme https://api.ipify.org et enregistrez la réponse pour confirmer que votre crawl sort vraiment par le proxy.
Rotation, réessais et honnêteté
Pour une rotation réelle, mettez plusieurs points de terminaison dans PROXIES et laissez process_request en choisir un par demande ; combinez cela avec le middleware de réessai intégré de Scrapy afin qu'un 429 ou un 503 soit réessayé avec un nouveau choix. Gardez DOWNLOAD_DELAY non nul et la concurrence modeste — un crawler qui ralentit est beaucoup plus difficile à bloquer qu'un qui sprinte.
Deux mises en garde honnêtes. Tout d'abord, les proxies s4m sont datacenter, pas résidentiels : excellents pour les API, les tests et les sites modérément défendus, mais les systèmes anti-bot agressifs peuvent signaler les plages de datacenter. Deuxièmement, la rotation n'est pas une licence pour ignorer les règles d'un site — lisez robots.txt et ses conditions. Lorsque vous avez besoin d'une sortie unique et cohérente pour une liste blanche, ajoutez une adresse IP personnelle dédiée au lieu de faire tourner. Vérifiez les sorties et les ports avec les outils, et prototypez contre la liste de proxies gratuits avant de vous engager sur le trafic.
Questions, réponses
Pourquoi Scrapy ne récupère-t-il pas mon USER:PASS depuis l'URL du proxy ?
Contrairement à curl, HttpProxyMiddleware de Scrapy ne parse pas les identifiants à partir de l'URL. Vous devez définir vous-même un en-tête Proxy-Authorization — construisez un en-tête d'authentification de base à partir de USER:PASS comme montré dans l'exemple de middleware.
Scrapy peut-il utiliser un proxy SOCKS5 ?
Pas nativement via HttpProxyMiddleware, qui est orienté HTTP. Utilisez le point de terminaison HTTP sur le port 3128 pour Scrapy, ou exécutez un pont local SOCKS-à-HTTP si vous avez spécifiquement besoin de SOCKS5.
Comment puis-je faire tourner les proxies par requête ?
Mettez plusieurs points de terminaison proxy dans une liste et choisissez-en un dans process_request, en définissant request.meta["proxy"] à chaque fois. Associez-le au middleware de réessai de Scrapy afin qu'une requête bloquée soit réessayée avec un nouveau choix.
S'agit-il de proxies résidentiels ?
Non. Les proxies s4m sont des proxies SOCKS5 et HTTP de datacenter authentifiés, payés à l'utilisation. Ils conviennent à la plupart des opérations de scraping, bien que les cibles fortement défendues puissent signaler les plages IP de datacenter.
Élargissez vos crawls Scrapy
Proxys de datacenter authentifiés sur proxy.s4m.online, pay-as-you-go mesuré, prêts à être tournés via un middleware Scrapy. Ajoutez une IP dédiée lorsque la cible s'attend à une sortie cohérente.
Les gens ont trouvé cette page en recherchant
- comment utiliser des proxies avec Scrapy
- comment configurer interrupteur d'arrêt VPN
- interrupteur d'arrêt VPN pour android
- interrupteur d'arrêt VPN
- adresse IP pour android
- configuration du proxy
- comment vérifier si un proxy est anonyme
- meilleurs protocoles VPN en 2026
- liste de proxies gratuits
- proxy socks5 expliqué
- proxy pour le scraping pour les débutants
- comment corriger 429 trop de requêtes lors du scraping
- authentification de proxy
- comment éviter les interdictions d'IP lors du scraping
- proxy socks5
Vraies phrases de recherche auxquelles cette page répond — les liens ouvrent la page qui les couvre en profondeur.