SCRAPE_BY_REGEX
Estrae contenuto da una pagina web usando un pattern di espressione regolare.
=SCRAPE_BY_REGEX(url, regex, [removeHtml], [group], [renderJs])Restituisce: string or 2D array (multiple matches returned as separate rows)
Panoramica
SCRAPE_BY_REGEX estrae contenuto da pagine web applicando un pattern di espressione regolare contro il sorgente della pagina. A differenza dei selettori CSS o XPath che navigano la struttura del documento, regex opera direttamente sul contenuto HTML o testo grezzo, rendendolo unicamente adatto per estrarre pattern specifici come prezzi, numeri di telefono, indirizzi email, date, codici prodotto, chiavi API e qualsiasi altro testo che segue un formato prevedibile.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
url | string | Sì | L'URL completo della pagina web da estrarre (deve includere https:// o http://). |
regex | string | Sì | Pattern di espressione regolare da corrispondere contro il contenuto della pagina. Usa sintassi regex standard. Le barre inverse devono essere doppie nelle formule Sheets (ad es. "\\d+" per le cifre). |
removeHtml | boolean | No (FALSE) | Facoltativo. Imposta su TRUE per rimuovere tutti i tag HTML prima di applicare il regex, lasciando solo il contenuto di testo visibile. Per impostazione predefinita è FALSE (regex applicato al sorgente HTML grezzo). |
group | number | No (0) | Facoltativo. Il gruppo di cattura da restituire. 0 restituisce la corrispondenza completa, 1 restituisce il primo gruppo di cattura, 2 il secondo, ecc. Per impostazione predefinita è 0. |
renderJs | boolean | No | Facoltativo. Imposta su TRUE per renderizzare JavaScript prima di applicare il regex. Richiesto per contenuto caricato dinamicamente. Più lento rispetto alla modalità standard. |
Esempi
Estrarre tutti i prezzi da una pagina
Corrisponde agli importi in euro nel formato €XX.XX su tutta la pagina. Restituisce tutte le corrispondenze come righe separate, facilitando la visualizzazione di tutti i prezzi a colpo d'occhio.
=SCRAPE_BY_REGEX("https://store.example.com/deals", "\$[0-9,]+\.\d{2}")Output
| $49.99 |
| $129.00 |
| $24.95 |
| $89.50 |
Estrarre indirizzi email da una pagina di contatto
Usa un pattern regex standard per email con removeHtml abilitato per trovare tutti gli indirizzi email sulla pagina indipendentemente da come sono avvolti nell'HTML.
=SCRAPE_BY_REGEX("https://example.com/contact", "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", TRUE)Output
| info@example.com |
| support@example.com |
| sales@example.com |
Estrarre valori usando un gruppo di cattura
Corrisponde al pattern "SKU: ABC-123" e restituisce solo il gruppo di cattura (il codice SKU stesso, senza il prefisso "SKU:"). Il gruppo 1 isola il valore tra parentesi.
=SCRAPE_BY_REGEX("https://store.example.com/product/123", "SKU:\s*([A-Z0-9-]+)", TRUE, 1)Output
WH-1000XM5Estrarre numeri di telefono da elenchi aziendali
Corrisponde ai numeri di telefono italiani nel formato appropriato. Il parametro removeHtml garantisce che i numeri di telefono divisi su tag HTML vengano catturati correttamente.
=SCRAPE_BY_REGEX("https://directory.example.com/plumbers", "\(\d{3}\)\s*\d{3}-\d{4}", TRUE)Output
| (555) 123-4567 |
| (555) 987-6543 |
| (555) 246-8135 |
Casi d'Uso
Monitoraggio Prezzi su Più Rivenditori
Traccia i prezzi dei prodotti su diversi rivenditori usando pattern regex che corrispondono al formato prezzo di ogni sito. Funziona anche quando le strutture HTML differiscono tra i siti, poiché il regex punta al pattern di prezzo stesso piuttosto che al markup circostante.
Lead Generation da Directory Aziendali
Estrai informazioni di contatto (email, numeri di telefono, indirizzi) da directory aziendali e pagine gialle. I pattern regex corrispondono in modo affidabile ai formati di dati strutturati come numeri di telefono ed email indipendentemente da come vengono visualizzati sulla pagina.
Estrazione SKU Catalogo Prodotti
Estrai codici prodotto, SKU e numeri di modello da cataloghi fornitori e siti web di produttori. Usa regex per corrispondere ai formati di codice specifici dell'azienda (ad es. "XX-####-YY") e costruisci database prodotti completi.
Estrazione Riferimenti Documenti Legali
Estrai numeri di caso, riferimenti a statuti e citazioni di regolamenti da database legali e siti web di tribunali. Regex corrisponde precisamente ai formati di citazione come numeri di causa o riferimenti normativi.
Tracciamento Numeri Versione e Changelog
Monitora pagine di rilascio software e changelog per tracciare numeri di versione, date di rilascio e frequenze di aggiornamento. Pattern regex come "v\d+\.\d+\.\d+" estraggono in modo affidabile numeri di versione semantica da qualsiasi formato di pagina.
Raccolta Dati Profili Social Media
Estrai conteggi follower, metriche di engagement e informazioni di profilo da pagine pubbliche di social media. Regex gestisce i vari formati numerici (1.2K, 1.200, 1200) usati su diverse piattaforme.
Suggerimenti Professionali
Testa sempre il tuo regex su regex101.com prima di usarlo nel foglio di calcolo. Incolla il sorgente HTML (o contenuto di testo se usi removeHtml) come stringa di test per verificare che il tuo pattern corrisponda correttamente.
Usa quantificatori non-greedy (*? e +?) invece di greedy (* e +) quando corrispondi contenuto tra delimitatori. Ad esempio, "<b>.*?</b>" corrisponde a singoli elementi bold, mentre "<b>.*</b>" corrisponde a tutto dal primo <b> all'ultimo </b>.
Combina removeHtml con pattern di testo semplici per i risultati più affidabili. Regex su testo pulito è molto più facile da scrivere e mantenere rispetto a regex su HTML grezzo con tutti i suoi attributi e tag annidati.
Usa gruppi di cattura strategicamente: avvolgi solo la parte che vuoi estrarre tra parentesi e imposta il parametro group di conseguenza. Questo ti permette di usare testo circostante come ancore di contesto senza includerlo nell'output.
Per estrarre dati strutturati come tabelle, considera invece l'uso di SCRAPE_BY_CSS_PATH o SCRAPE_BY_XPATH. Regex funziona meglio per estrarre pattern di dati specifici (numeri, codici, email) piuttosto che navigare la struttura del documento.
La funzione recupera l'URL target, opzionalmente rimuove i tag HTML (quando removeHtml è TRUE), e poi applica il tuo pattern regex. Tutte le corrispondenze vengono restituite, con più corrispondenze che appaiono come righe separate nel tuo foglio di calcolo. Se usi gruppi di cattura nel tuo pattern, specifica quale gruppo restituire con il parametro group, dove 0 restituisce la corrispondenza completa e 1 restituisce il primo gruppo di cattura.
Il parametro removeHtml è particolarmente utile quando i dati di cui hai bisogno si estendono su tag HTML. Ad esempio, un prezzo potrebbe essere renderizzato come "<span class="currency">€</span><span class="amount">29.99</span>", che è difficile da corrispondere con un singolo regex su HTML grezzo. Impostare removeHtml su TRUE lo riduce a "€29.99", rendendo il tuo pattern regex più semplice e affidabile.
Per siti web che generano contenuto con JavaScript, abilita il parametro renderJs per usare un browser headless. Questo garantisce che il regex venga applicato contro il contenuto della pagina completamente renderizzato piuttosto che solo il sorgente HTML iniziale.
SCRAPE_BY_REGEX eccelle in scenari in cui i dati target non hanno una struttura HTML consistente ma hanno un formato di testo consistente. È anche preziosa come alternativa quando i selettori CSS e XPath falliscono a causa di markup offuscato o generato dinamicamente. Le applicazioni comuni includono monitoraggio prezzi, estrazione informazioni di contatto, raccolta SKU e codici prodotto, e flussi di lavoro di validazione dati.
Errori Comuni
No matches foundCausa: Il pattern regex non corrisponde a nessun contenuto sulla pagina. Questo può accadere se il pattern è troppo specifico, il contenuto viene renderizzato tramite JavaScript, o i tag HTML stanno interferendo con la corrispondenza del testo.
Soluzione: Prova ad abilitare removeHtml per corrispondere contro testo semplice invece di HTML grezzo. Verifica il tuo regex su regex101.com usando il sorgente della pagina come stringa di test. Se il contenuto viene caricato dinamicamente, abilita renderJs.
Error: URL and regex are requiredCausa: Uno o entrambi i parametri richiesti sono mancanti o vuoti.
Soluzione: Assicurati che sia l'URL (incluso il protocollo) che il pattern regex siano forniti come stringhe non vuote. Verifica che i riferimenti di cella puntino a celle con valori.
Error: Invalid regular expressionCausa: Il pattern regex contiene un errore di sintassi come parentesi non corrispondenti, sequenze di escape non valide o classi di caratteri malformate.
Soluzione: Valida il tuo regex su regex101.com. Problemi comuni includono caratteri speciali senza escape (parentesi, parentesi quadre, punti necessitano di barre inverse se usati letteralmente), delimitatori di gruppo non corrispondenti e posizioni di quantificatore non valide.
Domande Frequenti
Nelle formule di Google Sheets, le stringhe sono racchiuse tra virgolette doppie. Poiché regex usa barre inverse per caratteri speciali (\d per cifre, \s per spazi bianchi), e il parser di formule di Sheets non interpreta le barre inverse come caratteri di escape all'interno delle stringhe, le scrivi come singole barre inverse: "\d+" corrisponde a una o più cifre. Se vedi comportamenti inaspettati, prova il pattern con removeHtml impostato su TRUE per semplificare il contenuto da corrispondere. Testa il tuo regex su regex101.com prima di usarlo nella funzione.
Il gruppo 0 (predefinito) restituisce l'intero testo corrispondente. Il gruppo 1 restituisce solo il testo all'interno del primo set di parentesi nel tuo pattern. Ad esempio, con il pattern "Prezzo: (€[0-9.]+)" applicato al testo "Prezzo: €29.99", il gruppo 0 restituisce "Prezzo: €29.99" e il gruppo 1 restituisce "€29.99". Questo è utile quando devi corrispondere a un pattern per contesto ma estrarre solo parte di esso. Puoi avere più gruppi di cattura (gruppo 2, gruppo 3, ecc.) aggiungendo più sezioni tra parentesi al tuo pattern.
Abilita removeHtml (imposta su TRUE) quando: (1) Il testo che vuoi corrispondere è diviso su più tag HTML, come un prezzo visualizzato come "<span>€</span><span>29</span>.<span>99</span>". (2) I tag HTML stanno interferendo con le corrispondenze del tuo pattern. (3) Vuoi corrispondere solo contro il contenuto di testo visibile, ignorando tutto il markup. (4) Il tuo regex è progettato per testo semplice, non HTML. Lascialo su FALSE quando devi specificamente corrispondere ad attributi HTML, nomi di tag o struttura del markup.
Il motore regex supporta flag inline usando la sintassi (?flags) all'inizio del tuo pattern. Usa "(?i)" per corrispondenza case-insensitive, "(?s)" per modalità single-line (punto corrisponde a newline), e "(?m)" per modalità multiline. Ad esempio, "(?i)prezzo:\s*€[0-9.]+" corrisponde alle varianti "Prezzo:", "PREZZO:" e "prezzo:". Puoi combinare flag: "(?im)" abilita entrambe le modalità case-insensitive e multiline.
Per impostazione predefinita, il regex viene applicato al sorgente HTML grezzo, che include tutti i tag, attributi e markup. Ad esempio, un pattern come "[A-Z][a-z]+" destinato a corrispondere a parole maiuscole potrebbe anche corrispondere a nomi di tag come "Div" o "Span". Imposta removeHtml su TRUE per rimuovere prima tutti i tag HTML, così il tuo regex vede solo il contenuto di testo visibile. In alternativa, rendi il tuo regex più specifico per escludere pattern HTML.
Il motore regex supporta sintassi completa compatibile con PCRE inclusi lookahead, lookbehind, gruppi non di cattura, quantificatori lazy e classi di caratteri. Tuttavia, pattern estremamente complessi con backtracking eccessivo (come quantificatori annidati come "(a+)+") possono causare errori di timeout. Mantieni i pattern il più semplici e specifici possibile. Se ti trovi a scrivere pattern regex molto lunghi, considera l'uso di SCRAPE_BY_CSS_PATH o SCRAPE_BY_XPATH per restringere prima il contenuto, poi usa regex sul risultato.
REGEXEXTRACT è una funzione nativa di Google Sheets che applica un regex a testo già nel tuo foglio di calcolo. SCRAPE_BY_REGEX recupera una pagina web e applica il regex al contenuto della pagina, combinando recupero web ed estrazione in un singolo passaggio. Potresti ottenere risultati simili usando SCRAPE_BY_CSS_PATH per ottenere il testo della pagina e poi REGEXEXTRACT sul risultato, ma SCRAPE_BY_REGEX è più efficiente poiché elabora tutto lato server in una richiesta e può restituire più corrispondenze.
Per impostazione predefinita, il punto (.) nel regex non corrisponde ai caratteri newline. Se hai bisogno di corrispondere su interruzioni di riga, usa il flag inline "(?s)" all'inizio del tuo pattern per abilitare la modalità single-line, dove il punto corrisponde a qualsiasi carattere inclusi i newline. Ad esempio, "(?s)<div class="product">.*?</div>" corrisponde a un div e tutto il suo contenuto su più righe. Il flag (?m) fa sì che ^ e $ corrispondano all'inizio/fine di ogni riga piuttosto che all'intera stringa.
Funzioni Correlate
Inizia a usare SCRAPE_BY_REGEX oggi
Installa Unlimited Sheets per ottenere SCRAPE_BY_REGEX e altre 41 potenti funzioni in Google Sheets.