JavaRush /Java Blog /Random-IT /3 esempi di come analizzare un file HTML in Java utilizza...
Sdu
Livello 17

3 esempi di come analizzare un file HTML in Java utilizzando Jsoup

Pubblicato nel gruppo Random-IT
3 esempi di come analizzare un file HTML in Java utilizzando Jsoup - 1L'HTML è il nucleo del WEB, tutte le pagine Internet che vedi, siano esse generate dinamicamente utilizzando JavaScript, JSP, PHP, ASP o altre tecnologie web, sono basate su HTML. In effetti, il tuo browser analizza l'HTML e lo visualizza in un modo conveniente per te. Ma cosa succede se devi analizzare un documento HTML e trovare qualche elemento, tag, attributo in esso o verificare se un elemento specifico esiste o meno utilizzando un programma Java. Se fossi stato un programmatore Java per diversi anni, sono sicuro che avresti eseguito l'analisi XML utilizzando parser come DOM o SAX. Ma, per ironia della sorte, ci sono momenti in cui è necessario analizzare un documento HTML da un'applicazione Java di base che non contiene servlet e altre tecnologie web Java. Inoltre, Core JDK non contiene librerie HTTP o HTML. Ecco perché, quando si tratta di analizzare un file HTML, molti programmatori Java chiedono a Google come ottenere il valore di un tag HTML in Java. Quando mi sono imbattuto in questo, ero sicuro che la soluzione sarebbe stata una libreria open source che implementasse le funzionalità di cui avevo bisogno, ma non sapevo che sarebbe stata meravigliosa e ricca di funzionalità come Jsoup. Non solo fornisce supporto per la lettura e l'analisi di file HTML, attributi, classi CSS in stile JQuery, ma allo stesso tempo consente di modificarli. Usando Jsoup puoi fare tutto quello che vuoi con un documento HTML. In questo articolo analizzeremo un file HTML e troveremo i nomi e gli attributi dei tag. Esamineremo anche esempi di download e analisi di codice HTML da un file e da qualsiasi URL, come la home page di Google.

Cos'è Jsoup

Jsoup è una libreria Java open source per lavorare con HTML reale. Fornisce un'API molto comoda per recuperare e manipolare i dati utilizzando le migliori tecniche DOM, CSS e simili a jQuery. Jsoup implementa la specifica WHATWG HTML5 e analizza l'HTML nello stesso DOM dei browser moderni come Chrome e Firefox. Ecco alcune delle funzionalità utili della libreria Jsoup:
  • Jsoup può estrarre e analizzare HTML da un URL, file o stringa.
  • Jsoup può trovare ed estrarre dati utilizzando l'attraversamento DOM o i selettori CSS.
  • Jsoup ti consente di manipolare elementi, attributi e testo HTML.
  • Jsoup fornisce la pulizia della lista bianca delle informazioni fornite dall'utente per prevenire attacchi XSS.
  • Jsoup produce anche HTML "ordinato".
Jsoup è progettato per funzionare con i vari tipi di HTML esistenti nel mondo reale, incluso l'HTML correttamente convalidato con un set di tag incompleto e non convalidato. Uno dei principali vantaggi di Jsoup è la sua affidabilità.

Analisi dell'HTML in Java utilizzando Jsoup

In questo tutorial vedremo tre diversi esempi di analisi e attraversamento di un documento HTML in Java utilizzando Jsoup. Nel primo esempio, analizzeremo una stringa HTML contenente tag sotto forma di una stringa letterale Java. Nel secondo esempio scaricheremo il nostro documento HTML da Internet e nel terzo esempio scaricheremo il nostro file HTML di esempio login.html per l'analisi. Questo file è un documento HTML di esempio costituito da un tag "titolo" e un tag "div" nella sezione "corpo" che contiene il modulo HTML. Il modulo contiene campi per l'immissione di nome utente e password, nonché pulsanti di ripristino e conferma per ulteriori azioni. Questo è HTML "corretto" che può superare il controllo di "validità", il che significa che tutti i tag e gli attributi sono chiusi correttamente. Ecco come appare il nostro file HTML:
<!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>
Con Jsoup è molto semplice analizzare l'HTML, tutto ciò che devi fare è chiamare un metodo statico Jsoup.parse()e passargli la stringa HTML. Jsoup fornisce diversi metodi di sovraccarico parse()per leggere HTML da una stringa, un file, da un URI di base, da un URL e da un file InputStream. Puoi anche specificare la codifica per leggere correttamente il file HTML se non è in formato UTF-8. Il metodo parse(String html)analizza l'HTML in arrivo in un nuovo oggetto Document. In Jsoup, una classe Documenteredita da una classe Element, che estende la classe Node. NodeLa classe eredita anche dalla classe TextNode. Finché passi una stringa non nulla al metodo, hai la garanzia di avere un'analisi corretta e significativa di un oggetto Documentcontenente (almeno) gli elementi "head" e "body". Se hai un oggetto Document, puoi ottenere i dati desiderati chiamando i metodi appropriati della classe Documente dei suoi genitori Elemente Node.

Programma Java per l'analisi di documenti HTML

Ecco il nostro programma completo per l'analisi di una stringa HTML, un file HTML scaricato da Internet e un file HTML locale. Per eseguirlo, puoi utilizzare un IDE (Eclipse o qualsiasi altro) o la riga di comando. In Eclipse questo è molto semplice, basta copiare questo codice, creare un nuovo progetto Java, fare clic con il tasto destro sulla cartella "src" e incollare il codice copiato. Eclipse si occuperà di creare il pacchetto corretto e il file del codice sorgente con il nome appropriato, quindi è molto meno lavoro. Se hai già un progetto Java, questo è solo un passo. Il programma seguente illustra tre esempi di analisi e attraversamento di un file HTML. Nel primo esempio analizziamo direttamente una stringa contenente HTML, nel secondo un file HTML scaricato da un URL, nel terzo scarichiamo e analizziamo un documento HTML dal file system locale.
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);
    }
}
Produzione:
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
Il parser HTML Jsoup farà ogni sforzo per produrre un'analisi "pulita" dell'HTML fornito, indipendentemente dal fatto che sia ben formato o meno. Può gestire i seguenti errori:
  • tag non chiusi. Per esempio,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • tag impliciti. Ad esempio, quelli aperti <td>Java is Great</td>verranno avvolti<table><tr><td>
  • Jsoup crea strutture di documenti robuste (HTML contiene head e body, ma body contiene solo elementi rilevanti)
Jsoup è un'eccellente e affidabile libreria open source che semplifica la lettura di documenti html, frammenti di corpo, stringhe html e l'analisi diretta del contenuto Web html.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION