Obwohl ich noch ein Anfänger in Haskell bin, bin ich der festen Überzeugung, dass HTML-Parsing im Jahr 2012 mit CSS-Selektoren durchgeführt werden muss, und es scheint, dass die bisher empfohlenen Bibliotheken dieses Prinzip nicht verwenden.
Eine Möglichkeit ist HandsomeSoup, das auf HXT aufbaut:
http://egonschiele.github.com/HandsomeSoup/
http://codingtales.com/2012/04/25/scraping-html-with-handsomesoup-in-haskell
Diese Seite über HXT, auf der HandsomeSoup basiert, wird ebenfalls hilfreich sein (Sie benötigen getText oder deep getText):
http://adit.io/posts/2012-04-14-working_with_HTML_in_haskell.html
Eine andere Möglichkeit ist der Dom-Selektor:
http://hackage.haskell.org/package/dom-selector
Sie ist derzeit Alpha und ihre langfristige Instandhaltung könnte ein Problem darstellen. Der Vorteil von dom-selector ist, dass ich Unicode-Zeichen nicht mit HandsomeSoup zum Laufen bringen konnte. Mit dom-selector funktionierten sie von Anfang an.
Diese Frage hängt damit zusammen: Ist es möglich, Text oder ByteString auf HXT in Haskell zu verwenden?
dom-selector basiert auf html-conduit und xml-conduit, für die die Wartung gesichert scheint.
EDIT: Beachten Sie meine neuere Antwort zum linsenbasierten Parsing. Ich habe diese Antwort gelassen, da sie für sich genommen immer noch gut ist, aber ich persönlich würde jetzt lieber den anderen Ansatz verwenden.
1 Stimmen
Was fehlt Ihrer Meinung nach bei TagSoup?
1 Stimmen
Die Funktionen zum Durchsuchen des geparsten Dokuments scheinen begrenzter zu sein als bei Bibliotheken in anderen Sprachen. Die Funktionen für allgemeine Zwecke, wie z.B. Abschnitte, scheinen nicht so schlecht zu sein, aber es sind immer noch mehrere Zeilen Code für einige wirklich häufige Anwendungen erforderlich. Zum Beispiel erfordert die Auswahl eines Elements nach Klasse mindestens ein paar Zeilen Code, um das zu tun, was ein einziger Aufruf in Jquery wäre. Das wäre nicht schlecht für ein einzelnes Projekt, aber mein typischer Anwendungsfall ist ein kleines einmaliges Projekt. Also pflege ich entweder einige Helfer, oder wiederhole mich ein Haufen. Übersehe ich etwas?