HTML-Parser auf Node.js [geschlossen]


198

Gibt es so etwas wie Rubys Nokogiri auf Nodejs? Ich meine einen benutzerfreundlichen HTML-Parser.

Ich hatte auf der Node.js-Modulseite einige Parser gesehen, aber ich kann nichts Hübsches und Frisches finden.


3
Was meinst du mit "freundlich"? Bequem zum Arbeiten und Auswählen von Knoten wie der XPath- und CSS-Auswahlunterstützung von Nokogiri? Kann ungültiges HTML mit "Tag-Suppe" analysiert werden?
Phrogz

Wenn Sie mit jQuery vertraut sind, ziehen Sie diese Antwort in Betracht .
Lucio Paiva

Antworten:


446

Wenn Sie DOM erstellen möchten, können Sie jsdom verwenden .

Es gibt auch Cheerio , es hat die jQuery- Oberfläche und es ist viel schneller als ältere Versionen von jsdom, obwohl sie heutzutage in der Leistung ähnlich sind.

Vielleicht möchten Sie einen Blick auf htmlparser2 werfen , einen Streaming-Parser, der laut Benchmark schneller als andere ist und standardmäßig kein DOM enthält. Es kann auch ein DOM erstellen, da es auch mit einem Handler gebündelt ist, der ein DOM erstellt. Dies ist der Parser, der von Cheerio verwendet wird.

parse5 sieht auch nach einer guten Lösung aus. Es ist ziemlich aktiv (11 Tage seit dem letzten Commit seit diesem Update), WHATWG-kompatibel und wird in jsdom , Angular und Polymer verwendet .

Und wenn Sie HTML für das Web-Scraping analysieren möchten , können Sie YQL 1 verwenden . Es gibt ein Knotenmodul dafür. YQL Ich denke, es wäre die beste Lösung, wenn Ihr HTML von einer statischen Website stammt, da Sie sich auf einen Dienst verlassen, nicht auf Ihren eigenen Code und Ihre eigene Verarbeitungsleistung. Beachten Sie, dass es nicht funktioniert, wenn die Seite von der robot.txt der Website nicht zugelassen wird, YQL jedoch nicht damit funktioniert.

Wenn die Website, die Sie kratzen möchten, dynamisch ist, sollten Sie einen kopflosen Browser wie phantomjs verwenden . Schauen Sie sich auch casperjs an , wenn Sie Phantomjs in Betracht ziehen. Und Sie können casperjs vom Knoten mit SpookyJS steuern .

Neben Phantomjs gibt es Zombiejs . Im Gegensatz zu Phantomjs, die nicht in Nodejs eingebettet werden können, ist Zombiejs nur ein Knotenmodul.

Für die letzteren Lösungen gibt es eine Nettuts + Toturial .


1 Seit August 2014, YUI - Bibliothek, die eine Voraussetzung für die YQL ist, ist nicht mehr aktiv gepflegt, Quelle


1
Sie können DOM von htmlparser2 mit dem DomHandler-Modul (im Lieferumfang von htmlparser2 enthalten) abrufen. Sie werden absichtlich getrennt, um andere Arten der HTML-Verarbeitung zu ermöglichen, ohne dass DOM erstellt werden muss.
besonders am

@esp Danke, bevor ich dachte, es sei kein Standard-DOM, habe ich diesen Abschnitt entsprechend geändert.
Farid Nouri Neshat

Ich bin mir nicht sicher, wie Sie YQL für das Crawlen verwenden - es ist eher für das Verbinden von Webdienstergebnissen, nicht für das Verarbeiten von Markups.
Dardenfall

@dardenfall Du hast recht, Crawlen ist nicht der richtige Begriff. Ich habe es durch Schaben geändert :)
Farid Nouri Neshat

@Farid - (hätte dich nur angeschrieben, wenn ich könnte) auf die Gefahr hin, in Kommentaren zu debattieren (sorry!) Ich sehe immer noch nicht, wie du es zum Scraping verwendest. Es funktioniert mit Webdiensten , nicht mit Websites, und mit wservices analysieren Sie selten HTML. Vielleicht XML, aber nicht HTML.
Dardenfall


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.