Web Scraper Java

Web Scraping wird auch Data Scraping, Web Harvesting oder Web Crawling genannt, das verwendet wird, um Daten aus den Webseiten zu extrahieren. Ein Web Scraper kann verschiedene Ansätze verwenden, um Informationen zu extrahieren. Zum Beispiel XPath, CSS-Selektoren, benutzerdefinierte Filter, HTML-Navigation usw. In Übereinstimmung mit solchen Szenarien behandelt dieser Artikel, wie man einen Web Scraper programmgesteuert in Java erstellt.

Konfiguration der Java-Web-Scraping-Bibliothek

Aspose.HTML for Java API-Unterstützung bietet Web-Scraping-Funktionen mit verschiedenen Techniken. Sie können einfach auf die API zugreifen, indem Sie die JAR-Dateien von der Seite Downloads herunterladen oder die folgenden Maven-Konfigurationen in der pom.xml-Datei Ihres Projekts verwenden:

Repository:

 <repositories>
     <repository>
         <id>snapshots</id>
         <name>repo</name>
         <url>http://repository.aspose.com/repo/</url>
     </repository>
</repositories>

Abhängigkeit:

 <dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>21.12</version>
        <classifier>jdk17</classifier>
    </dependency>
</dependencies>

Web Scraping mit HTML-Navigation in Java

Sie können mit der Klasse Node arbeiten, um durch HTML-Seiten zu navigieren. Das folgende Code-Snippet zeigt, wie man in Java durch ein HTML-Dokument navigiert:

// Bereiten Sie einen HTML-Code vor
String html_code = "<span>Hello</span> <span>World!</span>";

// Initialisieren Sie ein Dokument aus dem vorbereiteten Code
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Holen Sie sich den Verweis auf das erste Kind (erstes SPAN) des BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Rufen Sie den Verweis auf das zweite SPAN-Element ab
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Inspektion des HTML-Dokuments und seiner Elemente in Java

Sie können mit der Element-Traversal-Methode arbeiten, um durch die HTML-Seiten zu navigieren. Das folgende Codebeispiel erläutert, wie HTML-Dokumente in Java untersucht werden.

// Laden Sie ein Dokument aus einer Datei
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Holen Sie sich das HTML-Element des Dokuments
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Holen Sie sich das letzte Element des HTML-Elements
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Rufen Sie das erste Element des body-Elements ab
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Benutzerdefinierte Filterverwendung für Web Scraper in Java

Sie können einen benutzerdefinierten Filter festlegen, um bestimmte Filter zu überspringen oder zu akzeptieren, um mit dem Web Scraper in Java zu arbeiten. Das folgende Codebeispiel erläutert, wie Sie mit den benutzerdefinierten oder benutzerdefinierten Filtern in einem Web Scraper mit Java arbeiten:

public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Der aktuelle Filter überspringt alle Elemente außer IMG-Elemente.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Anschließend können Sie nach dem Einrichten eines benutzerdefinierten Filters mithilfe des folgenden Code-Snippets einfach durch eine HTML-Seite navigieren:

// Bereiten Sie einen HTML-Code vor
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Um die HTML-Navigation zu starten, müssen wir eine Instanz von TreeWalker erstellen.
    // Die angegebenen Parameter bedeuten, dass es vom Stamm des Dokuments ausgeht, alle Knoten iteriert und unsere benutzerdefinierte Implementierung des Filters verwendet
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Verwenden
    while (iterator.nextNode() != null) {
        // Da wir unseren eigenen Filter verwenden, ist der aktuelle Knoten immer eine Instanz des HTMLImageElement.
        // Daher benötigen wir hier keine zusätzlichen Validierungen.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // Ausgabe: image1.png
        // Ausgabe: image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web-Scraping mit XPath-Abfrage in Java

Mit XPath können Sie verschiedene Knoten eines HTML-Dokuments nach unterschiedlichen Kriterien auswählen. Der folgende Code zeigt, wie man Web Scraping mit XPath Query in Java durchführt:

// Bereiten Sie einen HTML-Code vor
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello ! </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World </span >\n" +
              "    </p >\n";

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Hier werten wir den XPath-Ausdruck aus, in dem wir alle untergeordneten SPAN-Elemente aus Elementen auswählen, deren Attribut „class“ gleich „happy“ ist:
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Iterieren Sie über die resultierenden Knoten
    for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // Ausgabe: Hallo
        // Ausgabe: Welt!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping mit CSS Selector in Java

Sie können die benötigten Elemente in einem Web Scraper mit dem CSS-Selektor suchen. Sie können einen Parameter als Abfrageselektor angeben und dann wird eine Liste mit übereinstimmenden Selektoren an den Web Scraper zurückgegeben. Das folgende Codebeispiel zeigt, wie Sie den CSS-Selektor in einem Web Scraper mit Java verwenden:

// Bereiten Sie einen HTML-Code vor
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World ! </span >\n" +
              "    </p >\n";

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Hier erstellen wir einen CSS-Selektor, der alle Elemente extrahiert, deren 'class'-Attribut gleich 'happy' ist, und ihre untergeordneten SPAN-Elemente
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Iteriere über die resultierende Liste von Elementen
    elements.forEach(element ->{
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // Ausgabe: Hallo
        // Ausgabe: Welt!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Fazit

In diesem Artikel haben Sie verschiedene Methoden untersucht, mit denen ein Web Scraper in Java erstellt werden kann. Sie müssen nur ein paar API-Aufrufe mit der Bibliothek Aspose.HTML for Java durchführen, um einen Web-Scraper in Java zu erstellen. In diesem Artikel können Sie sich mit den Techniken HTML-Navigation, CSS-Selektor, benutzerdefinierter Filter und XPath-Abfrage vertraut machen. Darüber hinaus können Sie sich gerne über das Forum mit uns in Verbindung setzen, wenn Sie weitere Informationen oder Hilfe benötigen.

Siehe auch

EPUB in XPS in Java konvertieren