Retour au blog
Guides
Suciu Dan11 avril 202311 min de lecture

Cheerio vs Puppeteer : guide pour choisir le meilleur outil de web scraping

Cheerio vs Puppeteer : guide pour choisir le meilleur outil de web scraping

Qu'est-ce que Cheerio ?

Cheerio est une bibliothèque JavaScript qui analyse et manipule des documents HTML ; elle vous permet de sélectionner, de modifier et d'effectuer des actions sur des éléments d'un document à l'aide d'une syntaxe de type jQuery.

Cheerio est léger et facile à utiliser, ce qui en fait un bon choix pour les tâches simples de web scraping. Il est également plus rapide qu'un navigateur complet comme Chrome ou Firefox, car il n'a pas besoin de charger toutes les ressources. Cela le rend idéal pour extraire des données d'un document HTML.

Cheerio présente de nombreuses fonctionnalités et avantages qui en font un choix populaire pour le web scraping. Voici quelques-unes des principales fonctionnalités et avantages de Cheerio :

  • Léger et facile à utiliser : Cheerio est conçu pour être léger et facile à utiliser, ce qui en fait un excellent choix pour les tâches simples de web scraping. Sa syntaxe est similaire à celle de jQuery, que de nombreux développeurs connaissent bien, et il permet de sélectionner et de manipuler des éléments dans un document HTML avec seulement quelques lignes de code.
  • Rapide : Cheerio est plus rapide qu'un navigateur complet pour le web scraping, car il n'a pas besoin de charger toutes les ressources qu'un navigateur chargerait. Cela en fait un bon choix pour les tâches où la vitesse est importante.
  • Prise en charge des documents HTML et XML : Cheerio peut analyser et manipuler à la fois des documents HTML et XML, ce qui vous offre la flexibilité nécessaire pour travailler avec différents types de documents selon vos besoins.
  • Compatible avec d'autres outils : Cheerio peut être utilisé en combinaison avec d'autres outils tels que l'API Fetch ou Axios pour effectuer des tâches de web scraping. Cela vous permet d'adapter votre flux de travail à vos besoins spécifiques et d'utiliser les meilleurs outils pour la tâche à accomplir.

Qu'est-ce que Puppeteer ?

Puppeteer est une bibliothèque Node.js qui fournit une API de haut niveau pour contrôler un navigateur Chrome sans interface graphique. Elle vous permet d'automatiser des tâches dans Chrome sans ouvrir de fenêtre Chrome, ce qui réduit la quantité de ressources consommées par votre scraper.

Vous pouvez utiliser Puppeteer pour effectuer des actions telles que remplir des formulaires, cliquer sur des boutons et extraire des données de sites web.

L'un des principaux avantages de Puppeteer est qu'il vous permet d'interagir avec les sites web de la même manière qu'un utilisateur humain. Cela en fait un bon choix pour les tâches qui nécessitent des interactions plus complexes avec un site web, telles que la connexion, la navigation entre les pages et le remplissage de formulaires.

Puppeteer présente plusieurs fonctionnalités et avantages qui en font un choix populaire pour le web scraping et l'automatisation. Voici quelques-unes des principales fonctionnalités et avantages de Puppeteer :

  • API de haut niveau : Puppeteer fournit une API de haut niveau facile à utiliser et à comprendre. Cela en fait un excellent choix pour les développeurs novices en matière de web scraping ou d'automatisation.
  • Contrôle d'un navigateur Chrome sans interface graphique : Puppeteer vous permet de contrôler un navigateur Chrome sans interface graphique, ce qui signifie que vous pouvez automatiser des tâches dans Chrome sans ouvrir de fenêtre Chrome. Cela en fait un bon choix pour les tâches nécessitant des interactions plus complexes avec un site web.
  • Imitation du comportement humain : Puppeteer peut imiter le comportement humain, comme cliquer sur des boutons, faire défiler une page et remplir des formulaires. Cela en fait un excellent choix pour les tâches nécessitant des interactions plus complexes avec un site web.
  • Prise en charge des fonctionnalités web modernes : Puppeteer prend entièrement en charge les fonctionnalités web modernes telles que JavaScript, les cookies et les CAPTCHA. Cela en fait un bon choix pour les tâches qui nécessitent ces fonctionnalités.
  • Peut être utilisé en combinaison avec d'autres outils : Puppeteer peut être utilisé en combinaison avec d'autres outils tels que Cheerio pour effectuer des tâches de web scraping. Cela vous permet d'adapter votre flux de travail à vos besoins spécifiques et d'utiliser les meilleurs outils pour la tâche à accomplir.

Différences entre Cheerio et Puppeteer

Cheerio et Puppeteer sont tous deux des outils populaires pour le web scraping, mais ils présentent certaines différences clés qui les rendent plus adaptés à certaines tâches. Voici quelques-unes des principales différences entre Cheerio et Puppeteer :

  • Performances : Cheerio est généralement plus rapide que Puppeteer car il n'a pas à charger toutes les ressources qu'un navigateur devrait charger. Cependant, Puppeteer a l'avantage de pouvoir interagir avec les sites web d'une manière similaire à celle d'un utilisateur humain, ce qui peut le rendre plus rapide pour certaines tâches.
  • Fonctionnalités : Cheerio est adapté aux tâches simples de web scraping qui consistent à extraire des données de documents HTML ou XML. Puppeteer est plus puissant et permet d'automatiser des tâches dans un navigateur Chrome sans interface graphique, telles que la connexion, la navigation entre les pages et le remplissage de formulaires.
  • Facilité d'utilisation : Cheerio utilise une syntaxe similaire à celle de jQuery, que de nombreux développeurs connaissent bien. Cela le rend facile à utiliser pour ceux qui maîtrisent déjà jQuery. Puppeteer dispose également d'une API de haut niveau facile à utiliser, mais elle nécessite davantage d'installation et de configuration que Cheerio.

Dans l'ensemble, le choix entre Cheerio et Puppeteer dépendra des besoins spécifiques de votre tâche de web scraping. Si vous avez simplement besoin d'extraire certaines données d'un document HTML et que les performances sont une préoccupation, Cheerio pourrait être le meilleur choix. Si vous avez besoin d'automatiser, Puppeteer est le bon choix.

Vérification ou installation de Node.JS

Avant de commencer, assurez-vous que Node.JS est installé sur votre machine. La version de Node utilisée dans cet article est la 18.9.0. Exécutez cette commande pour vérifier votre version locale :

node -v

Si vous obtenez une erreur, téléchargez et installez Node.js depuis le site officiel. Cela installera également `npm`, le gestionnaire de paquets pour Node.js.

Configuration du projet

Ouvrez le terminal et créez un nouveau dossier nommé `scraper`. Accédez à ce répertoire et exécutez la commande npm init. Cela créera un fichier `package.json` pour votre projet contenant des métadonnées telles que le nom, la version et les dépendances.

Suivez les invites pour saisir les informations relatives à votre projet. Vous pouvez appuyer sur `Entrée` pour accepter les valeurs par défaut à chaque invite, ou saisir vos propres valeurs si vous le souhaitez.

Vous pouvez maintenant commencer à installer les dépendances et à créer des fichiers pour votre projet :

npm install cheerio puppeteer

Les dépendances seront installées dans le répertoire `node_modules` de votre projet et seront également ajoutées à la section des dépendances de votre fichier `package.json`.

Définition d'une cible

Dans le cadre de cet article, nous allons extraire un article d'ArsTechnica et en récupérer le titre, l'URL de l'image de couverture et le premier paragraphe du corps de l'article.

Cours accéléré sur l'extraction de données

Pour commencer, rendez-vous sur le site web cible et ouvrez un article. Cliquez avec le bouton droit sur le titre de l'article et sélectionnez « Inspecter ». Cela ouvrira les outils de développement et mettra en surbrillance l'élément HTML correspondant à la balise d'en-tête.

Browser showing an Ars Technica article with Chrome DevTools inspecting the headline HTML in the Elements panel

Pour respecter les bonnes pratiques en matière de référencement, une page ne doit comporter qu'un seul élément H1. Par conséquent, h1 peut être utilisé comme sélecteur fiable pour le titre.

Pour choisir le sélecteur de l'image de couverture, utilisez l'outil Inspecter. L'image est encapsulée dans une balise `figure`, il est donc judicieux d'inclure l'élément parent dans le sélecteur. Le sélecteur final est `figure img`.

Enfin, nous devons trouver le sélecteur pour le premier paragraphe.

Ars Technica article text highlighted while Chrome DevTools Elements panel selects a paragraph node

Comme le premier paragraphe n'est pas le premier élément enfant du parent, un sélecteur CSS supplémentaire est nécessaire. L'élément parent possède une classe appelée `article-content`. Nous pouvons utiliser cette classe avec le sélecteur `:first-of-type` pour créer notre sélecteur final : `.article-content p:first-of-type`.

Voici la liste finale des sélecteurs :

  • Titre : `h1`
  • Image de couverture : `figure img`
  • Premier paragraphe : `.article-content p:first-of-type`

Création du scraper

Maintenant que nous avons les dépendances dans le projet, nous allons voir comment utiliser Cheerio et Puppeteer ensemble pour créer un scraper web. En combinant ces deux outils, vous pouvez créer un scraper à la fois rapide et puissant, alors c'est parti !

Créez un fichier nommé `scrape.js` et collez-y le code suivant :

const puppeteer = require('puppeteer');

const cheerio = require('cheerio');

async function scrape() {

    // Launch a headless Chrome browser

    const browser = await puppeteer.launch();

    // Create a new page

    const page = await browser.newPage();

    // Navigate to the website you want to scrape

    await page.goto('https://arstechnica.com/tech-policy/2023/01/musk-led-twitter-faces-another-lawsuit-alleging-it-failed-to-pay-bills/');

    // Wait for the page to load

    await page.waitForSelector('h1');

    // Extract the HTML of the page

    const html = await page.evaluate(() => document.body.innerHTML);

    // Use Cheerio to parse the HTML

    const $ = cheerio.load(html);

    // Extract the title, cover image, and paragraph using Cheerio's syntax

    const title = $('h1').text();

    const paragraph = $('.article-content p:first-of-type').text()

    const coverImage = $('figure img').attr('src');

    // Display the data we scraped

    console.log({

        title,

        paragraph,

        coverImage

    });

    // Close the browser

    await browser.close();

}

scrape();

Vous pouvez exécuter le code à l'aide de la commande node scrape.js. Le résultat devrait afficher le titre de l'article et l'URL de l'image de couverture, et ressembler à ceci :

{

  title: 'Lawsuit: Twitter failed to pay $136,000 in rent at San Francisco office tower',

  paragraph: 'The Elon Musk-owned Twitter is facing another lawsuit alleging that it failed to pay its bills.',

  coverImage: 'https://cdn.arstechnica.net/wp-content/uploads/2023/01/getty-musk-twitter-800x533.jpg'

}

Passer au niveau supérieur

Maintenant que vous avez appris à extraire des données de base d'une seule page web à l'aide de Puppeteer et Cheerio, il est temps de faire passer vos compétences en web scraping au niveau supérieur. Voici ce que vous pouvez faire pour transformer ce scraper basique en un outil de pointe :

  • Extraire une catégorie entière : en modifiant l'URL et les sélecteurs dans votre code, vous pouvez extraire les articles d'une catégorie. Cela est utile pour extraire de grandes quantités de données ou pour suivre les mises à jour d'une catégorie spécifique de contenu.
  • Utiliser un agent utilisateur différent pour chaque requête : en modifiant l'agent utilisateur de votre scraper, vous pouvez contourner les restrictions et mieux imiter le comportement humain. Cela peut être utile pour scraper des sites web qui bloquent ou limitent les requêtes en fonction de l'agent utilisateur.
  • Intégrer un réseau de proxys : un réseau de proxys peut vous aider à faire tourner les adresses IP et à éviter la détection. Cela est particulièrement utile pour extraire des données de sites web qui bloquent les adresses IP ou limitent le débit des requêtes.
  • Résolution des captchas : certains sites web utilisent des captchas pour empêcher le scraping automatisé. Il existe plusieurs façons de contourner les captchas, comme l'utilisation d'un service de résolution de captchas ou la mise en œuvre d'un modèle d'apprentissage automatique pour reconnaître et résoudre les captchas.

Conclusion

À présent, vous devriez avoir une bonne compréhension des atouts et des limites de Cheerio et de Puppeteer, et vous devriez être en mesure de prendre une décision éclairée quant à celui qui correspond le mieux à vos besoins. Qu'il s'agisse d'un développeur débutant ou expérimenté, il existe un outil de scraping web pour vous.

Si vous souhaitez approfondir vos connaissances sur Cheerio, consultez cet article rédigé par l'un de mes collègues. Il aborde en détail des sujets tels que l'identification des nœuds à l'aide de la fonction « Inspecter l'élément », l'enregistrement des résultats sur le disque et le scraping d'un site volumineux comme Reddit.

Nous n'avons fait qu'effleurer les capacités de Puppeteer. Si vous souhaitez en savoir plus, cet article approfondit le sujet et aborde des thèmes tels que la capture d'écran, l'envoi d'un formulaire et le scraping de plusieurs pages.

Nous espérons que cet article vous a aidé à comprendre les options qui s'offrent à vous et à prendre la meilleure décision pour vos besoins en matière de scraping web.

Une alternative encore plus simple

Bien que nous ayons discuté des points forts et des limites de Cheerio et de Puppeteer, il existe une autre option que vous pourriez envisager : utiliser un service de scraping tel que WebScrapingAPI.

L'utilisation d'un service de ce type présente plusieurs avantages :

  • Vous pouvez être sûr que le scraper est fiable et bien entretenu : il dispose de ressources dédiées pour garantir qu'il est à jour et fonctionne correctement. Cela peut vous faire gagner beaucoup de temps et d'efforts par rapport à la création et à la maintenance de votre propre scraper.
  • Un service de scraper web est souvent plus rentable que de développer le vôtre : vous n'aurez pas à investir dans le développement et la maintenance du scraper, et vous pourrez profiter des fonctionnalités spéciales ou de l'assistance proposée par l'entreprise.
  • Le risque d'être détecté ne sera plus un problème : un scraper web premium évite la détection et peut souvent extraire les données des sites web de manière plus efficace et performante qu'un scraper que vous créez vous-même. Cela vous fait gagner du temps et vous permet de vous concentrer sur l'analyse et l'exploitation des données extraites.

Nous vous encourageons à essayer notre scraper web et à constater par vous-même les avantages d'utiliser un outil fiable et éprouvé. Créez un compte gratuit dès maintenant.

À propos de l'auteur
Suciu Dan, cofondateur @ WebScrapingAPI
Suciu Dancofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

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.