Skip to content
Intermediate / 6 min read

Comment utiliser les proxys résidentiels ProxyScrape avec Scrapy en Python

Intégrez les proxys résidentiels ProxyScrape à vos spiders Scrapy pour un scraping web Python fiable. Inclut un middleware de rotation, l'authentification et la configuration SOCKS5.

SOCKS5 HTTP(S) Scraping Web

Aperçu

Scrapy est un puissant framework Python pour le scraping web, mais de nombreux sites bloquent les requêtes provenant d'une seule IP. L'utilisation de proxys ProxyScrape vous aide à répartir les requêtes, éviter les limites de débit et accéder à du contenu soumis à des restrictions géographiques. ProxyScrape propose des proxys résidentiels, datacenter et mobiles avec prise en charge HTTP et SOCKS5, une facturation à l'usage ou mensuelle forfaitaire, et un pool de plus de 97 millions d'IP conçu pour une disponibilité à long terme.

Ce tutoriel vous montre comment intégrer les proxys ProxyScrape dans un projet Scrapy. Vous apprendrez à configurer l'authentification, à faire tourner les proxys à chaque requête et à gérer les erreurs courantes. Cette approche fonctionne sous Windows, macOS et Linux.

Prérequis

  • Python 3.8 ou plus récent installé.
  • Scrapy installé (pip install scrapy).
  • Un compte ProxyScrape avec des proxys résidentiels ou datacenter. Vous pouvez souscrire à un forfait ou utiliser le paiement à l'usage.
  • Vos identifiants de proxy : hôte, port, nom d'utilisateur et mot de passe depuis le tableau de bord ProxyScrape.

Comprendre l'authentification proxy dans Scrapy

ProxyScrape utilise une authentification par nom d'utilisateur/mot de passe. Dans Scrapy, vous transmettez l'URL du proxy dans la clé meta proxy de la requête. Le format est :

  • HTTP/HTTPS: http://username:password@host:port
  • SOCKS5: socks5://username:password@host:port

Scrapy prend nativement en charge les proxys HTTP et HTTPS. Pour SOCKS5, vous avez besoin d'un package supplémentaire comme scrapy-socks.

Étape 1 : Installer Scrapy et créer un projet

Ouvrez un terminal et exécutez :

pip install scrapy
scrapy startproject proxyscrape_scrapy
cd proxyscrape_scrapy

Cela crée un nouveau projet Scrapy avec un répertoire de spiders par défaut.

Étape 2 : Obtenir vos identifiants de proxy depuis ProxyScrape

Connectez-vous à votre tableau de bord ProxyScrape et créez une liste de proxys. Vous recevrez un hôte, un port, un nom d'utilisateur et un mot de passe. Pour les proxys résidentiels, vous pouvez obtenir un hôte de passerelle qui effectue une rotation automatique, ou une liste de points de terminaison. Pour les proxys datacenter, vous obtenez généralement une IP et un port fixes.

Exemple d'identifiants :

  • Hôte : proxy.proxyscrape.com
  • Port : 8080
  • Nom d'utilisateur : user123
  • Mot de passe : pass456

Votre URL de proxy devient : http://user123:[email protected]:8080

Si votre mot de passe contient des caractères spéciaux, encodez-les en URL (par exemple, @ devient %40).

Étape 3 : Configurer un proxy basique dans un spider

Créez un spider simple qui vérifie votre adresse IP via le proxy. Dans proxyscrape_scrapy/spiders/example.py :

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    start_urls = ['https://httpbin.org/ip']

    def start_requests(self):
        proxy = 'http://user123:[email protected]:8080'
        for url in self.start_urls:
            yield scrapy.Request(
                url,
                meta={'proxy': proxy},
                callback=self.parse
            )

    def parse(self, response):
        yield {'ip': response.text}

Exécutez le spider :

scrapy crawl example -O output.json

La sortie affiche l'adresse IP telle que vue par le site cible. Si elle correspond à l'IP de votre proxy, la configuration fonctionne.

Étape 4 : Implémenter un middleware de rotation de proxys

Faire tourner les proxys à chaque requête améliore l'anonymat et réduit le risque de blocage. Créez un middleware dans proxyscrape_scrapy/middlewares.py :

import random
from scrapy import signals

class ProxyRotationMiddleware:
    def __init__(self, proxies):
        self.proxies = proxies

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.getlist('PROXY_LIST'))

    def process_request(self, request, spider):
        proxy = random.choice(self.proxies)
        request.meta['proxy'] = proxy
        spider.logger.debug(f'Using proxy: {proxy}')

Activez le middleware et définissez votre liste de proxys dans settings.py :

DOWNLOADER_MIDDLEWARES = {
    'proxyscrape_scrapy.middlewares.ProxyRotationMiddleware': 543,
}

PROXY_LIST = [
    'http://user1:pass1@host1:port1',
    'http://user2:pass2@host2:port2',
    'http://user3:pass3@host3:port3',
]

Désormais, chaque requête utilise un proxy aléatoire de la liste. Vous pouvez remplir la liste avec plusieurs points de terminaison ProxyScrape ou utiliser leur passerelle rotative (un point de terminaison qui effectue une rotation automatique).

Étape 5 : Gérer les proxys SOCKS5 (facultatif)

Scrapy ne prend pas en charge SOCKS5 nativement. Installez scrapy-socks :

pip install scrapy-socks

Ajoutez le middleware SOCKS5 à settings.py :

DOWNLOADER_MIDDLEWARES = {
    'scrapy_socks.Socks5DownloaderMiddleware': 543,
}

Définissez ensuite le proxy dans la meta de la requête sous la forme socks5://user:pass@host:port. Notez que vous ne pouvez pas utiliser simultanément le middleware de rotation et scrapy-socks sans logique personnalisée. Dans la plupart des cas d'utilisation, les proxys HTTP sont plus simples et suffisants.

Étape 6 : Tester et vérifier la rotation

Exécutez votre spider et vérifiez la sortie :

scrapy crawl example -O output.json

Inspectez output.json. Si vous voyez différentes adresses IP selon les requêtes, la rotation fonctionne. Vous pouvez également ajouter un délai entre les requêtes pour être courtois :

DOWNLOAD_DELAY = 2

Dépannage

  • 407 Proxy Authentication Required : Vérifiez votre nom d'utilisateur et votre mot de passe. Assurez-vous qu'ils sont encodés en URL. Vérifiez que votre forfait ProxyScrape est actif.
  • Connexion refusée ou délai d'attente dépassé : Confirmez l'hôte et le port. Vérifiez votre pare-feu ou VPN. Essayez un autre point de terminaison de proxy.
  • Blocages fréquents : Passez aux proxys résidentiels, augmentez DOWNLOAD_DELAY et activez la rotation. Les proxys datacenter sont plus susceptibles d'être bloqués sur les sites stricts.
  • Erreurs SOCKS5 : Assurez-vous que scrapy-socks est installé et configuré. Si vous obtenez des erreurs d'importation, réinstallez le package.
  • Erreurs SSL : Ajoutez DOWNLOAD_HANDLERS ou utilisez https dans l'URL du proxy si le site cible l'exige.

Choisir le bon type de proxy pour Scrapy

Type de proxy Idéal pour Remarques
Résidentiel Scraper des sites avec protection anti-bot Anonymat élevé, grand pool, plus lent
Datacenter Scraping à grande vitesse de sites moins protégés Plus rapide, moins cher, plus facile à bloquer
Mobile Scraper du contenu ou des applications spécifiques au mobile Rarement bloqué, coût plus élevé

ProxyScrape propose les trois types avec une facturation flexible. Commencez par les proxys résidentiels pour la plupart des tâches de scraping.

Résumé

Vous avez appris à intégrer les proxys ProxyScrape dans Scrapy : installer Scrapy, obtenir des identifiants, configurer un proxy basique, créer un middleware de rotation et, éventuellement, utiliser SOCKS5. Testez votre configuration et ajustez la rotation et les délais pour éviter les blocages. Les proxys résidentiels et datacenter fiables de ProxyScrape, avec plus de 97 millions d'IP et une disponibilité à long terme, en font un choix solide pour les projets de scraping Python.