JavaRush /Java-Blog /Random-DE /Einfaches HTML-Parsen mit jsoup
Stanislav
Level 21
Москва

Einfaches HTML-Parsen mit jsoup

Veröffentlicht in der Gruppe Random-DE
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 Klasse Documentaus 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 Agentist eine Kennung, die der besuchten Website mitgeteilt wird. Auf vielen Seiten ist es das wichtigste Kriterium für den Antispam-Filter. Referrerenthält die URL der Anforderungsquelle. Die Methode get()löst eine behandelte IOException aus, sodass wir alles in einen Block einschließen try/catchoder 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 diveinen Block mit der angegebenen Klasse, den wir zum Sampling verwenden. Einfaches HTML-Parsen mit jsoup - 1Lassen Sie uns die Klasse Elementsvon 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: Einfaches HTML-Parsen mit jsoup - 2Jetzt 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: Einfaches HTML-Parsen mit jsoup - 3Es 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());

Abschluss

Dieses Beispiel zeigt nur einen kleinen Teil dessen, wozu jsoup in der Lage ist. Hinzu kommt die Tatsache, dass Websites häufig aktualisiert werden und sich die Struktur des Markup-Codes ändert. Wenn Sie also mit Scraping arbeiten, müssen Sie bereit sein, sich an Änderungen anzupassen. Weitere Informationen und die aktuelle Version erhalten Sie auf der offiziellen Website jsoup.org ; mehr über Klassen und Methoden können Sie unter o7planning.org lesen . Ich hinterlasse einen Link zu meinem Github . Zum Zeitpunkt des Schreibens gibt es mehrere Telegram-Bots, die Jsoup zum Empfangen und Anzeigen von Informationen verwenden.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION