JavaRush /Java-Blog /Random-DE /3 Beispiele für das Parsen einer HTML-Datei in Java mit J...
Sdu
Level 17

3 Beispiele für das Parsen einer HTML-Datei in Java mit Jsoup

Veröffentlicht in der Gruppe Random-DE
3 Beispiele für das Parsen einer HTML-Datei in Java mit Jsoup - 1HTML ist der Kern des WEB. Alle Internetseiten, die Sie sehen, basieren auf HTML, unabhängig davon, ob sie dynamisch mit JavaScript, JSP, PHP, ASP oder anderen Webtechnologien generiert werden. Tatsächlich analysiert Ihr Browser den HTML-Code und zeigt ihn auf eine für Sie bequeme Weise an. Was aber, wenn Sie ein HTML-Dokument analysieren und darin ein Element, Tag oder Attribut finden oder mit einem Java-Programm prüfen müssen, ob ein bestimmtes Element vorhanden ist oder nicht? Wenn Sie mehrere Jahre Java-Programmierer gewesen wären, hätten Sie das XML-Parsing sicher mit Parsern wie DOM oder SAX durchgeführt. Aber ironischerweise gibt es Zeiten, in denen Sie ein HTML-Dokument aus einer einfachen Java-Anwendung analysieren müssen, die keine Servlets und andere Java-Webtechnologien enthält. Darüber hinaus enthält Core JDK auch keine HTTP- oder HTML-Bibliotheken. Aus diesem Grund fragen viele Java-Programmierer Google beim Parsen einer HTML-Datei, wie sie den Wert eines HTML-Tags in Java ermitteln können. Als ich darauf stieß, war ich mir sicher, dass die Lösung eine Open-Source-Bibliothek sein würde, die die von mir benötigte Funktionalität implementierte, aber ich wusste nicht, dass sie so wunderbar und funktionsreich sein würde wie Jsoup. Es unterstützt nicht nur das Lesen und Parsen von HTML-Dateien, Attributen und CSS-Klassen im JQuery-Stil, sondern ermöglicht Ihnen gleichzeitig auch deren Änderung. Mit Jsoup können Sie mit einem HTML-Dokument alles machen, was Sie wollen. In diesem Artikel analysieren wir eine HTML-Datei und ermitteln die Namen und Attribute der Tags. Wir sehen uns auch Beispiele für das Herunterladen und Parsen von HTML aus einer Datei und einer beliebigen URL an, beispielsweise der Google-Startseite.

Was ist Jsoup?

Jsoup ist eine Open-Source-Java-Bibliothek für die Arbeit mit echtem HTML. Es bietet eine sehr praktische API zum Abrufen und Bearbeiten von Daten mithilfe der besten DOM-, CSS- und jQuery-ähnlichen Techniken. Jsoup implementiert die WHATWG HTML5-Spezifikation und analysiert HTML im selben DOM wie moderne Browser wie Chrome und Firefox. Hier sind einige der nützlichen Funktionen der Jsoup-Bibliothek:
  • Jsoup kann HTML aus einer URL, einer Datei oder einem String scrapen und analysieren.
  • Jsoup kann Daten mithilfe von DOM-Traversal oder CSS-Selektoren finden und extrahieren.
  • Mit Jsoup können Sie HTML-Elemente, Attribute und Text bearbeiten.
  • Jsoup bietet eine Whitelist-Bereinigung der vom Benutzer bereitgestellten Informationen, um XSS-Angriffe zu verhindern.
  • Jsoup erzeugt auch „ordentliches“ HTML.
Jsoup ist so konzipiert, dass es mit den verschiedenen Arten von HTML funktioniert, die in der realen Welt vorkommen, einschließlich ordnungsgemäß validiertem HTML mit einem unvollständigen, nicht validierten Satz von Tags. Einer der Hauptvorteile von Jsoup ist seine Zuverlässigkeit.

Parsen von HTML in Java mit Jsoup

In diesem Tutorial sehen wir drei verschiedene Beispiele für das Parsen und Durchlaufen eines HTML-Dokuments in Java mit Jsoup. Im ersten Beispiel analysieren wir einen HTML-String, der Tags in Form eines Java-String-Literals enthält. Im zweiten Beispiel laden wir unser HTML-Dokument aus dem Internet herunter und im dritten Beispiel laden wir unsere eigene Beispiel-HTML-Datei login.html zum Parsen herunter. Bei dieser Datei handelt es sich um ein Beispiel-HTML-Dokument, das aus einem „title“-Tag und einem „div“-Tag im Abschnitt „body“ besteht, der das HTML-Formular enthält. Das Formular enthält Felder zur Eingabe eines Benutzernamens und Passworts sowie Reset- und Bestätigungsschaltflächen für weitere Aktionen. Dies ist „korrektes“ HTML, das die „Gültigkeitsprüfung“ bestehen kann, was bedeutet, dass alle Tags und Attribute ordnungsgemäß geschlossen sind. So sieht unsere HTML-Datei aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Mit Jsoup ist es sehr einfach, HTML zu analysieren. Sie müssen lediglich eine statische Methode aufrufen Jsoup.parse()und Ihren HTML-String an diese übergeben. Jsoup bietet mehrere überladene Methoden parse()zum Lesen von HTML aus einer Zeichenfolge, einer Datei, einem Basis-URI, einer URL und einer InputStream. Sie können auch die Kodierung angeben, um die HTML-Datei korrekt zu lesen, wenn sie nicht im UTF-8-Format vorliegt. Die Methode parse(String html)analysiert den eingehenden HTML-Code in ein neues Objekt Document. DocumentIn Jsoup erbt eine Klasse von einer Klasse Element, wodurch die Klasse erweitert wird Node. NodeDie Klasse erbt auch von der Klasse TextNode. Solange Sie der Methode eine Zeichenfolge ungleich Null übergeben, ist eine erfolgreiche und aussagekräftige Analyse eines Objekts garantiert, das Document(mindestens) die Elemente „head“ und „body“ enthält. Wenn Sie über ein Objekt verfügen Document, können Sie die gewünschten Daten erhalten, indem Sie die entsprechenden Methoden der Klasse Documentund ihrer übergeordneten Klassen Elementaufrufen Node.

Java-Programm zum Parsen von HTML-Dokumenten

Hier ist unser komplettes Programm zum Parsen eines HTML-Strings, einer aus dem Internet heruntergeladenen HTML-Datei und einer lokalen HTML-Datei. Um es auszuführen, können Sie eine IDE (Eclipse oder eine andere) oder die Befehlszeile verwenden. In Eclipse ist das ganz einfach: Kopieren Sie einfach diesen Code, erstellen Sie ein neues Java-Projekt, klicken Sie mit der rechten Maustaste auf den Ordner „src“ und fügen Sie den kopierten Code ein. Eclipse kümmert sich um die Erstellung des richtigen Pakets und der Quellcodedatei mit dem entsprechenden Namen, sodass der Aufwand deutlich geringer ist. Wenn Sie bereits ein Java-Projekt haben, ist dies nur ein Schritt. Das folgende Programm veranschaulicht drei Beispiele für das Parsen und Durchlaufen einer HTML-Datei. Im ersten Beispiel analysieren wir direkt eine Zeichenfolge, die HTML enthält, im zweiten eine von einer URL heruntergeladene HTML-Datei und im dritten Beispiel laden wir ein HTML-Dokument aus dem lokalen Dateisystem herunter und analysieren es.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Ausgabe:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Der Jsoup-HTML-Parser wird alle Anstrengungen unternehmen, um eine „saubere“ Analyse des von Ihnen bereitgestellten HTML zu erstellen, unabhängig davon, ob es wohlgeformt ist oder nicht. Es kann die folgenden Fehler behandeln:
  • nicht geschlossene Tags. Zum Beispiel,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • implizite Tags. Offene Exemplare werden beispielsweise <td>Java is Great</td>eingepackt<table><tr><td>
  • Jsoup erstellt robuste Dokumentstrukturen (HTML enthält Kopf und Körper, aber der Körper enthält nur relevante Elemente)
Jsoup ist eine hervorragende und zuverlässige Open-Source-Bibliothek, die das Lesen von HTML-Dokumenten, Textfragmenten und HTML-Strings sowie das direkte Parsen von HTML-Webinhalten sehr einfach macht.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION