Will man schnell und einfach HTML-Dateien parsen bzw. auswerten, geht das mit der schönen JSoup-Api. Hier gibt es eine Mindmap für den schnellen Überblick.
Es sind dann nur zwei Zeilen nötig um z.B. den Titel einer Webseite einzulesen:
1 2 |
Document doc = Jsoup.connect("http://reise.wenzlaff.de/reisetabelle/").get(); System.out.println("Der Titel der Website: " + doc.title()); |
Hier mal ein Zitat aus der Orginal Api-Beschreibung:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML specification, and parses HTML to the same DOM as modern browsers do. parse HTML from a URL, file, or string find and extract data, using DOM traversal or CSS selectors manipulate the HTML elements, attributes, and text clean user-submitted content against a safe white-list, to prevent XSS output tidy HTML jsoup is designed to deal with all varieties of HTML found in the wild; from pristine and validating, to invalid tag-soup; j soup will create a sensible parse tree. |
Das sind doch Gründe!
Es braucht in der pom.xml des Maven Projekte nur diese eine Abhängigkeit angegeben zu werden:
1 2 3 4 5 |
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.9.2</version> </dependency> |
Hier dann mal eine Beispiel-Klasse, die eine Tabelle mit Reiseinformationen mit den Orten wo ich war einfach auf der Konsole ausgibt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
package de.wenzlaff.mqtt.client; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; /** * Beispiel zum parsen von HTML Dateien mit JSoup. * * In pom.xml die folgenden Abhängigkeit ergänzen: * * <pre> <dependency> <!-- jsoup HTML parser library @ http://jsoup.org/ --> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.9.2</version> </dependency> * </pre> * * @author Thomas Wenzlaff * @version 0.1 */ public class HtmlParser { /** * Beispiel Programm * * @param args * keine * @throws Exception * bei Fehler. */ public static void main(String[] args) throws Exception { // laden einer Html Seite über eine URL Document doc = Jsoup.connect("http://reise.wenzlaff.de/reisetabelle/").get(); // den Titel ausgeben System.out.println("Der Titel der Website: " + doc.title()); // die ganze Seite als Html System.out.println("Wir geben mal die ganze Seite als Html aus:" + doc.html()); // nur die Tabelle selektieren und als Html ausgeben Elements reiseTabelle = doc.select("#tablepress-12"); System.out.println("Die ganze Reisetabelle als HTML: " + reiseTabelle); // nur die KM selektieren und in einer Zeile // getrennt durch leerzeichen ausgeben Elements alleKmAusTabelle = doc.select(".column-6"); System.out.println("Alle km aus der Tabelle in einer Zeile: " + alleKmAusTabelle.text()); // und alle Länder ohne Html Tags ausgeben Elements alleLaenderAusTabelle = doc.select(".column-2"); System.out.println("Alle Länder aus der Tabelle ohne HTML Tags: " + alleLaenderAusTabelle.html()); } } |
Das Ergebnis wenn dieses Beispielprogramm ausgeführt wird, ua.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Alle Länder aus der Tabelle ohne HTML Tags: Land, Ort England, London Frankreich, Paris Spanien, Mallorca, Cala Rajada Spanien, Teneriffa Tunesien, Tunis Griechenland, Kreta, Heraklion Türkei, Antalya Italien, Rom Malediven, Male Ägypten, Kairo China, Hong Kong, Kowloon Niederland, Amsterdam Dominikanische Republik, Santo Domingo Portugal, Algarve Albuferia USA, Florida, Miami Zypern, Limassol (Israel, Jerusalem; Ägypten, Kairo) USA, Kalifornien, San Francisco Griechenland, Athen Indonesien, Bali (Singapur) USA, New York Malta, Valletta Mauritius, Port Louis Spanien, Madrid Japan, Tokio Bulgarien, Varna Dubai, Ras Al-Khaimah Spanien, Mallorca, Alcúdia Thailand, Pattaya Hawaii, Waikiki-Beach Seyshellen, Mahe Polen (Warschau, Danzig, Thorn ...) Sri Lanka, Ceylon Seyshellen, Mahe Irland, Dublin Schweden, Stockholm Estland, Tallinn Russland, St.-Petersburg Daenemark, Kopenhagen Türkei, Side USA Karibik (Miami, Fort Lauderdale, Aruba, Curacao, Grenada, Barbados, St. Lucia, Antigua, St. Maarten, St. Thomas) Italien, Sizilien (Catania, Taormina, Etna) Vietnam, Saigon (Ho-Chi-Minh-Stadt) * Kambodscha, Phnom Penh * Thailand, Bangkok * USA, Kalifornien, San Francisco * (nur Hinflug) USA, Florida, Miami * (nur Rückflug) |
Cool, weitere Beispiele sind auf der Homepage von Jsoup und hier zu finden.