Node.js-Module: HTML-Parser

HTML-Parser – Webseiten mit Node.js auslesen
Kommentare

Im zweiten Teil der Reihe zum Thema Node.js-Module soll es diesmal um den Einsatz von HTML-Parser gehen, mit denen sich HTML-Strukturen zerlegen und verarbeiten lassen.

Node.js als Webserver ist mittlerweile ja nichts Neues mehr. Durch Frameworks wie Express.js lässt sich mit nur wenigen Zeilen Code ein voll funktionsfähiger Webserver inklusive Routing erstellen, und auch Template Engines und Datenbankanbindungen sind kein Problem. Aber Node.js kann nicht nur die Rolle eines Servers einnehmen, sondern auch als HTTP-Client eingesetzt werden. Zu diesem Zweck verfügt Node.js in seinem http-Modul über eine Clientkomponente, mit der Sie ganz einfach Anfragen an einen beliebigen Webserver senden und mit der Antwort entsprechend umgehen können (Listing 1).

var http = require('http');

var options = {hostname: 'phpmagazin.de', port: 80, path: '/', method: 'GET'};

var req = http.request(options, function(res) {
  res.setEncoding('utf-8');
  res.on('data', function (chunk) {
    console.log(chunk);
  });
});

req.end();

Mit der request-Methode können Sie mit anderen Webservern sprechen. Das erste Argument ist das Konfigurationsobjekt, das zweite ist die Callback-Funktion, in der Sie die Antwort des Servers bearbeiten können. Wichtig ist, dass Sie den Request mit der end-Methode abschließen. Der Code des Beispiels gibt die HTML-Struktur der Seite phpmagazin.de aus.

In der Callback-Funktion können Sie beispielsweise den Inhalt in eine Datei auf Ihrem Server speichern oder die Antwort des Servers weiter verarbeiten. Und hier liegt auch das größte Problem: HTML-Strukturen allein mit String– oder Regex-Funktionen von JavaScript zu zerlegen, macht wenig Spaß. Aus diesem Grund sollten Sie für diesen Zweck auf einen HTML-Parser zurückgreifen.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

htmlparser2

Der große Vorteil von HTML-Parsern ist, dass sie eine HTML-Zeichenkette zerlegen und Ihnen die Möglichkeit zur Verarbeitung geben. Ein Beispiel für einen HTML-Parser ist der htmlparser2. Sie installieren ihn mit dem Kommando npm install htmlparser2.

var htmlparser = require('htmlparser2');

var parser = new htmlparser.Parser({
  onopentag: function(name, attr) {
    if (name === 'div') {
      console.log(attr);
    }
  }
});

parser.write('<p name="world">hello</p><div id="world">hello</div>');
parser.end();

Der Konstruktor des Parsers erhält ein Objekt, das angibt, was mit der eingegebenen HTML-Zeichenkette passieren soll (Listing 2). Es ist eine Reihe von Eigenschaften in diesem Objekt verfügbar, die jeweils mit einer Callback-Funktion hinterlegt werden können. Beispiele hierfür sind onopentag, onattribute oder ontext. Auf der Instanz des Parsers können Sie dann die write-Methode mit der HTML-Zeichenkette aufrufen, wobei write mehrmals aufgerufen werden kann. Das Parsing wird mit der end-Methode abgeschlossen.

cheerio

Möchten Sie die HTML-Struktur zerlegen oder sind Sie auf der Suche nach bestimmten Elementen, kann der htmlparser2 schnell anstrengend werden. Aus diesem Grund gibt es cheerio, einen HTML-Parser, der auf dem htmlparser2 aufbaut und ihn um ein Interface erweitert, das Ihnen aus jQuery bekannt sein dürfte. Die Installation erfolgt mit dem Kommando npm install cheerio. Die Verwendung des Moduls gestaltet sich sehr einfach:

var cheerio = require('cheerio');

$ = cheerio.load('<p name="world">hello</p><div id="world">hello</div>');
console.log($('#world').html());

Sie müssen nur die HTML-Struktur laden und können dann in gewohnter jQuery-Manier damit arbeiten und Informationen auslesen oder die Struktur modifizieren und ausgeben.

Fazit

Mit diesem Wissen ausgerüstet, steht Ihnen nun nichts mehr im Wege, alle Webseiten dieser Welt mit Node.js zu besuchen und Informationen auszulesen. Die Spanne reicht vom Wetterbericht für morgen über die aktuellen Börsenkurse bis hin zu Bildern und Videos.

Aufmacherbild: EKG Readout von Shutterstock / Urheberrecht: Ryan R Fox

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -