En date du 7 octobre 2026, Shifter dispose du plus grand pool d'IP US actives, devant Oxylabs et Bright Data, pour une fraction du coût.Shifter a désormais le plus grand pool d'IP US actives

Voir les benchmarks

Frameworks de scraping avec gestion intégrée des proxys : ce que chacun gère

Scrapy, Crawlee, Colly, Playwright, Puppeteer et Selenium comparés sur la prise en charge des proxys : rotation, sessions et identifiants, et ce qu'une passerelle rotative change.

Ingénierie · Mis à jour le 9 novembre 2026 · 8 min de lecture
définirrotationsessionCrawleeScrapyCollyPlaywrightPuppeteerSelenium
Six outils, trois tâches proxy. Les cellules bleu sont gérées pour vous.
Base de connaissances
Sur cette page
  1. La réponse courte
  2. Crawlee : les proxies comme ressource gérée
  3. Scrapy : un proxy par requête, la rotation est à votre charge
  4. Colly : un simple switcher round-robin
  5. Playwright et Puppeteer : isolation par contexte
  6. Selenium : à l’échelle du navigateur, et maladroit avec les mots de passe
  7. Ce qu’une gateway rotative change
  8. Mise en œuvre
  9. Lequel choisir
  10. Sources et références

Presque tous les frameworks de scraping permettent de définir un proxy. Beaucoup moins gèrent les proxies à votre place : les faire tourner, retirer ceux qui sont bloqués, et maintenir une session sur une seule IP. Si vous utilisez des proxies résidentiels, savoir quelle partie le framework prend en charge et quelle partie la gateway prend en charge évite beaucoup de code de liaison.

Ce guide compare six outils courants sur trois questions : comment vous définissez le proxy, si l’outil fait tourner les proxies lui-même, et s’il lie une session à un seul proxy. Il montre ensuite la petite quantité de code que chacun nécessite derrière une gateway rotative.

La réponse courte

OutilLangageComment définir le proxyRotation automatiqueLie une session à un proxy
CrawleeNode.jsProxyConfigurationOui : round robin, fonction personnalisée, niveauxOui, via son pool de sessions
ScrapyPythonrequest.meta["proxy"] ou variables d’environnementNon, nécessite votre propre middlewareNon
CollyGoSetProxy ou SetProxyFuncOui : switcher round-robinNon
PlaywrightNode.js, Python, Java, .NETAu lancement ou par contexte de navigateurNonPar contexte
PuppeteerNode.jsOption de lancement ou par contexte de navigateurNonPar contexte
SeleniumPlusieursOption globale au navigateurNonNon

Crawlee est le seul à traiter les proxies comme une ressource à gérer plutôt que comme un simple paramètre. Les outils de navigateur offrent une isolation par contexte, ce qui constitue la brique de base des sessions, mais la logique de rotation reste à votre charge.

Crawlee : les proxies comme ressource gérée

Le ProxyConfiguration de Crawlee prend une liste d’URLs de proxies et les fait tourner “in a round-robin fashion”. Au lieu d’une liste, vous pouvez passer une fonction qui choisit le proxy pour chaque requête. Un troisième mode, les proxies à niveaux (tiered proxies), démarre avec le niveau le moins cher (souvent aucun proxy du tout), passe à un niveau supérieur quand un site bloque le crawler, et redescend quand le niveau inférieur fonctionne à nouveau.

La partie la plus importante concerne les sessions. Quand le crawler tourne avec son pool de sessions, chaque session garde le même proxy : selon les mots de la documentation, les appels ultérieurs “with the same sessionId will always return the same proxyUrl”. Quand Crawlee décide qu’une session est bloquée, il la retire et la session suivante obtient un proxy différent. Les cookies suivent la session, donc l’IP et les cookies restent ensemble.

Scrapy : un proxy par requête, la rotation est à votre charge

Le HttpProxyMiddleware de Scrapy lit le proxy depuis request.meta["proxy"], et se rabat sur les variables d’environnement http_proxy et https_proxy. Les identifiants peuvent être placés dans l’URL, comme dans http://username:password@host:port. C’est tout ce qu’il fait. Choisir un proxy différent par requête, détecter les bannissements et mettre au repos les proxies morts vous revient, ou revient à une extension comme scrapy-rotating-proxies, qui lit une liste de proxies et traite par défaut les réponses non-200 ou vides comme des bannissements.

Notre guide d’intégration Scrapy couvre la configuration de base, et l’article sur la rotation des proxies résidentiels dans Scrapy approfondit le middleware.

Colly : un simple switcher round-robin

Colly, le framework Go, a SetProxy pour un seul proxy et SetProxyFunc pour une fonction qui en choisit un par requête. Son package proxy inclut RoundRobinProxySwitcher, qui “rotates ProxyURLs on every request” et accepte les URLs http, https et socks5. Il n’y a pas de notion de session : si deux requêtes doivent partager une IP, c’est à vous de le décider dans votre propre fonction.

Playwright et Puppeteer : isolation par contexte

Les outils d’automatisation de navigateur ne font rien tourner eux-mêmes, mais ils permettent à chaque contexte de navigateur d’utiliser son propre proxy, ce qui permet de faire tourner de nombreuses sessions séparées dans un seul navigateur.

  • Playwright prend une option proxy avec server, username et password, soit au lancement pour tout le navigateur, soit sur newContext() pour un seul contexte. Voir notre guide d’intégration Playwright pour la configuration complète.
  • Puppeteer définit un proxy avec le flag de lancement --proxy-server, ou par contexte avec createBrowserContext({ proxyServer }). Aucun des deux ne prend d’identifiants : vous répondez au défi d’authentification du proxy avec page.authenticate().

Donnez à chaque contexte sa propre session et vous obtenez une IP et un pot de cookies par contexte, ce qui est ce dont un flux connecté a besoin.

Selenium : à l’échelle du navigateur, et maladroit avec les mots de passe

Selenium définit le proxy via les options du navigateur, donc il s’applique à tout le navigateur. Avec Chrome, la voie habituelle est le switch --proxy-server, qui n’a pas de place pour un nom d’utilisateur et un mot de passe. Les solutions de contournement courantes sont une petite extension de navigateur qui répond au défi d’authentification, ou un proxy de redirection local sans mot de passe qui transmet le trafic à votre fournisseur avec les identifiants. Selenium Wire, autrefois la solution populaire, a été archivé en janvier 2024 et n’est plus maintenu.

Ce qu’une gateway rotative change

La rotation des frameworks a été conçue pour des listes de proxies : une centaine de paires IP:port que vous faites tourner, testez et retirez. Une gateway résidentielle rotative fonctionne différemment. Vous vous connectez à un seul hôte et port, et la gateway choisit l’IP de sortie. Cela déplace la majeure partie du travail hors de votre code :

  • La rotation se fait au niveau de la gateway, donc une seule URL de proxy suffit. Une liste round-robin d’une seule entrée n’est qu’un simple paramètre.
  • Les sessions sont demandées dans le nom d’utilisateur. Avec Shifter vous ajoutez sid-<id> pour garder une IP de sortie fixe et ttl-<seconds> pour indiquer combien de temps la conserver, comme expliqué dans sticky vs rotating proxies.
  • La localisation fait également partie du nom d’utilisateur, donc un crawler peut cibler un pays ou une ville par requête sans une deuxième liste de proxies.

Le travail du framework se réduit donc à une seule chose : faire correspondre sa propre notion de session à l’identifiant de session dans le nom d’utilisateur du proxy.

Mise en œuvre

Crawlee. Passez une fonction qui construit le nom d’utilisateur à partir de l’identifiant de session de Crawlee. Les identifiants de session peuvent contenir des caractères comme des underscores, donc ne gardez que les lettres et les chiffres :

import { CheerioCrawler, ProxyConfiguration } from 'crawlee';

const proxyConfiguration = new ProxyConfiguration({
  newUrlFunction: (sessionId) => {
    const sid = sessionId
      ? `-sid-${String(sessionId).replace(/[^a-zA-Z0-9]/g, '')}-ttl-600`
      : '';
    return `http://customer-USERNAME${sid}:PASSWORD@p.shifter.io:443`;
  },
});

const crawler = new CheerioCrawler({
  proxyConfiguration,
  useSessionPool: true,
  persistCookiesPerSession: true,
  async requestHandler({ request, $ }) {
    console.log(request.url, $('title').text());
  },
});

await crawler.run(['https://example.com/']);

Quand Crawlee retire une session bloquée, l’identifiant de session suivant donne de lui-même une nouvelle IP fixe.

Scrapy. Un petit middleware de téléchargement définit le proxy avant que le middleware de proxy propre à Scrapy ne s’exécute. Les requêtes qui portent une valeur session dans meta partagent une seule IP ; les autres tournent :

# middlewares.py
class GatewayProxyMiddleware:
    def process_request(self, request, spider):
        sid = request.meta.get("session")
        user = "customer-USERNAME"
        if sid:
            user += f"-sid-{sid}-ttl-600"
        request.meta["proxy"] = f"http://{user}:PASSWORD@p.shifter.io:443"

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.GatewayProxyMiddleware": 350,
}

Playwright. Un contexte par session :

const context = await browser.newContext({
  proxy: {
    server: 'http://p.shifter.io:443',
    username: 'customer-USERNAME-sid-cart1-ttl-600',
    password: 'PASSWORD',
  },
});

Lequel choisir

Choisissez le framework en fonction du site et de l’équipe, pas de ses fonctionnalités de proxy. Crawlee est le choix le plus solide quand vous voulez que le blocage, les sessions et les niveaux de proxy soient gérés pour vous en Node.js. Scrapy reste le moyen le plus rapide d’explorer un grand nombre de pages HTML simples en Python, et son manque côté proxy se résume à un middleware de dix lignes. Playwright ou Puppeteer sont les bons outils quand les pages nécessitent un véritable navigateur, et les contextes vous donnent des sessions propres. Selenium fonctionne aussi, avec plus d’efforts autour des identifiants.

Derrière une gateway rotative, les six se réduisent au même schéma : une seule URL de proxy, et un identifiant de session dans le nom d’utilisateur partout où les requêtes doivent partager une IP. Pour en savoir plus sur la mise en place de ceci dans un crawler de production, voir notre cas d’usage web scraping.

Sources et références

Foire aux questions

Quel framework de scraping dispose de la gestion de proxy intégrée la plus complète ?

Crawlee. Son ProxyConfiguration fait tourner une liste de proxies, peut choisir un proxy par requête avec votre propre fonction, peut passer à des niveaux de proxies supérieurs quand un site commence à bloquer, et lie chaque session à un seul proxy pour que les cookies et l'IP restent associés. Scrapy, Playwright, Puppeteer et Selenium acceptent un proxy mais vous laissent gérer la rotation.

Est-ce que Scrapy fait tourner les proxies tout seul ?

Non. Le HttpProxyMiddleware de Scrapy envoie chaque requête via le proxy indiqué dans request.meta['proxy'] ou les variables d'environnement http_proxy et https_proxy. Faire tourner les proxies nécessite votre propre middleware ou une extension tierce comme scrapy-rotating-proxies.

Ai-je besoin de la rotation de proxy du framework si mon fournisseur me donne une passerelle rotative ?

En général non. Une passerelle résidentielle rotative change l'IP de sortie pour vous derrière un seul hôte et port. Ce dont vous avez encore besoin de la part du framework, c'est de la gestion des sessions : envoyer le même identifiant de session dans le nom d'utilisateur du proxy pour chaque requête qui doit partager une IP, comme une connexion ou un paiement.

Pourquoi ne puis-je pas mettre un nom d'utilisateur et un mot de passe dans l'option proxy de Chrome ?

Le commutateur --proxy-server de Chrome prend uniquement un hôte et un port. Puppeteer répond au défi d'authentification du proxy avec page.authenticate, et Playwright accepte un nom d'utilisateur et un mot de passe dans son option proxy. Selenium n'a pas d'équivalent intégré pour Chrome, donc les gens utilisent une petite extension de navigateur ou un proxy de transfert local.

Prêt à commencer ?

Essayez les proxies résidentiels de Shifter, 205M+ IPs, 195+ pays, à partir de 0,75 $/GB.

Commencer