Recuperare informazioni tramite data scraping
Parsing HTML di una pagina web con Google Apps Script
In Google Apps Script è possibile, con veramente pochissime righe di codice, recuperare il contenuto desiderato presente all'interno di una pagina web definendone i tag che lo contengono.
Passando subito all'esempio pratico, il primo passggio è quello di aprire la pagina web desiderata, posizionarsi con il cursore del mouse sull'elemento HTML contenente l'informazione di interesse e dal menu contestuale che si aprirà cliccando con il taso destro selezionare 'Ispeziona'. In questo modo è possibile identificare i tag HTML presenti prima e dopo il dato che si intende recuperare. Copiarli e annotarli in modo da poterli inserire nella funzione che andremo ad utilizzare.
Nel caso dell'esempio in questione ho utilizzato come pagina di destinazione un articolo sul mio blog (link all'articolo) e come informazione da recuperare mi sono concentrato sul numero dei commenti presenti per tale articolo. Di seguito uno screenshot della pagina e del codice HTML oggetto di attenzione, Fig. 1:
La funzione che ho creato allo scopo è la seguente:
function getData() {
var url = "http://www.michelepisani.it/articoli/cookie-policy-come-gestire-analytics-adsense-e-i-bottoni-social/";
var string_find_start = '<a href="#comments" class="icon-link"><span class="icon-text">&#59160;</span>';
var string_find_end = 'commenti</a>';
var content = UrlFetchApp.fetch(url);
var content = content.getBlob().getDataAsString('ISO-8859-1');
var string_find_start_length = string_find_start.length;
var string_find_start_position = content.indexOf(string_find_start);
var string_find_start_position_content = string_find_start_position + string_find_start_length;
var string_find_end_position = content.indexOf(string_find_end, string_find_start_position);
var result = content.substring(string_find_start_position_content, string_find_end_position);
Logger.log(result);
}
Quello di cui ha bisogno è che le venga fornito l'url di destinazione e le porzioni HTML identificative,rispettivamente di inzio e di fine, che racchiudono il contenuto che ci interessa estrapolare.
I passaggi che svolge la funzione prevedono l'uso di UrlFetchApp.fetch(url) per accedere alla risorsa web tramite il suo url dopodiché il contenuto recuperato viene processato dalla seguente riga di codice per convertirlo in UTF-8 evitando la generazione di eventuali caratteri non riconosciuti in fase di visualizzazione:
var content = content.getBlob().getDataAsString('ISO-8859-1');
Le righe di codice successive recuperano il numero della posizione dei caratteri in pagina corrispondenti rispettivamente a quello di inizio del contenuto da recuperare (ovvero l'ultimo carattere della stringa identificativa di inizio) ed a quello di fine (ovvero il primo carattere della stringa identificativa di terminazione).
Conoscendo queste due posizioni viene estratta la parte di stringa al loro interno.
Eseguendo lo script, all'interno della finestra di log, View -> Logs (in quanto è stato indicato con Logger.log() la destinazione del valore di nostro interesse, ma avrei potuto inserirlo in una variabile così come all'interno di uno Spreadsheet), possiamo notare che è stato recuperato il numero dei commenti visualizzato per l'articolo in questione che, nel caso specifico, è 38 (Fig. 2):
Per chi volesse ottenere lo stesso risultato in modo più agevolato può fare riferimento al tutorial "Parsing HTML con una Libreria pronta in Google Apps Script" dove mostro come poterlo fare tramite l'utilizzo di una libreria pronta all'uso reperita sul web.
A tal proposito faccio presente che in alcuni casi è sconsigliato l'uso delle librerie nei progetti Apps Script come descritto nell'articolo "Google Apps Script: best practice per il miglioramento delle performance".
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento