Parsing HTML en JavaScript (Node.js) : choix de l'outil pour travailler avec des pages web
Le parsing HTML est l'une des tâches clés lors du développement de web scrapers, d'analyseurs de contenu et de tests automatisés. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes, chacune avec ses propres atouts. Dans cet article, nous examinerons trois outils principaux : cheerio, jsdom et htmlparser2, et nous verrons quand et lequel utiliser.
1. Cheerio — jQuery pour le serveur
La bibliothèque cheerio est le choix le plus populaire pour le parsing HTML en Node.js. Elle offre une syntaxe similaire à jQuery pour la navigation et la manipulation de l'arbre DOM. Cheerio ne crée pas un DOM complet de navigateur, mais fonctionne avec une abstraction légère, ce qui la rend très rapide.
Fonctionnalités principales :
- Support des sélecteurs CSS (comme dans jQuery)
- Parsing rapide sans exécution de JavaScript
- Méthodes immuables (ne modifient pas le HTML source)
- Travail avec les attributs, le texte et la structure HTML
Exemple d'utilisation :
const cheerio = require('cheerio');const html = '<div class="content"><h1>Bonjour, le monde !</h1><p>Texte de l'article</p></div>';
const $ = cheerio.load(html);const title = $('h1').text();const paragraphs = $('p').map((i, el) => $(el).text()).get();
console.log(title); // "Bonjour, le monde !"console.log(paragraphs); // ["Texte de l'article"]2. JSDOM — un navigateur complet dans Node.js
Si vous avez besoin non seulement de parser du HTML statique, mais aussi d'exécuter des scripts JavaScript, d'émuler des événements ou de travailler avec des API modernes (par exemple, fetch, localStorage), alors jsdom est votre choix. Il crée un environnement de navigateur complet, offrant une compatibilité maximale, mais nécessitant plus de ressources.
Quand utiliser jsdom :
- Sites avec contenu dynamique (SPA sur React/Vue)
- Nécessité d'exécuter les scripts de la page
- Test de composants web
- Travail avec des événements et des opérations asynchrones
Exemple de parsing :
const { JSDOM } = require('jsdom');const html = '<html><body><div id="app">Contenu</div></body></html>';
const dom = new JSDOM(html);const document = dom.window.document;const content = document.getElementById('app').textContent;
console.log(content); // "Contenu"3. Htmlparser2 — performances maximales
La bibliothèque htmlparser2 est un parseur de bas niveau qui fonctionne sur la base d'événements (approche de type SAX). Il ne crée pas d'arbre DOM, mais génère des événements à la rencontre de chaque balise, attribut ou nœud de texte. Cela en fait le parseur le plus rapide dans Node.js.
Caractéristiques :
- Traitement en flux (possibilité de parser des fichiers de plusieurs gigaoctets)
- Consommation mémoire minimale
- Support XML et HTML
- Pas de méthodes intégrées pour la navigation (nécessité d'écrire sa propre logique)
Exemple d'utilisation :
const htmlparser2 = require('htmlparser2');const html = '<div class="item">Produit 1</div><div class="item">Produit 2</div>';
const items = [];const parser = new htmlparser2.Parser({ onopentag(name, attribs) { if (name === 'div' && attribs.class === 'item') { this.currentItem = ''; } }, ontext(text) { if (this.currentItem !== undefined) { this.currentItem += text; } }, onclosetag(name) { if (name === 'div' && this.currentItem !== undefined) { items.push(this.currentItem.trim() Aussi dans la bibliothèque
Configuration des applications Java : aperçu des bibliothèques et outils
Validation des données en PHP : Guide complet des outils et bibliothèques
Planificateur de tâches Kotlin : kotlinx.coroutines et bibliothèques pour tâches en arrière-plan