JavaRush /Java Blog /Random-IT /Facile analisi HTML con jsoup
Stanislav
Livello 21
Москва

Facile analisi HTML con jsoup

Pubblicato nel gruppo Random-IT
Forse un giorno avrai bisogno di ottenere informazioni da un sito Web o da un documento HTML nella tua applicazione e dirò senza ulteriori indugi che l'utilizzo della libreria jsoup semplificherà notevolmente il tuo compito. Secondo il wiki , jsoup è una libreria Java open source progettata per analizzare, estrarre e manipolare i dati archiviati in documenti HTML.

Inizio veloce

La libreria può essere scaricata come file jar e inserita in un progetto o connessa utilizzando Maven/Gradle. Lascerò il link al sito ufficiale alla fine dell'articolo: lì puoi trovare la versione attuale della libreria. Nell'esempio utilizzeremo la connessione tramite Maven. Aggiungiamo una dipendenza:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Utilizzo

Prima di tutto, devi ottenere un'istanza della classe Documentda org.jsoup.nodes.Document indicando la fonte per l'analisi. Può essere un file locale o un collegamento. Ad esempio, in questo articolo utilizzeremo il sito web yandex.ru e proveremo a ottenere il loro feed di notizie attuale:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentè un identificativo che viene comunicato al sito che si sta visitando. In molti siti è il criterio più importante per il filtro antispam. Referrercontiene l'URL dell'origine della richiesta. Il metodo get()lancia un'IOException gestita, quindi possiamo racchiudere tutto in try/catchun blocco o semplicemente lanciarlo ulteriormente con throws. Ora abbiamo ricevuto il codice sorgente per questa pagina. Se necessario, la stessa libreria jsoup può ripristinare gli elementi danneggiati. Ora tutto ciò che dobbiamo fare è restringere la ricerca a un blocco separato. Il metodo select()ha un'ampia scelta di usi: consente di cercare elementi per tag, attributi, classe e altri parametri. Quasi tutti i browser moderni supportano la possibilità di cercare rapidamente il codice sorgente di un elemento selezionato. Con semplici manipolazioni, troviamo il codice sorgente dell'elemento di cui abbiamo bisogno e otteniamo divun blocco con la classe specificata, che utilizzeremo per il campionamento. Analisi HTML semplice utilizzando jsoup - 1Usiamo la classe Elementsda org.jsoup.select.Elements per selezionare tutti gli elementi dal nostro blocco selezionato.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Ora abbiamo qualcosa del genere: Analisi HTML semplice utilizzando jsoup - 2Ora tutto ciò che dobbiamo fare è usare un piccolo ciclo per scorrere tutti gli elementi:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Il metodo text()consente di eliminare il codice di markup e lasciare solo una combinazione di testo per tutti gli elementi in entrata. Il risultato dell'esecuzione sarà il seguente: Analisi HTML semplice utilizzando jsoup - 3È facile notare che il numero effettivo di righe ricevute non corrisponde all'effettiva visualizzazione sulla pagina. È qui che risiedono le insidie. Se guardi il codice sorgente del markup, noterai che le ultime notizie cambiano animatamente ad un certo intervallo di tempo. Alcuni di questi “sassi” vengono risolti mediante ulteriori campionamenti e, naturalmente, test. Potrebbe risultare che i primi cinque elementi conterranno le informazioni di cui abbiamo bisogno e il sesto elemento conterrà solo una riga vuota con script. Succede anche che i blocchi non abbiano alcun identificatore, quindi è possibile puntare direttamente tramite un metodo get(int index)al numero di posizione dell'elemento in questione.
System.out.println(listNews.select("a").get(2).text());

Conclusione

Questo esempio mostra solo una piccola parte di ciò di cui è capace jsoup. C'è anche il fatto che i siti vengono spesso aggiornati, modificando la struttura del codice di markup, quindi quando si lavora con lo scraping è necessario essere pronti ad adattarsi ai cambiamenti. Puoi ottenere maggiori informazioni e la versione attuale sul sito ufficiale jsoup.org ; puoi leggere di più su classi e metodi al link o7planning.org . Lascerò un link al mio github , nel momento in cui scrivo ci sono diversi bot di Telegram che utilizzano Jsoup per ricevere e visualizzare informazioni.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION