Wie lassen sich vorgegebene HTML-Elemente und Argumente aus Webseiten auslesen?
Vor der Verwendung von jsoup muss die Bibliothek in Form einer *.jar-Datei von https://jsoup.org/download heruntergeladen werden. Die Einbindung in ein Eclipse-Projekt erfolgt dann wie im Artikel Bibliothek einbinden beschrieben.
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JSoupBsp {
public static void main(String[] args) {
try {
// Dokument von URL laden
Document doc = Jsoup.connect("https://javabeginners.de").get();
// Liste der Anker holen
Elements values = doc
.select("div#referenzen ul li + li a[href]");
// Liste durchlaufen und Ankertexte und Sprungziele darstellen
for (Element elem : values) {
System.out.println(elem.text() + " -> " + elem.attr("href"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Im angeführten Beispiel werden die Verlinkungen auf der rechten Seite der Javabeginners-Webseite ausgelesen, die sich im Unterpunkt Referenzen & Literatur befinden.
Durch die statische Methode Jsoup.connect()
wird
zunächst ein Connection
-Objekt erstellt, dessen
Methode get()
dann ein Document
-Objekt
liefert. Es stellt die Gesamtheit des HTML-Dokumentes dar, dessen
Eigenschaften und Inhalte nun ausgelesen oder manipuliert werden
können.
Die Methode select()
des Document
-Objektes
erwartet als Parameter einen String, der das gewünschte
HTML-Element anhand seiner Stellung im Dokument (DOM) definiert. Zum
einfachen Auslesen der DOM-Hierarchie eines HTML-Dokumentes bieten
die meisten Browser entsprechende Werkzeuge an (z.B.
Firefox: Extras → Web-Entwickler → Inspektor).
Der hier übergebene Selektor
div#referenzen ul li + li a[href]
erklärt sich hiernach wie folgt:
Die Startseite von javabeginners.de, die hier angesprochen
wird, enthält ein div
-Element, das durch die ID referenzen
eindeutig angesprochen werden kann (IDs dürfen innerhalb eines
HTML-Dokumentes nur einmal deklariert werden).
Innerhalb dieses
Elementes befindet sich eine Liste (ul
) , in der
wiederum einzelne Listenpunkte (li
) enthalten sind.
Der
dann folgende Ausdruck +li
besagt, dass auf
Listen-Unterpunkte zugegriffen werden soll, die sich unmittelbar in
übergeordneten Listenpunkten befinden. Dies ist nur in den
Unterpunkten des Bereiches Referenzen & Literatur der
Fall.
Durch a[href]
werden hierin wiederum
Anker-Elemente angesprochen, die ein href
-Attribut
besitzen.
Die exakte Syntax solcher Selektoren kann in der Dokumentation der Klasse Selector
nachgelesen werden.
In einer einfachen for
-Schleife wird die ermittelte
Element-Liste anschließend durchlaufen und durch die Methode text()
der Ankertext und durch die Methode attr()
der Wert des
href
-Attributs ausgelesen und schließlich
dargestellt.
Die Ausgabe erscheint wie folgt:
Ältere Java-Versionen -> https://www.oracle.com/technetwork/java/archive-139210.html Java Code-Konventionen -> https://www.oracle.com/technetwork/java/index-135089.html Java L&F Design Guidelines -> https://www.oracle.com/technetwork/java/jlf-135985.html Java-Insel -> https://www.galileocomputing.de/openbook/javainsel4/ Java 7 - Mehr als eine Insel -> https://openbook.galileocomputing.de/java7/ Java-Handbuch 3. Auflage -> https://dbs.cs.uni-duesseldorf.de/lehre/docs/java/javabuch/html/cover.html Java-Handbuch aktuelle Download-Version -> https://www.javabuch.de/download.html Oracle Java-Tutorials -> https://www.oracle.com/technetwork/java/index-jsp-135888.html Java Generics FAQs -> https://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html James Gosling - Java: an Overview -> https://www.cs.dartmouth.edu/~mckeeman/cs118/references/OriginalJavaWhitepaper.pdf
1) Der Name jsoup schreibt sich durchgängig klein. Entgegen grammatikalischer Konventionen wird hierauf Rücksicht genommen.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.