Google Sheets è più di un foglio di calcolo: combinato con Google Apps Script (un runtime JavaScript) diventa una piattaforma di scraping leggera per la raccolta di dati web pubblici, il monitoraggio delle variazioni di prezzo, l'estrazione di tabelle e l'alimentazione di dashboard.
Questa guida vi guida passo dopo passo nella creazione di flussi di lavoro affidabili per lo scraping web di Google Sheets con JavaScript, automatizzandoli, evitando i blocchi più comuni e integrando i proxy (compreso un percorso pratico per l'utilizzo di provider come OkeyProxy) per ridurre gli errori 403 e migliorare le percentuali di successo.
Nota rapidaRispettare sempre il robots.txt di un sito, i termini di servizio e le leggi locali. Utilizzare lo scraping per dati legittimi e pubblici e per scopi di ricerca/monitoraggio.
Che cos'è lo scraping di Google Sheets con Javascript?
Google Sheets web scraping JavaScript significa utilizzare Google Sheets insieme a Google Apps Script (un ambiente JavaScript) per recuperare in modo programmatico le pagine web, estrarre dati strutturati e inserirli in un foglio. Apps Script espone UrlFetchApp per recuperare i contenuti e l'opzione Foglio elettronicoApp API per scrivere i risultati. Per molti casi d'uso rapidi, questa soluzione è veloce, senza server e gratuita (entro le quote di Apps Script).
Perché utilizzare Google Apps Script (Urlfetchapp)?
- Ambiente familiare: Sintassi JavaScript, facile da avviare.
- Nessuna infrastruttura: viene eseguito sui server di Google - nessun server da gestire.
- Integrazione: scrive direttamente su Google Sheets, invia e-mail, attiva trigger e così via.
- ProgrammazioneI trigger a tempo automatizzano lo scraping periodico.
Limitazioni da tenere presenti: Apps Script viene eseguito dall'infrastruttura di Google (quindi le richieste provengono da intervalli IP di Google), ha quote di esecuzione/tempo e non ha librerie di parsing HTML integrate e robuste come Cheerio (si può aggirare questo problema o usare un proxy/relay esterno per le attività più pesanti).
- Andare oltre l'IMPORTXML: Se si è mai provato a fare lo scraping dei dati in un foglio di calcolo, è probabile che ci si sia imbattuti nel problema del
=IMPORTXMLfunzione.
Che cosa è IMPORTXML? Si tratta di una formula integrata in Google Sheets che consente di estrarre i dati da un sito web specifico fornendo un URL e un XPath (una "mappa" dei dati). Ad esempio: =IMPORTXML("https://example.com", "//h1") avrebbe estratto l'intestazione principale di una pagina.
Sebbene sembri facile, nel mondo reale spesso fallisce per i motivi principali. Ad esempio, molti siti web moderni sono "applicazioni a pagina singola" (costruite con React o Vue). IMPORTXML può leggere solo il codice sorgente iniziale; non può "aspettare" che JavaScript carichi i dati effettivi.
Semplice esempio di scraping: Recuperare HTML e scrivere in un foglio
Uno script Apps minimale che recupera una pagina e scrive il titolo su un foglio:
function fetchPageTitle() {
const url = 'https://example.com';
const resp = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const html = resp.getContentText();
const titleMatch = html.match(/([^<]*)/i);
const title = titleMatch? titleMatch[1].trim() : 'Nessun titolo trovato';
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow([new Date(), url, title]);
}
Questo è adatto per semplici pagine statiche. Per contenuti più strutturati (tabelle, elenchi), è necessaria una logica di parsing.
Parsing HTML: Strategie ed esempi
Opzione A - Parsing leggero di regex / stringhe
Utile per pagine piccole e prevedibili. Non è robusto per l'HTML malformato.
function parseTable(html) {
// esempio grossolano - non affidatevi alla regex per l'HTML complesso
const rows = html.match(/]*>([\s\S]*?)/gi) || [];
return rows.map(r => {
const cols = (r.match(/]*>([\s\S]*?)/gi) || [])
.map(c => c.replace(/]+>/g, '').trim());
restituisce cols;
});
}
Opzione B - XmlService per HTML/XML ben formato
Servizio Xml può analizzare XHTML o HTML ordinato convertito in XML, ma molte pagine non sono XML valide.
Opzione C - Offloading del parsing a un servizio esterno
Per le pagine complesse, l'approccio migliore consiste nell'eseguire un piccolo microservizio di parsing (Node.js + Cheerio/Puppeteer) su Cloud Run o Cloud Functions. Il vostro Apps Script chiama questo servizio (che restituisce JSON) e il servizio gestisce l'analisi dell'HTML e il lavoro anti-bot.
Gestione dei contenuti dinamici (renderizzati con JS)
Molti siti moderni eseguono il rendering dei contenuti lato client tramite JavaScript (AJAX). UrlFetchApp recupera solo l'HTML del server e non esegue il JavaScript della pagina.
Opzioni:
- Trovare l'endpoint JSON/XHR utilizzato dalla pagina e chiamarlo direttamente (ispezionare la scheda Rete in DevTools).
- Utilizzare un browser headless (Puppeteer o Playwright) ospitato su Cloud Run/Cloud Functions per eseguire il rendering della pagina e restituire HTML o JSON. Richiamare questo renderizzatore da Apps Script.
- Utilizzare servizi di rendering di terze parti (pagati) che restituiscono un HTML completamente reso; garantire la conformità.
Automatizzare lo scraping con i trigger e la gestione degli errori
- Trigger a tempo: programmare lo scraping giornaliero/orario.
- Backoff esponenziale: su HTTP 429/5xx, indietreggiare e riprovare.
- Registrazione e notifiche: registrazione degli errori e invio di e-mail in caso di errori persistenti.
EsempioCreare un trigger giornaliero:
function createDailyTrigger() {
ScriptApp.newTrigger('fetchPageTitle')
.timeBased()
.everyDays(1)
.all'ora(6)
.create();
}
Problemi di blocco comuni: Reputazione IP, limiti di velocità, Captchas
I siti web bloccano attivamente lo scraping tramite:
- Reputazione IP: molte richieste provenienti da IP di provider cloud noti (come gli IP di Apps Script di Google) possono essere limitate o bloccate.
- Limiti tariffari: un numero eccessivo di richieste in un breve lasso di tempo fa scattare le strozzature.
- CAPTCHA: presentato quando il comportamento sembra automatizzato o sospetto.
Misure difensive fondamentali:
- Rispetto
robots.txt e vincoli legali/ToS.
- Aggiungere ritardi simili a quelli umani tra le richieste.
- Mantenere legittime le intestazioni delle richieste (
Agente utente, Accettare).
- Utilizzare i proxy per diversificare l'origine delle richieste (vedi sotto).
- Evitate di cercare di bypassare i CAPTCHA: utilizzate invece API ufficiali o la risoluzione umana quando è conforme.
Superare i blocchi con le deleghe - Progettazione e vincoli
I proxy modificano l'IP di origine delle richieste, in modo che i siti di destinazione vedano le richieste provenienti da indirizzi diversi. Per Google Sheets:
- Vincolo importante:
UrlFetchApp viene eseguito sui server di Google e non espone la configurazione nativa di host:porta del proxy. Non è possibile impostare direttamente un host proxy SOCKS5 o HTTP nelle opzioni di UrlFetchApp.
Soluzioni:
- Relè proxy / fetcher: Distribuire un piccolo servizio proxy/relay (Cloud Run / Cloud Function / VPS) che accetta una richiesta dal vostro Apps Script e la inoltra attraverso un proxy configurato (come ad esempio OkeyProxy). Apps Script chiama l'endpoint del relè (
https://your-relay.example.com/fetch?url=...) e il relay esegue il fetch proxy e restituisce l'HTML/JSON. Questo è l'approccio più affidabile e flessibile.
- API di inoltro HTTP del fornitore: Alcuni fornitori di proxy espongono un endpoint API HTTP che può recuperare URL arbitrari per conto dell'utente. Se OkeyProxy o un altro provider offre un'API di inoltro autenticata, è possibile chiamarla direttamente da Apps Script (non è necessario un relay). Controllate i documenti del provider.
Nota di sicurezza: Quando si utilizza un relè, proteggerlo (chiave API, HTTPS) in modo che solo il proprio Appscript possa utilizzarlo.
Captchas: Cosa fare quando li incontriamo
Non tentate di bypassare i captchas in modo programmatico, a meno che non abbiate un'autorizzazione esplicita. Bypassare i captchas per eludere le protezioni può essere illegale e viola le condizioni di molti siti.
Se si incontrano frequentemente i captchas:
- Rallentare la velocità di richiesta.
- Migliorare la fiducia nell'IP (utilizzare deleghe residenziali a rotazione o proxy ISP statici come quello fornito da OkeyProxy).
- Per ricerche legittime su larga scala, contattare il proprietario del sito per l'accesso o gli endpoint API.
- Per i CAPTCHA inevitabili in un flusso di lavoro aziendale, utilizzate servizi di interazione umana o partnership ufficiali e garantite la conformità.
Migliori pratiche (velocità, intestazioni, quote, etica)
Costruire uno scraper che funzioni è una cosa, ma garantire che rimanga affidabile, rispettoso e non bloccato richiede un approccio più disciplinato e "umano" all'automazione.
📜 Rispettare il robots.txt e i ToS del sito
Prima di estrarre un singolo byte di dati, controllate sempre le regole del sito di destinazione: rimanere conformi è l'unico modo per garantire la sostenibilità a lungo termine del vostro progetto.
🎭 Utilizzare intestazioni realistiche
Incorporate le intestazioni standard User-Agent, Accept-Language e Referer nelle opzioni di UrlFetchApp, in modo che le richieste assomiglino a un browser standard piuttosto che a uno script.
⏳ Implementare la limitazione della velocità e del jitter
Non martellate un server con migliaia di richieste al secondo. Implementate il "jitter" (intervalli di sospensione randomizzati) tra le richieste per mantenere un andamento naturale del traffico.
🚦 Risposte del monitor e backoff
Impostate una logica per catturare le risposte 429 (troppe richieste) o 5xx (errore del server). Se il sito vi dice di rallentare, ascoltatelo immediatamente.
⚖️ Evitare la violazione del copyright
Utilizzate i dati di scraping per analisi interne, ricerche o monitoraggio dei prezzi, ma non scrapate mai materiale protetto da copyright per la ridistribuzione o l'uso commerciale pubblico.
📝 Registrare e verificare i trigger
Poiché Google Apps Script viene eseguito in background, mantenete un semplice registro dei tempi di esecuzione e dei codici di errore, in modo da poter eseguire rapidamente il debug dei guasti "silenziosi".
Conclusione
Lo scraping web di Google Sheets con JavaScript (Apps Script + UrlFetchApp) è una soluzione pragmatica per molte attività di scraping e monitoraggio leggere.
Per le pagine che bloccano gli IP dei data center o che attivano frequentemente i captchas, l'introduzione di una strategia di proxy controllato, idealmente tramite un relay sicuro che utilizza proxy ISP residenziali/statici di un fornitore affidabile come OkeyProxy, aumenta notevolmente il successo, mantenendo il flusso di lavoro senza server e integrato con Sheets.
Domande frequenti
D: Apps Script può utilizzare direttamente i proxy?
R: No, UrlFetchApp non fornisce impostazioni host/porta proxy integrate. Utilizzate un relay o l'API lato server del provider.
D: È legale effettuare lo scraping di siti web?
R: Dipende. I dati pubblici possono spesso essere scrapati a scopo di ricerca e monitoraggio, ma bisogna sempre rispettare i ToS e le leggi del sito (copyright, privacy, norme anti-scraping). In caso di dubbio, contattare il proprietario del sito.
D: E i captchas?
R: Utilizzare approcci legittimi: rallentare le richieste, migliorare la reputazione dell'IP (proxy residenziali) o ottenere l'accesso all'API. Evitare di tentare di sconfiggere i captchas in modo programmatico senza un'autorizzazione esplicita.
Scorri in alto






