Retour au blog
Guides
Sergiu InizianLast updated on May 8, 202610 min read

Cheerio ou marionnettiste : Comment choisir le bon outil

Cheerio ou marionnettiste : Comment choisir le bon outil
En bref : Cheerio est un analyseur HTML léger ; Puppeteer pilote un véritable navigateur Chromium. Utilisez Cheerio lorsque les données se trouvent déjà dans le code HTML brut, Puppeteer lorsqu’elles sont générées par JavaScript, et combinez les deux lorsqu’une page riche en JavaScript comporte de nombreux champs à extraire à chaque visite.

Si vous développez un scraper Node.js, la question « Cheerio ou Puppeteer ? » se pose généralement dès la première fois qu’un site cible cesse de coopérer. Peut-être que Cheerio a renvoyé un sélecteur vide sur une page React, ou que Puppeteer monopolise le processeur sur une tâche qui ne devrait prendre que quelques millisecondes. Ces deux bibliothèques sont populaires pour une bonne raison, mais elles ne conviennent pas à la moitié des tâches qu’on leur confie.

Cheerio est un analyseur HTML côté serveur doté d’une API de type jQuery. Puppeteer est un contrôleur pour Chromium sans interface graphique. Le modèle mental le plus clair pour choisir entre Cheerio et Puppeteer consiste à séparer le rendu (transformer le JavaScript en un DOM final) de l’analyse (extraire des champs de ce DOM).

Ce guide explique le fonctionnement de chaque bibliothèque, dans quels cas chacune est la meilleure solution, le modèle hybride qui gère la plupart des sites réels, un exemple concret de scraper de devis, et la réalité anti-bot à laquelle vous devez vous préparer dès que vous quittez localhost.

Cheerio vs Puppeteer en bref

Les deux sont des bibliothèques Node.js à des niveaux différents. Cheerio utilise le code HTML dont vous disposez déjà et vous fournit des sélecteurs pour extraire les données. Puppeteer lance un véritable navigateur Chromium, exécute le JavaScript de la page et vous permet de lire ou de cliquer sur le résultat.

Le test le plus rapide pour comparer Cheerio et Puppeteer est celui de la source : recherchez les données souhaitées dans le code source brut. Si elles s’y trouvent, Cheerio associé à un client HTTP suffit. Si le code source est une coquille vide contenant des paquets JS, vous avez besoin d’un navigateur.

Comment fonctionne Cheerio en coulisses

Cheerio est une bibliothèque dédiée uniquement à l'analyse. Vous lui transmettez une chaîne HTML avec cheerio.load(html) et elle renvoie un $ objet qui imite jQuery : $('h1').text(), $('a.product').each(...), la recherche d'attributs, la traversée. Il n'y a pas de DOM, pas de moteur de mise en page, pas d'environnement d'exécution JavaScript.

Cheerio ne récupère pas non plus le code HTML de lui-même ; vous devez donc l'associer à axios, node-fetch ou undici. Cette séparation est une fonctionnalité : vous contrôlez la couche de requêtes et Cheerio se concentre sur l'analyse.

Comment fonctionne Puppeteer en coulisses

Puppeteer est une API Node.js qui contrôle Chrome ou Chromium via le protocole Chrome DevTools. Lorsque vous npm install puppeteer, il fournit une version de Chromium adaptée, ce qui vous évite de gérer un binaire de navigateur séparé.

Un script type suit le même cycle de vie : puppeteer.launch(), browser.newPage(), page.goto(url), page.waitForSelector(...) pour le contenu asynchrone, puis page.content() ou page.evaluate(...) pour lire le DOM rendu.

Comparaison directe des fonctionnalités

Comparer Cheerio et Puppeteer ne permet pas vraiment de trancher, mais plutôt de confirmer le type de tâche à accomplir. La vitesse et l'encombrement jouent en faveur de Cheerio. Le rendu JavaScript, l'interception réseau et la simulation utilisateur sont l'apanage de Puppeteer.

Capacités

Cheerio

Puppeteer

Objectif principal

Analyser le HTML/XML

Automatiser Chromium

Exécution de JavaScript

Non

Oui

Dépendance du navigateur

Aucune

Chromium intégré

Vitesse par page

Millisecondes

Secondes

Mémoire par worker

Quelques Mo

Plusieurs centaines de Mo par navigateur

Clics, formulaires, défilement

Non

Oui

Captures d'écran et PDF

Non

Oui

Courbe d'apprentissage

Facile (jQuery/CSS)

Plus difficile (async, cycle de vie)

Cas d'utilisation typique

Statique, rendu côté serveur

SPAs, tableaux de bord, connexions

Performances et empreinte mémoire

Cheerio analyse le HTML en quelques millisecondes et utilise quelques mégaoctets par worker, ce qui permet de faire tenir des milliers d'analyses dans un seul processus Node.js ou une petite fonction serverless. Chaque instance de navigateur Puppeteer nécessite généralement entre 150 et 300 Mo de RAM (chiffres de référence de la communauté au moment de la rédaction ; vérifiez en fonction de votre charge de travail). Sur un Lambda de 1 Go, cela limite rapidement le parallélisme.

Courbe d'apprentissage et expérience développeur

Si vous savez écrire $('div.card .price').text(), vous pouvez écrire du Cheerio. La plupart des tâches ne font que 10 à 20 lignes. Puppeteer exige davantage : une bonne maîtrise de async/await, le cycle de vie des pages et le débogage des bugs de synchronisation où un sélecteur se déclenche avant que les données n'arrivent.

Quand choisir Cheerio

Optez pour Cheerio lorsque le corps de la réponse contient déjà les données. Cela couvre une grande partie du Web public : blogs, actualités, pages marketing, flux RSS, plans de site, résultats de recherche rendus côté serveur, documentation.

Dans la comparaison entre Cheerio et Puppeteer pour ces cibles, Puppeteer est surdimensionné. Un pipeline Cheerio associé à Axios permet de scraper plus de pages par seconde et s'intègre parfaitement dans des workers serverless peu coûteux. Si curl URL | grep trouve vos données, Cheerio les trouvera aussi.

Quand Puppeteer est le bon choix

Puppeteer prend tout son sens lorsque la page s'apparente davantage à une application qu'à un document. Les applications SPA (Single Page Application) construites avec React, Vue ou Angular fournissent souvent une coquille vide et injectent le contenu via XHR après le chargement. Vous avez également besoin d'un véritable navigateur pour le défilement infini, les tableaux de bord protégés par connexion, la gestion des cookies ou des sessions, et les formulaires en plusieurs étapes.

Puppeteer convient également lorsque le scraping est un effet secondaire d’une automatisation plus large : captures d’écran, PDF, soumissions de formulaires, vérifications de l’emplacement des publicités.

L'approche hybride : rendu avec Puppeteer, analyse avec Cheerio

La réponse la plus claire à la question « Cheerio ou Puppeteer » pour la plupart des sites non triviaux est « les deux ». Traitez le rendu et l'analyse comme des préoccupations distinctes : Puppeteer construit le DOM final, puis transmet le code HTML à Cheerio.

Pourquoi les séparer ? L'exécution de querySelectorAll à l'intérieur page.evaluate envoie un callback au navigateur à chaque passage du sélecteur, et chaque aller-retour traverse le protocole DevTools. Pour dix champs répartis sur un millier de pages, le coût s’accumule.

Récupérer le code HTML rendu une seule fois avec page.content() et l'analyser localement avec Cheerio est plus rapide, et votre logique de sélection reste débuggable sans navigateur.

Guide pratique : extraire des citations avec Puppeteer + Cheerio

Après npm init -y && npm install puppeteer cheerio, un scraper hybride contre quotes.toscrape.com se présente comme suit :

const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

(async () => {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  await page.goto('https://quotes.toscrape.com/', { waitUntil: 'networkidle2' });

  const html = await page.content();
  await browser.close();

  const $ = cheerio.load(html);
  const quotes = [];
  $('div.quote').each((_, el) => {
    quotes.push({
      quote: $(el).find('span.text').text().trim(),
      author: $(el).find('.author').text().trim(),
    });
  });
  console.log(quotes);
})();

page.content() renvoie le HTML sérialisé du document actuel, l'équivalent moderne et plus épuré des anciens page.evaluate(() => document.documentElement.innerHTML) modèles. Le bloc Cheerio est identique à ce que vous auriez écrit si axios avait récupéré le code HTML.

Mise à l'échelle : proxys, défenses anti-bot et fiabilité

Sur localhost, tous les scrapers fonctionnent. En production, les modes de défaillance se manifestent par des codes 403, 429, des défis de reconnaissance d'empreinte digitale et des CAPTCHA dès que vous dépassez un seuil de débit. Utiliser Puppeteer seul n'est pas une solution furtive : Chromium headless standard émet des signaux détectables.

Une mise à l'échelle réaliste implique de faire tourner des proxys résidentiels ou mobiles, de randomiser les user agents, de réessayer avec un délai de réessai, et d'acheminer les requêtes plus complexes via une API de scraping gérée qui renvoie du code HTML rendu pour Cheerio.

Alternatives à Cheerio et Puppeteer à connaître

Aucune de ces bibliothèques n’est la seule option. Playwright est similaire à Puppeteer mais prend en charge Chromium, Firefox et WebKit, avec une fonction d’attente automatique qui élimine de nombreux problèmes de synchronisation. Selenium est le vieux cheval de bataille polyglotte, le choix idéal si votre équipe exploite déjà une grille. Côté analyse, jsdom vous offre un véritable DOM et exécute des scripts, tandis que htmlparser2 est l’analyseur en continu sur lequel Cheerio est construit.

Points clés

  • Le rendu et l'analyse sont des tâches distinctes. Cheerio analyse le HTML ; Puppeteer rend les pages. Adaptez l'outil à la tâche, et non à vos habitudes.
  • Utilisez le test « view-source ». Si les données se trouvent dans la réponse brute, Cheerio associé à un client HTTP est plus rapide, moins coûteux et plus facile à maintenir.
  • Optez pour Puppeteer lorsque JavaScript construit le DOM, lorsque vous avez besoin de clics, de défilements ou de connexions, ou lorsque la page est une coquille SPA.
  • Le modèle hybride est plus performant sur les pages riches en JavaScript comportant de nombreux champs. Effectuez un rendu unique avec page.content(), puis analysez le code HTML dans Node avec Cheerio.
  • Prévoyez dès le départ des défenses anti-bot. Les proxys, le renforcement des empreintes digitales, les tentatives de reconnexion et les CAPTCHA déterminent si votre scraper survivra en production.

FAQ

Cheerio est-il réellement plus rapide que Puppeteer, et de combien ?

Oui, Cheerio est nettement plus rapide car il ne lance jamais de navigateur. Une analyse Cheerio s'effectue en quelques millisecondes sur une chaîne en mémoire, tandis que le chargement d'une page avec Puppeteer dépend du réseau, du rendu et du temps d'exécution du JavaScript, soit généralement quelques secondes. Sur un matériel équivalent, vous pouvez généralement exécuter en parallèle 10 à 100 fois plus de workers Cheerio que de workers Puppeteer.

Cheerio peut-il extraire des pages rendues en JavaScript ou des applications monopages ?

Non. Cheerio ne voit que le code HTML que vous lui fournissez ; ainsi, si une page génère son contenu à partir de JavaScript côté client, Cheerio renvoie une coquille vide. Vous devez soit utiliser un navigateur sans interface graphique comme Puppeteer ou Playwright en amont, soit parfois interroger l'API JSON sous-jacente appelée par l'application monopage et ignorer complètement le rendu.

Ai-je besoin d'axios ou de node-fetch pour utiliser Cheerio ?

Vous avez besoin d'un client HTTP, mais il n'est pas nécessaire que ce soit axios. Cheerio attend une chaîne HTML, donc tout ce qui en récupère une fonctionne : axios, node-fetch, undici, le fetch dans Node.js moderne, ou même la lecture d’un fichier .html . Choisissez le client qui vous offre les fonctionnalités de réessai, de proxy et de contrôle des en-têtes dont votre projet a besoin.

Puppeteer peut-il remplacer entièrement Cheerio si je l'utilise déjà pour les tests ?

Techniquement oui, puisque Puppeteer peut interroger le DOM à l'aide de page.$$eval et des aides similaires. En pratique, c'est un gaspillage : chaque passage de sélecteur traverse le protocole DevTools, et vous payez le coût en mémoire du navigateur pour des tâches qui n'ont jamais eu besoin de JavaScript. La plupart des équipes gardent Puppeteer pour le rendu et laissent Cheerio gérer l'extraction.

Dois-je choisir Puppeteer ou Playwright pour un tout nouveau projet de scraping ?

Playwright est généralement le choix par défaut le plus sûr aujourd'hui. Il prend en charge Chromium, Firefox et WebKit via une seule API, offre une meilleure gestion de l'attente automatique et dispose d'outils de débogage plus puissants prêts à l'emploi. Choisissez Puppeteer si votre équipe possède déjà une expertise en la matière, si vous ne ciblez que Chromium ou si vous étendez une base de code Puppeteer existante.

Conclusion

Le choix entre Cheerio et Puppeteer dépend en réalité de la nécessité ou non d'un navigateur pour la page cible. Si la réponse HTML contient déjà les données, Cheerio associé à un client HTTP constitue la solution la plus légère, rapide et économique. Si un framework JavaScript assemble le DOM lors de l'exécution, vous aurez besoin de Puppeteer ou de Playwright pour le rendre au préalable. Et lorsqu’une page est très lourde en JS mais que vous devez extraire beaucoup d’informations à chaque visite, effectuez un rendu unique avec Puppeteer puis analysez le résultat avec Cheerio.

Ce qu'aucune bibliothèque ne résout à elle seule, c'est la réalité de la production : blocages, rotation d'adresses IP, empreintes digitales et CAPTCHA. Si vous préférez conserver votre code Cheerio et ne plus vous battre avec la couche de requêtes, WebScrapingAPI renvoie du code HTML rendu et débloqué via un point de terminaison unique, afin que votre analyseur puisse se concentrer sur les sélecteurs plutôt que sur la furtivité. Choisissez l'outil adapté à votre page, prévoyez dès le départ des mesures anti-bot, et vous passerez beaucoup moins de temps à déboguer vos scrapers et beaucoup plus de temps à exploiter les données.

À propos de l'auteur
Sergiu Inizian, Rédacteur de contenu technique @ WebScrapingAPI
Sergiu InizianRédacteur de contenu technique

Sergiu Inizian est rédacteur technique chez WebScrapingAPI ; il rédige des contenus clairs et pratiques qui aident les développeurs à comprendre le produit et à l'utiliser efficacement.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.