Vielleicht müssen Sie eines Tages Informationen von einer Website oder einem HTML-Dokument in Ihrer Anwendung abrufen, und ich sage ohne Umschweife, dass die Verwendung der jsoup-Bibliothek Ihre Aufgabe erheblich vereinfachen wird. Laut Wiki ist jsoup eine Open-Source-Java-Bibliothek, die zum Parsen, Extrahieren und Bearbeiten von in HTML-Dokumenten gespeicherten Daten entwickelt wurde.
Schneller Start
Die Bibliothek kann als JAR-Datei heruntergeladen und in ein Projekt eingefügt oder über Maven/Gradle verbunden werden. Ich werde am Ende des Artikels einen Link zur offiziellen Website hinterlassen: Dort finden Sie die aktuelle Version der Bibliothek. Im Beispiel verwenden wir die Verbindung über Maven. Fügen wir eine Abhängigkeit hinzu:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
Verwendung
Zunächst müssen Sie eine Instanz der KlasseDocument
aus org.jsoup.nodes.Document abrufen, die die Quelle für die Analyse angibt. Es kann entweder eine lokale Datei oder ein Link sein. In diesem Artikel verwenden wir beispielsweise die Website yandex.ru und versuchen, deren aktuellen Newsfeed abzurufen:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
ist eine Kennung, die der besuchten Website mitgeteilt wird. Auf vielen Seiten ist es das wichtigste Kriterium für den Antispam-Filter. Referrer
enthält die URL der Anforderungsquelle. Die Methode get()
löst eine behandelte IOException aus, sodass wir alles in einen Block einschließen try/catch
oder es einfach mit weiter auslösen können throws
. Wir haben jetzt den Quellcode für diese Seite erhalten. Bei Bedarf kann die jsoup-Bibliothek selbst beschädigte Elemente wiederherstellen. Jetzt müssen wir nur noch die Suche auf einen separaten Block eingrenzen. Die Anwendung der Methode select()
ist vielfältig: Sie ermöglicht die Suche nach Elementen nach Tag, Attributen, Klasse und anderen Parametern. Fast alle modernen Browser unterstützen die Möglichkeit, schnell nach dem Quellcode eines ausgewählten Elements zu suchen. Mit einfachen Manipulationen finden wir den Quellcode des benötigten Elements und erhalten div
einen Block mit der angegebenen Klasse, den wir zum Sampling verwenden. Lassen Sie uns die Klasse Elements
von org.jsoup.select.Elements verwenden, um alle Elemente aus unserem ausgewählten Block auszuwählen.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Jetzt haben wir so etwas: Jetzt müssen wir nur noch eine kleine Schleife verwenden, um alle Elemente zu durchlaufen:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Mit dieser Methode text()
können Sie den Markup-Code verwerfen und für alle eingehenden Elemente nur eine Textkombination übrig lassen. Das Ergebnis der Ausführung wird wie folgt aussehen: Es ist leicht zu erkennen, dass die tatsächliche Anzahl der empfangenen Zeilen nicht mit der tatsächlichen Anzeige auf der Seite übereinstimmt. Hier liegen die Fallstricke. Wenn Sie sich den Quellcode des Markups ansehen, werden Sie feststellen, dass sich die neuesten Nachrichten in einem bestimmten Zeitintervall animiert ändern. Einige dieser „Steine“ werden durch zusätzliche Probenahmen und natürlich Tests gelöst. Es kann sein, dass die ersten fünf Elemente die von uns benötigten Informationen enthalten und das sechste Element nur eine geskriptete Leerzeile enthält. Es kommt auch vor, dass Blöcke keine Bezeichner haben. Dann ist es möglich, mithilfe einer Methode direkt get(int index)
auf die Positionsnummer des betreffenden Elements zu verweisen.
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION