Welke HTML-parser is de beste?

Ik codeer veel parsers. Tot nu toe gebruikte ik HtmlUnit headless browser voor parsing en browserautomatisering.

Nu wil ik beide taken scheiden.

Omdat 80% van mijn werk alleen maar parseren is, wil ik een lichte HTML-parser gebruiken omdat het in HtmlUnit veel tijd kost om eerst een pagina te laden, dan de broncode op te halen en deze vervolgens te ontleden.

Ik wil weten welke HTML-parser de beste is. De parser zou beter zijn als deze dicht bij de HtmlUnit-parser ligt.


BEWERKEN:

In het beste geval wil ik ten minste de volgende functies:

  1. Snelheid
  2. Gemakkelijk om elk HtmlElement te vinden aan de hand van zijn “id” of “naam” of “tagtype”.

Het zou goed voor mij zijn als het de vuile HTML-code niet opschoont. Ik hoef geen HTML-bron op te schonen. Ik heb gewoon een gemakkelijkste manier nodig om door HtmlElements te navigeren en er gegevens uit te halen.


Antwoord 1, autoriteit 100%

Zelfplug: ik heb zojuist een nieuwe Java HTML-parser uitgebracht: jsoup. Ik vermeld het hier omdat ik denk dat het zal doen wat je zoekt.

De feesttruc is een CSS-selectorsyntaxis om elementen te vinden, bijvoorbeeld:

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();

Zie de Selectorjavadoc voor meer informatie.

Dit is een nieuw project, dus alle ideeën voor verbetering zijn zeer welkom!


Antwoord 2, autoriteit 8%

De beste die ik tot nu toe heb gezien is HtmlCleaner:

HtmlCleaner is een open-source HTML-parser geschreven in Java. HTML die op internet wordt gevonden, is meestal vies, slecht gevormd en ongeschikt voor verdere verwerking. Voor elke serieuze consumptie van dergelijke documenten, is het noodzakelijk om eerst de rommel op te ruimen en de volgorde aan te brengen in tags, attributen en gewone tekst. Voor het gegeven HTML-document herschikt HtmlCleaner afzonderlijke elementen en produceert het goedgevormde XML. Standaard volgt het vergelijkbare regels die de meeste webbrowsers gebruiken om een documentobjectmodel te maken. De gebruiker kan echter een aangepaste tag en regelset opgeven voor het filteren en balanceren van tags.

Met HtmlCleaner kun je elk element lokaliseren met XPath.

Voor andere html-parsers zie deze SO-vraag.


Antwoord 3, autoriteit 2%

Ik stel voor Validator.nu’s parser, gebaseerd op het HTML5-ontledingsalgoritme. Het is de parser die in Mozilla van 2010-05-03 wordt gebruikt

Other episodes