Will man schnell und einfach HTML-Dateien parsen bzw. auswerten, geht das mit der schönen JSoup-Api.
Es sind dann nur zwei Zeilen nötig um z.B. den Titel einer Webseite einzulesen:
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:
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:
<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:
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.
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.
