HTML-Parsing in JavaScript (Node.js): Auswahl des Tools für die Arbeit mit Webseiten
HTML-Parsing ist eine der Kernaufgaben bei der Entwicklung von Web-Scrapern, Inhaltsanalysatoren und automatisierten Tests. Im Node.js-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, die jeweils ihre eigenen Stärken haben. In diesem Artikel betrachten wir drei Hauptwerkzeuge: cheerio, jsdom und htmlparser2, und analysieren, wann und welches davon am besten verwendet wird.
1. Cheerio — jQuery für den Server
Die Bibliothek cheerio ist die beliebteste Wahl für HTML-Parsing in Node.js. Sie bietet eine vertraute jQuery-ähnliche Syntax zur Navigation und Manipulation des DOM-Baums. Cheerio erstellt kein vollständiges Browser-DOM, sondern arbeitet mit einer leichten Abstraktion, was sie sehr schnell macht.
Hauptfunktionen:
- Unterstützung von CSS-Selektoren (wie in jQuery)
- Schnelles Parsen ohne Ausführung von JavaScript
- Unveränderliche Methoden (ändern das ursprüngliche HTML nicht)
- Arbeit mit Attributen, Text und HTML-Struktur
Anwendungsbeispiel:
const cheerio = require('cheerio');const html = '<div class="content"><h1>Hallo, Welt!</h1><p>Artikeltext</p></div>';
const $ = cheerio.load(html);const title = $('h1').text();const paragraphs = $('p').map((i, el) => $(el).text()).get();
console.log(title); // "Hallo, Welt!"console.log(paragraphs); // ["Artikeltext"]2. JSDOM — Vollwertiger Browser in Node.js
Wenn Sie nicht nur statisches HTML parsen, sondern auch JavaScript-Skripte ausführen, Ereignisse emulieren oder mit modernen APIs (z. B. fetch, localStorage) arbeiten müssen, dann ist jsdom Ihre Wahl. Es erstellt eine vollständige Browserumgebung, was maximale Kompatibilität bietet, aber mehr Ressourcen erfordert.
Wann jsdom verwenden:
- Websites mit dynamischem Inhalt (SPA mit React/Vue)
- Notwendigkeit, Skripte der Seite auszuführen
- Testen von Webkomponenten
- Arbeit mit Ereignissen und asynchronen Operationen
Parsing-Beispiel:
const { JSDOM } = require('jsdom');const html = '<html><body><div id="app">Inhalt</div></body></html>';
const dom = new JSDOM(html);const document = dom.window.document;const content = document.getElementById('app').textContent;
console.log(content); // "Inhalt"3. Htmlparser2 — Maximale Leistung
Die Bibliothek htmlparser2 ist ein Low-Level-Parser, der auf Ereignisbasis arbeitet (SAX-ähnlicher Ansatz). Er erstellt keinen DOM-Baum, sondern generiert Ereignisse beim Auftreten jedes Tags, Attributs oder Textknotens. Dies macht ihn zum schnellsten Parser in Node.js.
Besonderheiten:
- Streaming-Verarbeitung (Dateien im Gigabyte-Bereich können geparst werden)
- Minimaler Speicherverbrauch
- Unterstützung von XML und HTML
- Keine integrierten Navigationsmethoden (eigene Logik erforderlich)
Anwendungsbeispiel:
const htmlparser2 = require('htmlparser2');const html = '<div class="item">Produkt 1</div><div class="item">Produkt 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() Auch in der Bibliothek
goose für Go: Vollständige Anleitung mit Beispielen
WebSocket-Bibliothek Kotlin: ktor-client-websockets für Echtzeit
SMS-Versand mit Swift (iOS/macOS): MessageUI-API und Drittanbieterdienste
Konfiguration von Swift-Apps: Die Bibliothek SwiftyConfig
Datenvalidierung in PHP: Vollständiger Leitfaden zu Tools und Bibliotheken