Raschietto web Java

Il web scraping è anche chiamato data scraping, web harvesting o web crawling che viene utilizzato per estrarre i dati dalle pagine web. Un web scraper può utilizzare diversi approcci per estrarre informazioni. Ad esempio, XPath, selettori CSS, filtri personalizzati, navigazione HTML, ecc. In base a tali scenari, questo articolo illustra come creare un web scraper a livello di codice in Java.

Configurazione della libreria Java Web Scraping

Aspose.HTML per Java L’API supporta le offerte di funzionalità di scraping web utilizzando diverse tecniche. Puoi semplicemente accedere all’API scaricando i file JAR dalla pagina Download o utilizzare le seguenti configurazioni Maven nel file pom.xml del tuo progetto:

Archivio:

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

Dipendenza:

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

Web scraping con navigazione HTML in Java

Puoi lavorare con la classe Node per navigare nelle pagine HTML. Il frammento di codice seguente mostra come navigare in un documento HTML in Java:

// Prepara un codice HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// Inizializzare un documento dal codice preparato
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Ottieni il riferimento al primo figlio (primo SPAN) del CORPO
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Ottieni il riferimento al secondo elemento SPAN
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Ispezione del documento HTML e dei suoi elementi in Java

Puoi lavorare con il metodo element traversal per navigare nelle pagine HTML. L’esempio di codice riportato di seguito spiega come controllare i documenti HTML in Java.

// Carica un documento da un file
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Ottieni l'elemento html del documento
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Ottieni l'ultimo elemento dell'elemento html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Ottieni il primo elemento dell'elemento body
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Utilizzo del filtro personalizzato per Web Scraper in Java

Puoi impostare un filtro personalizzato per saltare o accettare filtri specifici per lavorare con il web scraper in Java. L’esempio di codice seguente illustra come lavorare con i filtri personalizzati o definiti dall’utente in un web scraper utilizzando Java:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Il filtro corrente salta tutti gli elementi, ad eccezione degli elementi IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Successivamente, dopo aver impostato un filtro personalizzato, puoi navigare facilmente in una pagina HTML utilizzando lo snippet di codice qui sotto:

// Prepara un codice HTML
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Inizializzare un documento in base al codice preparato
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Per avviare la navigazione HTML è necessario creare un'istanza di TreeWalker.
    // I parametri specificati indicano che inizia a camminare dalla radice del documento, iterando tutti i nodi e utilizzando la nostra implementazione personalizzata del filtro
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Uso
    while (iterator.nextNode() != null) {
        // Poiché stiamo usando il nostro filtro, il nodo corrente sarà sempre un'istanza di HTMLImageElement.
        // Quindi, non abbiamo bisogno di ulteriori convalide qui.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

Web Scraping utilizzando XPath Query in Java

È possibile selezionare diversi nodi di un documento HTML in base a criteri diversi utilizzando XPath. Il codice seguente mostra come eseguire lo scraping web utilizzando XPath Query in Java:

// Prepara un codice HTML
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";

// Inizializzare un documento in base al codice preparato
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Qui valutiamo l'espressione XPath in cui selezioniamo tutti gli elementi SPAN figlio da elementi il cui attributo 'class' è uguale a 'happy':
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Iterare sui nodi risultanti
    for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // uscita: Ciao
        // uscita: Mondo!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping con CSS Selector in Java

Puoi cercare gli elementi necessari in un web scraper utilizzando il selettore CSS. È possibile specificare un parametro come selettore di query e quindi un elenco di corrispondenza del selettore viene restituito al web scraper. L’esempio di codice seguente mostra come utilizzare il selettore CSS in un web scraper utilizzando Java:

// Prepara un codice HTML
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";

// Inizializzare un documento in base al codice preparato
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Qui creiamo un selettore CSS che estrae tutti gli elementi il cui attributo 'class' è uguale a 'happy' e i loro elementi SPAN figlio
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Iterare sull'elenco di elementi risultante
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // uscita: Ciao
        // uscita: Mondo!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Conclusione

In questo articolo, hai esplorato diversi metodi che possono essere utilizzati per creare un web scraper in Java. Devi solo effettuare alcune chiamate API utilizzando la libreria Aspose.HTML for Java per creare un web scraper in Java. In questo articolo puoi esplorare le tecniche di navigazione HTML, selettore CSS, filtro personalizzato e query XPath. Inoltre, non esitare a contattarci tramite il forum se hai bisogno di ulteriori informazioni o assistenza.

Guarda anche

Converti EPUB in XPS in Java