Passer au contenu

Web scraping avec Cheerio en 2024

Cheerio est une bibliothèque de scraping rapide, flexible et riche en fonctionnalités pour Node.js. Avec Cheerio, vous pouvez facilement charger du HTML, l'analyser et extraire des données à l'aide d'une API simple mais puissante inspirée des sélecteurs jQuery.

Dans ce guide complet, nous explorerons le web scraping du début à la fin en utilisant Cheerio dans Node.js. Nous couvrirons :

  • Qu'est-ce que Cheerio et pourquoi l'utiliser
  • Mise en place de l'environnement Cheerio
  • Chargement et analyse HTML
  • Utiliser les sélecteurs Cheerio
  • Extraction et manipulation de données
  • Gérer le contenu dynamique avec Puppeteer
  • Écrire des données récupérées dans des fichiers
  • Surmonter les défis courants tels que les mesures anti-grattage
  • Tester les web scrapers avec Jest
  • Meilleures pratiques et alternatives

Alors si vous êtes prêt à maîtriser le web scraping Cheerio en 2024, commençons !

Qu'est-ce que Cheerio et pourquoi l'utiliser ?

Cheerio est une bibliothèque de scraping rapide, flexible et modulaire conçue spécifiquement pour l'environnement Node.js côté serveur.

Voici quelques avantages clés de l’utilisation de Cheerio :

  • Syntaxe de style jQuery : L'API est conçue pour imiter jQuery, ce qui rend Cheerio facile à utiliser pour les développeurs familiarisés avec le développement Web.

  • Brûlant vite: Cheerio fonctionne sans navigateur, ce qui lui permet de fonctionner à la vitesse de Node.js.

  • Poids léger: Pesant seulement 6.6 Ko minifiés, il a un faible encombrement par rapport aux frameworks de test de navigateur.

  • Conception modulaire: Construit comme un module Node.js, il peut être étendu et personnalisé.

  • API intuitive : Une foule de méthodes utiles comme .text(), .attr(), $.find() faciliter la manipulation du HTML.

Pour la plupart des sites Web statiques et les besoins de base en matière de scraping, Cheerio offre un excellent équilibre entre vitesse, flexibilité et facilité d'utilisation. Voyons-le en action ensuite.

Configuration de l'environnement Cheerio

Pour commencer à utiliser Cheerio pour le web scraping, nous devons d'abord configurer un environnement Node.js. Voici les étapes :

1. Installez Node.js

Se diriger vers nodejs.org et téléchargez la version LTS de Node.js pour votre système d'exploitation. Exécutez le programme d'installation.

2. Initialiser un projet Node

Ouvrez votre terminal/invite de commande, accédez au répertoire de votre choix et tapez :

npm init -y

Cela créera un package.json fichier avec les configurations par défaut pour votre projet Node.

3. Installez Cheerio

Installez maintenant Cheerio en exécutant :

npm install cheerio

Cela installera Cheerio et l'ajoutera à votre package.json fichier en tant que dépendance.

Et c'est tout! Nous avons maintenant un environnement Node.js prêt avec la bibliothèque Cheerio installée.

Chargement et analyse HTML avec Cheerio

Commençons à utiliser Cheerio en chargeant du HTML. Le load La méthode nous permet d'analyser le HTML de deux manières :

1. Charger à partir d'une chaîne

On peut charger directement du HTML passé sous forme de chaîne :

// Import Cheerio
const cheerio = require(‘cheerio‘); 

// HTML string
const html = `
  <h2>Hello World</h2>
  <p>This is some paragraph text.</p> 
`;

// Load HTML 
const $ = cheerio.load(html);

2. Charger à partir d'un fichier

Nous pouvons également charger du HTML à partir d'un fichier local :

const fs = require(‘fs‘);
const html = fs.readFileSync(‘index.html‘); 

const $ = cheerio.load(html);

Cela analyse le HTML et nous permet de le manipuler à l'aide des sélecteurs et des méthodes Cheerio.

Utiliser les sélecteurs Cheerio

Les sélecteurs Cheerio fournissent une interface de type jQuery pour interroger du HTML et extraire des données.

Quelques exemples:

Par balise :

const headings = $(‘h2‘); // Select all h2 elements

Par classe :

const paragraphs = $(‘.paragraph‘); // Select by class name

Par attribut :

const inputs = $(‘input[name="first_name"]‘); // Inputs with specific name attribute

Par type:

const submitButtons = $(‘input[type="submit"]‘);

Et bien d’autres combinaisons sont possibles !

Nous pouvons appeler .text() or .html() sur les sélections pour obtenir leur contenu sous forme de chaîne.

const firstParagraph = $(‘p‘).first().text(); // Returns text of first paragraph

Cela nous permet d'extraire toutes les données souhaitées du HTML à l'aide de sélecteurs.

Extraction et manipulation de données

Voyons maintenant comment extraire et formater des données structurées à partir de HTML à l'aide de Cheerio :

// Sample HTML
const html = `
  <div class="book">
    <h2 class="title">The Great Gatsby</h2> 
    <p class="author">F. Scott Fitzgerald</p>
    <p class="description">The Great Gatsby is a 1925 novel by American writer F. Scott Fitzgerald.</p>
  </div>

  <div class="book">
    <h2 class="title">To Kill a Mockingbird </h2>
    <p class="author">Harper Lee</p>
    <p class="description">To Kill a Mockingbird takes place in the fictional town of Maycomb, Alabama during the Great Depression.</p> 
  </div>
`;

// Load HTML
const $ = cheerio.load(html);

// Define data to extract
const books = []; 

$(‘.book‘).each((i, book) => {

  // Extract info from each book
  const title = $(book).find(‘.title‘).text();
  const author = $(book).find(‘.author‘).text();
  const description = $(book).find(‘.description‘).text();

  books[i] = {
    title,
    author,
    description
  };

});

console.log(books);

/*
[
  {
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    ...
  },
  { 
    "title": "To Kill a Mockingbird",
    "author": "Harper Lee",
   ...
  }
]
*/

Cela nous permet d'extraire des données du HTML dans un format structuré prêt à être traité et stocké. La véritable puissance de Cheerio réside dans son API concise mais polyvalente pour interroger les éléments DOM.

Gestion du contenu dynamique avec Puppeteer

Une limitation de Cheerio est qu'il traite uniquement le HTML statique, pas le contenu rendu en JavaScript. Pour surmonter ce problème, nous pouvons utiliser Puppeteer en combinaison avec Cheerio.

Puppeteer est une bibliothèque Node qui fournit une API de haut niveau pour contrôler Chrome sans tête. Voici comment nous pouvons l'utiliser avec Cheerio :

1. Installez Puppeteer

npm install puppeteer 

2. Lancez une instance de navigateur

const puppeteer = require(‘puppeteer‘);

const browser = await puppeteer.launch();
const page = await browser.newPage();

3. Accédez à la page cible

await page.goto(‘https://example.com‘); 

4. Extraire le HTML rendu

const html = await page.content();

5. Passer à Cheerio

const $ = cheerio.load(html);

Maintenant nous avons le entièrement rendu HTML et je peux le gratter avec Cheerio !

Ce processus d'automatisation du navigateur nous permet de supprimer les sites complexes et lourds en JavaScript. Les possibilités sont infinies en combinant Puppeteer et Cheerio.

Écriture de données récupérées dans des fichiers

Pour stocker les données récupérées, nous pouvons les écrire dans des fichiers structurés comme CSV ou JSON. Voici un exemple d'enregistrement des données de livres dans un fichier JSON avec Node fs module:

const fs = require(‘fs‘);

/* 
  Books data extracted and formatted with Cheerio 
*/
const books = [
  {
   "title": "The Great Gatsby",
   "author": "F. Scott Fitzgerald"
  },
  {
   "title": "To Kill a Mockingbird",
   "author": "Harper Lee"
  }
];

const json = JSON.stringify(books);

fs.writeFile(‘books.json‘, json, ‘utf8‘, (err) => {
  if (err) {
    console.log(err);
  } else {
    console.log("JSON file has been saved."); 
  }
}); 

Nous stringifions d'abord les données en JSON valide, puis utilisons fs.writeFile() pour l'enregistrer dans un fichier sur notre système de fichiers.

Cela nous permet de stocker efficacement les données récupérées pour un traitement et une analyse ultérieurs. Les données peuvent également être insérées dans des bases de données et consommées par d'autres applications.

Surmonter les défis communs

Le web scraping avec Cheerio peut poser des défis, notamment :

Contenu dynamique – Cheerio lui-même ne peut analyser que du HTML statique. Nous pouvons intégrer Puppeteer comme indiqué précédemment pour surmonter ce problème.

Grands ensembles de données – La gestion de la mémoire peut devenir un problème lors du scraping de grandes pages. Nous pouvons traiter les données par lots pour gérer les problèmes importants.

Mesures anti-grattage – De nombreux sites tentent de détecter et de bloquer les scrapers. L’utilisation de proxys, l’usurpation d’en-têtes et la mise en œuvre de délais peuvent aider à contourner les protections.

Gestion des erreurs – Les erreurs réseau, les 404, les captchas, etc. doivent être traités correctement pour que les scrapers soient robustes. Essayer/attraper les blocs et réessayer les requêtes ayant échoué est très utile.

Bien que difficiles, ces problèmes peuvent être surmontés grâce à des stratégies intelligentes et persistants malgré les essais et les erreurs du scraping.

Tester les Web Scrapers avec Jest

Les tests sont importants pour garantir que nos scrapers fonctionnent correctement sur différentes pages et scénarios.

il y a est un framework populaire pour tester le code JavaScript. Voyons comment tester un grattoir Cheerio avec Jest :

1. Installez Jest

npm install --save-dev jest

2. Fonction de grattoir d'importation

// books.js
import { getBookInfo } from ‘./scraper‘; 

// scraper.js
export const getBookInfo = (html) => {
  // Scraper implementation
};

3. Rédiger des cas de test

// books.test.js

test(‘Extracts book info‘, () => {

  const html = `
    <div class="book">
      <h2 class="title">The Great Gatsby</h2>
      <p class="author">F. Scott Fitzgerald</p>
    </div>
  `;

  const expected = {
    title: ‘The Great Gatsby‘,
    author: ‘F. Scott Fitzgerald‘  
  };

  expect(getBookInfo(html)).toEqual(expected);

});

4. Exécutez des tests

npm test

Cela nous permet de vérifier nos scrapers Cheerio en les testant par rapport à un exemple de code HTML. Nous pouvons écrire plusieurs cas de test avec différentes entrées et sorties attendues.

Pratiques d'excellence

Voici quelques bonnes pratiques à suivre lors de l’écriture de scrapers dans Cheerio :

  • Utilisez les sélecteurs CSS/DOM appropriés pour extraire les données plutôt que les expressions régulières qui peuvent être fragiles.

  • Décomposez les sélecteurs complexes en sélecteurs plus simples pour plus de lisibilité et de maintenance.

  • Validez et désinfectez toutes les données extraites – ne leur faites jamais confiance à leur valeur nominale.

  • Testez toujours minutieusement les scrapers sur différentes pages et scénarios.

  • Implémentez une stratégie robuste de gestion des erreurs avec des blocs try/catch et des tentatives.

  • Utilisez des outils tels que Puppeteer, des proxys et des en-têtes pour contourner les mesures anti-scraping.

  • Limitez le taux de requêtes sur les sites et mettez en œuvre des délais pour éviter de surcharger les serveurs.

  • Suivez le fichier robots.txt d'un site et respectez les limites de requêtes pour éviter les blocages.

Le respect des meilleures pratiques permet d'obtenir des grattoirs fiables, efficaces et prêts pour la production.

Bibliothèques de scraping alternatives

Bien que Cheerio soit un choix populaire, voici quelques alternatives :

  • Marionnettiste – Scraping et automatisation de Chrome sans tête.
  • Dramaturge – Automatisation du navigateur avec prise en charge de plusieurs navigateurs.
  • Scrapy – Framework de scraping hautes performances complet pour Python.
  • extraction de nœud – Bibliothèque de requêtes HTTP simple pour Node.js.
  • Axios – Client HTTP basé sur une promesse pour Node.js.

Chacun a ses propres atouts et compromis. Pour les besoins simples de grattage, Cheerio propose une option légère mais puissante.

Conclusion

Cheerio est une bibliothèque de scraping polyvalente qui vous permet d'extraire efficacement des données du HTML à l'aide de sélecteurs CSS.

Avec Cheerio, vous pouvez analyser des documents HTML, sélectionner des éléments, extraire du texte/attrs, parcourir des nœuds, et bien plus encore, le tout avec une syntaxe concise de style jQuery.

Lorsqu'il est combiné avec des outils comme Puppeteer, Cheerio vous permet de supprimer des sites Web statiques et dynamiques à partir de Node.js. Une gestion et des tests robustes des erreurs produisent des grattoirs Web résilients, prêts pour le monde réel.

Il y a une courbe d’apprentissage pour maîtriser comme pour toute compétence. Mais en commençant par les bases de ce guide, vous êtes désormais équipé pour construire d'incroyables grattoirs avec Cheerio.

Les possibilités sont infinies une fois que vous prenez confiance en vous avec cet outil tranchant. La récupération de données est à portée de main – alors sortez et rassemblez des informations intéressantes sur le Web !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *