Montag, 28. Februar 2011

HTML Verarbeiten mit jsoup

In den letzten Tagen hatte ich häufiger mit der Verarbeitung von HTML-Daten zu tun. Zum einen sollten Inhalte aus fremden HTML-Seiten extrahiert, zum Anderen sollten HTML-formatierte Eingaben gesäubert werden. Dabei kam mir sehr gelegen, dass ich vor einiger Zeit schonmal über die jsoup-Bibliothek geblogged hatte, die ich bei dieser Gelegenheit auch ausprobieren wollte. Um das Ergebnis vorweg zu nehmen, jsoup funktioniert großartig.

Die API ist extrem einfach gehalten. Man erzeugt einfach via Jsoup.parse(html); ein org.jsoup.nodes.Document, das man dann wiederum nach allen Elementen einer Klasse, eines bestimmten Tag-Typs etc. abfragen kann.

Was man unbedingt machen sollte, wenn man HTML-Eingaben verarbeitet bzw. überhaupt Eingaben verarbeitet, die vielleicht irgendwann wieder auf die HTML-Oberfläche gelangen könnten, ist sie zu säubern. Tut man das nicht, hat man schnell eine Sicherheitslücke (Stichwort Cross-Site-Scripting). Für genau diesen Fall bringt jsoup eine Methode mit, die alles kritische aus der HTML-Eingabe entfernt. Was kritisch ist, lässt sich mittels Whitelist auch selbst definieren, die Basic-Whitelist ist aber schon recht gut überdacht und deckt die gängigen Formatierungstags ab. Der Aufruf mit Basic-Whitelist ist auch hier wieder denkbar einfach: Jsoup.clean(html, Whitelist.basic())

Die Whitelist lässt sich fein granular steuern. Sowohl an Tags, als auch an Attribute und deren Inhalt wurde gedacht. Außerdem mag ich die Kettenschreibweise einfach gern:

Whitelist w = new Whitelist().addTags("a", "b", "blockquote")
  .addAttributes("a", "href")
  .addProtocols("a", "href", "ftp", "http", "https", "mailto")
  .addProtocols("blockquote", "cite", "http", "https")
  .addEnforcedAttribute("a", "rel", "nofollow");

Ein paar Beispiele finden sich im jsoup Cookbook.

jsoup.org

Keine Kommentare:

Kommentar veröffentlichen