12337 Letture

Estrarre dati da una pagina HTML: come si fa

Quante volte vi è capitato, per le ragioni più disparate, di dover estrarre dati da un sito web per poterli rielaborare ed eventualmente riutilizzare?

In questo articolo non ci occupiamo degli aspetti legali connessi con l'estrazione dei dati da una pagina HTML ma ci concentriamo invece sugli strumenti che permettono di raccogliere i dati in forma ragionata e strutturata per poi avere la possibilità di gestirli utilizzando, ad esempio, un normale foglio di calcolo.

I dati pubblicati nelle pagine web sono generalmente inseriti all'interno di tabelle, di tag div oppure entro altri tag HTML di vario genere.
Pochi sanno che Fogli Google e, in generale, le altre app della suite Drive mettono a disposizione alcune potenti funzioni per estrarre dati da una pagina HTML, anche se pubblicata su un server remoto.

Nell'articolo Foglio di calcolo: la potenza delle formule abbiamo spiegato quanto siano versatili le funzioni utilizzabili nei fogli elettronici per creare formule più o meno complesse.


Nell'articolo Importare dati da HTML a Excel: come fare abbiamo invece presentato la funzione Google ImportHTML che consente di estrarre codice HTML da pagine web di qualunque sito.

Ancora più versatile è la funzione ImportXML che consente di importare dati partendo da vari tipi di dati strutturati, tra cui XML, HTML, CSV, TSV e feed XML RSS e ATOM (vedere questa pagina di supporto).


Per estrarre dati da un sito web, è sufficiente aprire un nuovo documento Fogli Google portandosi su Google Drive quindi cliccando su Nuovo, Fogli Google.

Dopo aver selezionato, ad esempio, la prima cella del foglio di calcolo, si potrà impostare la formula basata sull'utilizzo di ImportXML.

Il corretto utilizzo di ImportXML non può prescindere da un attento studio del sorgente HTML del sito dal quale si desiderano importare i dati.
L'importante è non scoraggiarsi mai: una soluzione per importare i dati pubblicati nella pagina HTML remota si trova sempre!

Estrarre dati da una pagina HTML con Google ImportXML

Il miglior modo per imparare l'utilizzo della funzione ImportXML è partire da qualche esempio pratico.

Si supponga che la pagina HTML contenente i dati d'interesse mostri una lista puntata o numerata costruita usando il tag li.
Per estrarre i dati contenuti in una lista HTML, è sufficiente ricorrere alla formula che segue:

=importxml("http://urldellapaginaweb.com/nomepagina";"//li")

Estrarre dati da una pagina HTML: come si fa

Se, all'interno di ciascun tag li, fosse contenuto un link (tag anchor), e si volesse estrarre solo il nome del link, basterà modificare la formula come segue:

=importxml("http://urldellapaginaweb.com/nomepagina";"//li/a")

La seguente formula, invece, consentirà di estrarre solo l'URL (attributo href di ciascun tag anchor contenuto all'interno dei tag li):


=importxml("http://urldellapaginaweb.com/nomepagina";"//li/a/@href")

Per evitare di estrarre dati inutili, suggeriamo di individuare, ad esempio, il "contenitore" (tag div) che ospita le informazioni d'interesse.
Il tag div sarà contraddistinto, di solito, col nome di una classe CSS (class) o un ID.

Per fare in modo che la funzione Google estragga i dati contenuti in un certo div, basterà usare la seguente sintassi:

=importxml("http://urldellapaginaweb.com/nomepagina";
"//div[@class='NOMECLASSE']//li")


In questo modo le varie celle del foglio di calcolo Google verranno "popolate" recuperando le informazioni contenute nei tag li ospitati all'interno di ciascun div chiamato NOMECLASSE.

L'utilizzo di una funzione nidificata come la seguente permette invece di estrarre solamente il contenuto del secondo tag td dei div NOMECLASSE:

=index(importxml("http://urldellapaginaweb.com/nomepagina";
"//div[@class='NOMECLASSE']//td");2)


La volontà di estrarre il contenuto del secondo tag è indicata dal numero 2 all'interno della funzione index.
Nulla vieta, comunque, di usare una funzione più complessa, come la seguente per estrarre i dati dalla pagina web HTML a seconda del numero di riga del foglio elettronico (funzione ROW()):

=index(importxml("http://urldellapaginaweb.com/nomepagina";
"//div[@class='NOMECLASSE']//td");4*ROW())



Tutte le formule vanno incollate su un'unica riga.


Estrarre dati da una pagina HTML: come si fa - IlSoftware.it