Scraping per linguaggio 7 min di lettura

Estrazione di dati web in Google Sheets: formule IMPORT e Apps Script

Estrai dati web direttamente in Google Sheets: IMPORTXML, IMPORTHTML e Apps Script, con i limiti delle formule e cosa fare quando non bastano.

TW
Team Web-Scraping.it
Raccolta dati per le esigenze del business
Pubblicato il 12 marzo 2025

Se lo scraping con Excel / VBA è la via «desktop», dove uno script porta i dati direttamente nella cartella di lavoro, Google Sheets offre qualcosa che Excel non ha di serie: formule di importazione integrate. In molti casi non serve scrivere neanche una riga di codice: basta inserire una funzione in una cella e il foglio caricherà da solo i dati dal sito e li terrà aggiornati.

E quando le formule non bastano, arriva in soccorso Google Apps Script, l’equivalente in cloud di VBA, scritto in JavaScript. Sa eseguire richieste HTTP, fare il parsing di JSON e lavorare su pianificazione, e tutto questo gira sui server di Google, non sul tuo computer.

In questo articolo esaminiamo entrambi i livelli: prima le formule per un’estrazione rapida senza codice, poi Apps Script per i compiti complessi.

In cosa Google Sheets differisce da Excel / VBA

Il confronto aiuta a scegliere lo strumento in base al compito:

Criterio Excel / VBA Google Sheets
Estrazione con una formula, senza codice Solo Power Query IMPORTXML, IMPORTHTML ecc.
Linguaggio di scripting VBA Apps Script (JavaScript)
Dove viene eseguito Sul tuo PC Nel cloud di Google
Esecuzione pianificata Utilità di pianificazione di Windows + macro Trigger di serie
Lavoro collaborativo Condividendo il file In tempo reale, con un link
Dati finanziari pronti No GOOGLEFINANCE integrata
Limiti sulle richieste Praticamente nessuno Quote di Google

La conclusione principale: per un’estrazione leggera o media Google Sheets è spesso più rapido, perché metà dei compiti si risolve con una sola formula. Negli scenari pesanti e non standard la logica è la stessa di VBA: cambia solo la sintassi.

Livello 1. Estrazione con le formule

IMPORTHTML — tabelle ed elenchi

La funzione più semplice. Estrae una tabella o un elenco per intero in base al numero:

code
=IMPORTHTML("https://example.com/page"; "table"; 1)

Argomenti: l’URL, il tipo di elemento ("table" o "list") e il suo numero d’ordine nella pagina. Se la pagina contiene più tabelle, prova gli indici (1, 2, 3...) finché non trovi quella giusta. Il risultato si «espande» automaticamente sulle celle adiacenti.

IMPORTXML — estrazione mirata con XPath

Il più potente tra gli strumenti a formula. Riceve un URL e una query XPath, cioè l’espressione che punta a un elemento specifico del markup:

code
=IMPORTXML("https://example.com"; "//h1")
=IMPORTXML("https://example.com"; "//div[@class='price']")
=IMPORTXML("https://example.com"; "//span[@id='total']/text()")

Alcuni modelli XPath utili:

Compito XPath
Tutti i titoli h2 //h2
Elemento per classe //div[@class='value']
Elemento per id //*[@id='price']
Un attributo (per esempio un link) //a/@href
Il testo dentro un tag //span[@class='cur']/text()
L’n-esimo elemento di un elenco (//li)[3]

Il modo più semplice per ricavare l’XPath è guardarlo nel browser: apri gli strumenti per sviluppatori (F12), individua l’elemento e fai clic destro → Copy → Copy XPath.

IMPORTDATA — CSV e TSV

Se la fonte fornisce un file CSV o TSV già pronto, lo importiamo direttamente:

code
=IMPORTDATA("https://example.com/data.csv")

La funzione distribuisce da sola i valori nelle colonne. Ideale per dataset aperti ed esportazioni.

IMPORTFEED — RSS e Atom

Per i feed di notizie e i blog:

code
=IMPORTFEED("https://example.com/rss")

GOOGLEFINANCE — finanza senza alcuno scraping

Merita una menzione a parte GOOGLEFINANCE, la fonte integrata di dati di borsa e valute. È il caso in cui non serve fare scraping di nulla: Google ha già raccolto tutto per te.

code
=GOOGLEFINANCE("NASDAQ:AAPL"; "price")
=GOOGLEFINANCE("CURRENCY:USDEUR")
=GOOGLEFINANCE("NASDAQ:GOOGL"; "price"; DATE(2024;1;1); DATE(2024;12;31); "DAILY")

Il primo esempio è il prezzo attuale di un’azione; il secondo, il cambio di una coppia di valute; il terzo, le quotazioni storiche di un periodo. Se il tuo compito rientra in ciò che copre GOOGLEFINANCE, questa è la strada più affidabile: niente blocchi né markup rotto. Lo scraping di siti terzi serve solo dove questi dati non esistono o dove ti occorre una fonte non standard.

Livello 2. Google Apps Script

Le formule vanno bene, ma hanno un tetto: non sanno autenticarsi, aggirare protezioni complesse, elaborare il JSON annidato di una API né eseguire una logica con ramificazioni. Qui entra in gioco Apps Script.

Apri il foglio di calcolo → Estensioni → Apps Script e ti ritroverai nell’editor di codice in cloud. È l’equivalente diretto dell’editor VBA dell’articolo su Excel, solo in JavaScript.

Richiesta HTTP: UrlFetchApp

La richiesta di base a una pagina o a una API:

javascript
function getResponse(url) {
  const options = {
    method: 'get',
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    },
    muteHttpExceptions: true   // non fallire sui codici 4xx/5xx
  };

  const response = UrlFetchApp.fetch(url, options);

  if (response.getResponseCode() === 200) {
    return response.getContentText();
  }
  return 'ERROR: ' + response.getResponseCode();
}

Confrontala con la funzione GetResponse dell’articolo su VBA: la logica è identica — aprire la richiesta, impostare lo User-Agent, verificare il codice di risposta. Cambia solo l’involucro: al posto di MSXML2.XMLHTTP qui c’è UrlFetchApp.

Parsing di JSON: nativo

Il grande vantaggio di Apps Script su VBA: il JSON si analizza con un’unica istruzione integrata, senza funzioni scritte a mano né moduli di terze parti.

javascript
function getPrice(symbol) {
  const url = 'https://example-api.com/quote?symbol=' + symbol;
  const json = getResponse(url);

  const data = JSON.parse(json);   // una riga al posto di ExtractJsonValue
  return data.price;
}

In VBA, per ottenere lo stesso risultato, bisognava analizzare la stringa a mano o collegare VBA-JSON. Qui basta JSON.parse e lavori subito con l’oggetto.

Scrivere il risultato sul foglio

Scriviamo i dati nelle celle tramite l’oggetto del foglio:

javascript
function writeQuotes() {
  const tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA'];
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Intestazioni
  sheet.getRange(1, 1, 1, 3).setValues([['Ticker', 'Prezzo', 'Ora']]);

  const rows = [];
  const now = new Date();

  tickers.forEach(function (ticker) {
    const price = getPrice(ticker);
    rows.push([ticker, price, now]);
    Utilities.sleep(1000);   // pausa di 1 s tra le richieste
  });

  // Scarichiamo tutto in una sola chiamata: è più veloce
  sheet.getRange(2, 1, rows.length, 3).setValues(rows);
}

Il principio «accumulare in un array e scaricare tutto in una sola chiamata» è qui importante per la velocità quanto in VBA: setValues sull’intero intervallo è molte volte più veloce della scrittura cella per cella dentro un ciclo.

Parsing di HTML in Apps Script

Con l’analisi dell’HTML integrata le cose si complicano: Apps Script non ha un parser del DOM completo come l’HTMLDocument di VBA. In pratica si usano le espressioni regolari oppure l’estrazione del testo tra marcatori:

javascript
function extractByRegex(text, pattern) {
  const re = new RegExp(pattern);
  const match = text.match(re);
  return match ? match[1] : '';
}

// Esempio: estrarre il prezzo da "<span class='price'>152.34</span>"
// const price = extractByRegex(html, "class='price'>([\\d.]+)<");

Per i markup complessi a volte si ricorre a librerie di terze parti (per esempio Cheerio tramite un servizio wrapper), ma nella maggior parte dei casi bastano le espressioni regolari o la formula XPath IMPORTXML.

Una funzione personalizzata per la cella

Apps Script permette di creare una formula propria, richiamabile direttamente dal foglio come una funzione integrata:

javascript
/**
 * Restituisce il prezzo di un ticker.
 * @customfunction
 */
function MYPRICE(symbol) {
  return getPrice(symbol);
}

Dopo il salvataggio, nella cella funzionerà =MYPRICE("AAPL"). VBA ha una possibilità simile con le UDF, ma qui la funzione è subito disponibile per chiunque abbia accesso al foglio.

Aggiornamento automatico pianificato

In VBA, per le esecuzioni periodiche serve l’Utilità di pianificazione esterna di Windows. In Google Sheets la pianificazione è integrata: sono i trigger.

Nell’editor di Apps Script: icona dell’orologio (Trigger) → Aggiungi trigger → scegli la funzione, l’evento «basato sul tempo» e l’intervallo (ogni ora, ogni giorno ecc.).

Oppure via codice:

javascript
function setupTrigger() {
  ScriptApp.newTrigger('writeQuotes')
    .timeBased()
    .everyHours(1)
    .create();
}

Lo script verrà eseguito sui server di Google anche a computer spento e foglio chiuso. Per uno scraper in VBA questo è irraggiungibile senza una macchina sempre accesa.

Limiti e insidie

L’approccio in cloud ha il suo prezzo: le quote di Google.

  • Le formule IMPORT... si aggiornano periodicamente (circa una volta all’ora) e vengono messe in cache. Non vanno bene se ti servono dati aggiornati al secondo.
  • UrlFetchApp ha un limite giornaliero di chiamate (dipende dal tipo di account: di solito migliaia di richieste al giorno per quello gratuito).
  • Il tempo di esecuzione dello script è limitato (nell’ordine dei 6 minuti per esecuzione con gli account gratuiti). Un’estrazione lunga andrà divisa in più parti.
  • #N/A e Loading... nelle formule spesso significano che la fonte non ha restituito i dati, ha cambiato il markup o ha bloccato la richiesta proveniente dai server di Google.

Queste restrizioni sono il motivo principale per cui lo scraping pesante e frequente a volte torna sul binario «desktop» dell’articolo su Excel / VBA, dove di fatto non ci sono limiti sulle richieste.

Cosa scegliere: Sheets o Excel / VBA

Un promemoria rapido:

  • Rapido e senza codice, dati nel foglio, lavoro di squadra → Google Sheets e formule.
  • Cambi valutari e quotazioni di borsa → prima GOOGLEFINANCE, e solo se non basta, lo scraping.
  • Aggiornamento automatico senza PC acceso → Google Sheets con i trigger.
  • Grandi volumi, richieste frequenti, nessun limite, parsing di HTML complessoExcel / VBA.
  • Ambiente aziendale senza cloud, dati locali → Excel / VBA.

Conclusione

Google Sheets copre due livelli di estrazione dati con un solo strumento. Le formule IMPORTHTML, IMPORTXML, IMPORTDATA e GOOGLEFINANCE risolvono i compiti tipici senza una sola riga di codice, mentre Apps Script, con UrlFetchApp e il JSON.parse nativo, si fa carico di tutta la parte complessa — e lo fa in cloud, su pianificazione, senza il tuo computer.

Rispetto all’approccio dell’articolo su Excel / VBA la logica resta la stessa — richiesta, parsing, scrittura, gestione degli errori —, ma la sintassi è più semplice, il JSON si analizza «di fabbrica» e l’automazione non richiede un’utilità di pianificazione esterna. Il prezzo della comodità sono le quote di Google: quando ci sbatti contro, ha senso tornare alla soluzione desktop in VBA. I due strumenti non sono concorrenti, si completano a vicenda: scegli in base al compito concreto.