Welcher HTML-Parser ist der beste? [geschlossen]

194

Ich codiere viele Parser. Bisher habe ich den kopflosen Browser HtmlUnit zum Parsen und zur Browserautomatisierung verwendet.

Jetzt möchte ich beide Aufgaben trennen.

Da 80% meiner Arbeit nur das Parsen umfasst, möchte ich einen leichten HTML-Parser verwenden, da es in HtmlUnit viel Zeit kostet, zuerst eine Seite zu laden, dann die Quelle abzurufen und sie dann zu analysieren.

Ich möchte wissen, welcher HTML-Parser der beste ist. Der Parser wäre besser, wenn er sich in der Nähe des HtmlUnit-Parsers befindet.


BEARBEITEN:

Am besten möchte ich mindestens die folgenden Funktionen:

  1. Geschwindigkeit
  2. Einfaches Auffinden von HTML-Elementen anhand ihrer "ID" oder "Name" oder "Tag-Typ".

Es wäre in Ordnung für mich, wenn der schmutzige HTML-Code nicht bereinigt würde. Ich muss keine HTML-Quelle bereinigen. Ich brauche nur einen einfachsten Weg, um über HtmlElements zu wechseln und Daten von ihnen zu sammeln.

Yatendra Goel
quelle
2
Wie meinst du "am besten"? Meinen Sie Geschwindigkeit, einfachen Übergang von der aktuellen Implementierung, Einhaltung der W3C-Standards, etwas anderes, an das ich nicht gedacht habe? Ihre Frage impliziert Geschwindigkeit, aber auch Entwicklungsübergangszeit. Einige Klarstellungen können anderen helfen, gute Parser zu empfehlen, die Ihren Anforderungen besser entsprechen.
Aperkins
2
Ihre Aussage "Ich codiere viele Parser" scheint nicht mit der Frage übereinzustimmen. Meinst du "Ich muss viel HTML-Parser verwenden?"
leer
11
Ich denke, diese Frage ist spezifisch genug, um vom "nicht konstruktiven" nahen Grund ausgenommen zu sein.
Bill the Lizard
9
Stimmen Sie ab, um dies bitte wieder zu öffnen. Dies ist spezifisch genug und sollte nicht geschlossen werden.
AZ_
3
Ja, einige Leute auf SO führen einen heiligen Krieg gegen heilige Kriege mit "besten" Fragen. So nervig. Die Antwortabstimmung zeigt deutlich die Nützlichkeit dieser Frage.
user1050755

Antworten:

396

Self Plug: Ich habe gerade einen neuen Java HTML Parser veröffentlicht: jsoup . Ich erwähne es hier, weil ich denke, es wird das tun, wonach Sie suchen.

Der Partytrick ist eine CSS-Selektorsyntax zum Auffinden von Elementen, z.

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Weitere Informationen finden Sie im Selector- Javadoc.

Dies ist ein neues Projekt, daher sind Verbesserungsvorschläge sehr willkommen!

Jonathan Hedley
quelle
15
Diese Sache ist fantastisch und ich liebe die Unterstützung der CSS-Auswahl. Ich weiß kaum, dass ich eine Java-Bibliothek verwende. :-)
William Pietri
17
Bitte hören Sie nicht auf, dies zu unterstützen. Genau das haben wir gebraucht, um HTML mit serverseitigem Java zu analysieren! Das ist fantastisch! Ich habe in nur wenigen Stunden einen Proxy erstellt, der alle src- und href-Links so ändert, dass sie vollständige Pfade zum Ursprungsserver enthalten.
jmort253
7
Ich habe es mir nur angesehen. Ich mag die Schnittstelle und Dokumentation. Es ist leicht zu verstehen. :)
Smaragdhieu
5
Gut gemacht! Ich habe jsoup in weniger als 10 Minuten zum Laufen gebracht.
Indrek Kõue
10
Unglaublich, das ist sooo krank. Ich konnte eine HTML-Seite innerhalb von Minuten verarbeiten. Vielen Dank für diese großartige Arbeit.
Michael-O
32

Das Beste, was ich bisher gesehen habe, ist HtmlCleaner :

HtmlCleaner ist ein in Java geschriebener Open-Source-HTML-Parser. Im Web gefundenes HTML ist normalerweise schmutzig, schlecht geformt und für die weitere Verarbeitung ungeeignet. Für einen ernsthaften Verbrauch solcher Dokumente ist es notwendig, zuerst das Durcheinander zu beseitigen und die Reihenfolge auf Tags, Attribute und normalen Text zu bringen. Für das angegebene HTML-Dokument ordnet HtmlCleaner einzelne Elemente neu an und erstellt wohlgeformtes XML. Standardmäßig folgen ähnliche Regeln, die die meisten Webbrowser zum Erstellen des Dokumentobjektmodells verwenden. Der Benutzer kann jedoch benutzerdefinierte Tags und Regelsätze zum Filtern und Ausgleichen von Tags bereitstellen.

Mit HtmlCleaner können Sie jedes Element mit XPath finden.

Für andere HTML-Parser siehe diese SO-Frage .

Tangens
quelle
1
Sie müssen den Proxy selbst verwalten und dann HtmlCleaner verwenden, um stattdessen Ihren Stream zu verarbeiten. => Es ist nicht bequem. T__T
Kidnan1991
Wäre HTMLTidy hier nicht eine bessere Option? html-tidy.org
Troy Witthoeft
1
Similar rules that the most of web browsers use- Das ist nicht sehr überzeugend
pguardiario