Java: Internetseiten auslesen – Web Scraping mit jSoup

Posted: November 4th, 2013 | Filed under: Internet, Java, Programmieren, Tutorials | Tags: , , , , , , , , | 2 Comments »

imageUm Informationen aus einer Webseite heraus zu extrahieren (engl. web scraping), gibt es viele verschiedene Vorgehensweisen und Frameworks. Nach langer Suche bin ich endlich auf ein einfaches und gut dokumentiertes Framework gestoßen: jSoup

jSoup ist eine Java-Bibliothek mit der es möglich ist mittels CSS-Selektoren und dem Document Object Model (DOM), Seiteninhalte extrem einfach abzugreifen. Das folgende Beispiel erläutert die Funktionsweise des Frameworks und die Einfachheit der Handhabung.

Webseite analysieren

Ziel unseres Tutorial ist es, auf der Wikipedia Startseite die Ereignisse der “Was geschah am <aktuelles Datum>?”-Kategorie auszulesen.

Mit Hilfe der Debug-Konsole im Google Chrome Browser und dem Inspektor ist es möglich die HTML-Struktur zu genau zu analysieren. Unsere Informationen die wir abgreifen möchten befinden sich in einer Liste innerhalb des DIV mit der Id hauptseite-ereignisse.

image

Beispiel – Wikipedia parsen

Herunterladen könnt ihr die Java-Bibliothek jSoup hier: http://jsoup.org/download

Nachdem ihr die .jar-Datei jsoup-X.X.X.jar in euer Projekt eingebunden habt (so wird’s gemacht http://www.javabeginners.de/Grundlagen/Bibliothek_einbinden.php), könnt die das Framework wie folgt verwenden:

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 jSoupExample {

    public static void main(String[] args) {

        try {
            // Wikipedia Seite laden
            Document doc = Jsoup.connect("http://de.wikipedia.org/wiki/Wikipedia:Hauptseite").get();
           
            // Alle Listenelemente über den entsprechenden Selektor markieren
            // Ein Leerzeichen initiert ein Kindelement des Elternelementes (links)
            // div#hauptseite-ergeignisse  => Der DIV mit der ID hauptseite-ereignisse (# => id)
            // div.inhalt => Der DIV mit der Klasse inhalt (. => class)
            Elements ereignisse = doc.select("div#hauptseite-ereignisse div.inhalt ul li"); 

            // Selektierte Elemente ausgeben ohne HTML-Tags
            for (Element e : ereignisse) {
                System.out.println(e.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Konsolenausgabe

Führt man das obige Quellcode-Stück aus, so wird unser gewünschter Inhalt zeilenweise wie folgt ausgegeben:

1763 – In Havanna wird mit dem Bau der Festungsanlage San Carlos de La Cabaña begonnen.
1813 – Der an der badischen Revolution von 1848/49 beteiligte Politiker Lorenz Brentano, nach deren Scheitern im US-Exil und dort 1877 bis 1879 Kongress­abgeordneter, kommt zur Welt.
1913 – Am Königlichen Hoftheater Stuttgart wird Walter Braunfels’ Oper Ulenspiegel uraufgeführt.
1913 – Ein von Marseille kommender Schnellzug kollidiert bei Melun mit einem Postzug.
1988 – Die Uraufführung von Thomas Bernhards Drama Heldenplatz am Wiener Burgtheater löst einen Skandal aus.

Alternativen

Viel Spaß beim Auslesen!


2 Comments on “Java: Internetseiten auslesen – Web Scraping mit jSoup”

  1. 1 Christian Behret said at 14:28 on November 25th, 2014:

    Hallo Frank,

    mich interessiert, was ich bei doc.select in die Klammer schreiben muss, um meinen Text unten (Lorem ipsum…) in Eclipse in der Console ausgegeben zu bekommen.

    Ich bin für jede Hilfe dankbar.

    Viele Grüße – Christian

    aussagekräftiger Titel der Seite

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr…

  2. 2 admin said at 14:35 on November 25th, 2014:

    Hallo Christian,

    je nach dem wo der Text im HTML Dokument steht.

    Falls er sich zum Beispiel direkt im BODY-Element befindet, wie bei dir, dann reicht es

    doc.select(„body“);

    zu schreiben…


Leave a Reply