SCRAPE_BY_REGEX
Extrai conteúdo de uma página web usando um padrão de expressão regular.
=SCRAPE_BY_REGEX(url, regex, [removeHtml], [group], [renderJs])Retorna: string or 2D array (multiple matches returned as separate rows)
Visão Geral
SCRAPE_BY_REGEX extrai conteúdo de páginas web aplicando um padrão de expressão regular ao código fonte da página. Ao contrário de seletores CSS ou XPath que navegam a estrutura do documento, regex opera diretamente no conteúdo HTML ou de texto bruto, tornando-a adequada exclusivamente para extrair padrões específicos como preços, números de telefone, endereços de e-mail, datas, códigos de produto, chaves de API e qualquer outro texto que siga um formato previsível.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string | Sim | A URL completa da página web a ser extraída (deve incluir https:// ou http://). |
regex | string | Sim | Padrão de expressão regular para corresponder ao conteúdo da página. Use sintaxe regex padrão. Barras invertidas devem ser duplicadas em fórmulas do Sheets (por exemplo, "\\d+" para dígitos). |
removeHtml | boolean | Não (FALSE) | Opcional. Defina como TRUE para remover todas as tags HTML antes de aplicar o regex, deixando apenas conteúdo de texto visível. O padrão é FALSE (regex aplicado ao código HTML fonte). |
group | number | Não (0) | Opcional. O grupo de captura a retornar. 0 retorna a correspondência completa, 1 retorna o primeiro grupo de captura, 2 o segundo, etc. O padrão é 0. |
renderJs | boolean | Não | Opcional. Defina como TRUE para renderizar JavaScript antes de aplicar o regex. Necessário para conteúdo carregado dinamicamente. Mais lento que o modo padrão. |
Exemplos
Extrair todos os preços de uma página
Corresponde a valores em reais no formato R$XX.XX em toda a página. Retorna todas as correspondências como linhas separadas, facilitando ver todos os preços de relance.
=SCRAPE_BY_REGEX("https://store.example.com/deals", "\$[0-9,]+\.\d{2}")Saída
| $49.99 |
| $129.00 |
| $24.95 |
| $89.50 |
Extrair endereços de e-mail de uma página de contato
Usa um padrão regex padrão de e-mail com removeHtml habilitado para encontrar todos os endereços de e-mail na página independentemente de como estão envolvidos em HTML.
=SCRAPE_BY_REGEX("https://example.com/contact", "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", TRUE)Saída
| info@example.com |
| support@example.com |
| sales@example.com |
Extrair valores usando um grupo de captura
Corresponde ao padrão "SKU: ABC-123" e retorna apenas o grupo de captura (o código SKU em si, sem o prefixo "SKU:"). Grupo 1 isola o valor dentro dos parênteses.
=SCRAPE_BY_REGEX("https://store.example.com/product/123", "SKU:\s*([A-Z0-9-]+)", TRUE, 1)Saída
WH-1000XM5Extrair números de telefone de listagens de empresas
Corresponde a números de telefone brasileiros no formato (XX) XXXX-XXXX. O parâmetro removeHtml garante que números de telefone divididos em tags HTML sejam capturados corretamente.
=SCRAPE_BY_REGEX("https://directory.example.com/plumbers", "\(\d{3}\)\s*\d{3}-\d{4}", TRUE)Saída
| (555) 123-4567 |
| (555) 987-6543 |
| (555) 246-8135 |
Casos de Uso
Monitoramento de Preços em Múltiplos Varejistas
Acompanhe preços de produtos em diferentes varejistas usando padrões regex que correspondem ao formato de preço de cada site. Funciona mesmo quando as estruturas HTML diferem entre sites, já que o regex direciona o padrão de preço em si em vez da marcação circundante.
Geração de Leads de Diretórios de Empresas
Extraia informações de contato (e-mails, números de telefone, endereços) de diretórios de empresas e páginas amarelas. Padrões regex correspondem confiavelmente a formatos de dados estruturados como números de telefone e e-mails independentemente de como são exibidos na página.
Extração de SKU de Catálogos de Produtos
Extraia códigos de produto, SKUs e números de modelo de catálogos de fornecedores e sites de fabricantes. Use regex para corresponder a formatos de código específicos da empresa (por exemplo, "XX-####-YY") e construa bases de dados de produtos abrangentes.
Extração de Referências de Documentos Legais
Extraia números de caso, referências de estatutos e citações de regulamentos de bases de dados legais e sites de tribunais. Regex corresponde precisamente a formatos de citação como "Lei 8.078/90" ou números de processo.
Rastreamento de Números de Versão e Changelogs
Monitore páginas de lançamento de software e changelogs para rastrear números de versão, datas de lançamento e frequências de atualização. Padrões regex como "v\d+\.\d+\.\d+" extraem confiavelmente números de versão semântica de qualquer formato de página.
Coleta de Dados de Perfis de Redes Sociais
Extraia contagens de seguidores, métricas de engajamento e informações de perfil de páginas públicas de redes sociais. Regex lida com os vários formatos de números (1,2K, 1.200, 1200) usados em diferentes plataformas.
Dicas Profissionais
Sempre teste seu regex em regex101.com antes de usá-lo na planilha. Cole o código HTML fonte (ou conteúdo de texto se usar removeHtml) como a string de teste para verificar se seu padrão corresponde corretamente.
Use quantificadores não-gulosos (*? e +?) em vez de gulosos (* e +) ao corresponder conteúdo entre delimitadores. Por exemplo, "<b>.*?</b>" corresponde a elementos bold individuais, enquanto "<b>.*</b>" corresponde a tudo desde o primeiro <b> até o último </b>.
Combine removeHtml com padrões de texto simples para resultados mais confiáveis. Regex em texto limpo é muito mais fácil de escrever e manter que regex em HTML bruto com todos seus atributos e tags aninhadas.
Use grupos de captura estrategicamente: envolva apenas a parte que você quer extrair em parênteses e defina o parâmetro group de acordo. Isso permite usar texto circundante como âncoras de contexto sem incluí-lo na saída.
Para extrair dados estruturados como tabelas, considere usar SCRAPE_BY_CSS_PATH ou SCRAPE_BY_XPATH. Regex funciona melhor para extrair padrões de dados específicos (números, códigos, e-mails) em vez de navegar estrutura de documentos.
A função busca a URL alvo, opcionalmente remove tags HTML (quando removeHtml é TRUE), e então aplica seu padrão regex. Todas as correspondências são retornadas, com múltiplas correspondências aparecendo como linhas separadas na sua planilha. Se você usar grupos de captura no seu padrão, especifique qual grupo retornar com o parâmetro group, onde 0 retorna a correspondência completa e 1 retorna o primeiro grupo de captura.
O parâmetro removeHtml é particularmente útil quando os dados que você precisa se espalham por tags HTML. Por exemplo, um preço pode ser renderizado como "<span class="currency">R$</span><span class="amount">29.99</span>", que é difícil de corresponder com um único regex em HTML bruto. Definir removeHtml como TRUE colapsa isso em "R$29.99", tornando seu padrão regex mais simples e confiável.
Para sites que geram conteúdo com JavaScript, habilite o parâmetro renderJs para usar um navegador headless. Isso garante que o regex seja aplicado ao conteúdo da página totalmente renderizado em vez de apenas o código HTML fonte inicial.
SCRAPE_BY_REGEX se destaca em cenários onde os dados alvo não têm estrutura HTML consistente mas têm um formato de texto consistente. Também é valiosa como alternativa quando seletores CSS e XPath falham devido a marcação ofuscada ou gerada dinamicamente. Aplicações comuns incluem monitoramento de preços, extração de informações de contato, coleta de SKU e códigos de produto, e fluxos de trabalho de validação de dados.
Erros Comuns
No matches foundCausa: O padrão regex não corresponde a nenhum conteúdo na página. Isso pode acontecer se o padrão é muito específico, o conteúdo é renderizado via JavaScript, ou tags HTML estão interferindo com a correspondência de texto.
Correção: Tente habilitar removeHtml para corresponder a texto plano em vez de HTML bruto. Verifique seu regex em regex101.com usando o código fonte da página como string de teste. Se o conteúdo é carregado dinamicamente, habilite renderJs.
Error: URL and regex are requiredCausa: Um ou ambos os parâmetros obrigatórios estão ausentes ou vazios.
Correção: Certifique-se de que tanto a URL (incluindo protocolo) quanto o padrão regex estejam fornecidos como strings não vazias. Verifique se as referências de célula apontam para células com valores.
Error: Invalid regular expressionCausa: O padrão regex contém um erro de sintaxe como parênteses não correspondentes, sequências de escape inválidas ou classes de caracteres malformadas.
Correção: Valide seu regex em regex101.com. Problemas comuns incluem caracteres especiais sem escape (parênteses, colchetes, pontos precisam de barras invertidas se usados literalmente), delimitadores de grupo não correspondentes e posições de quantificador inválidas.
Perguntas Frequentes
Em fórmulas do Google Sheets, strings são cercadas por aspas duplas. Como regex usa barras invertidas para caracteres especiais (\d para dígitos, \s para espaços em branco), e o analisador de fórmulas do Sheets não interpreta barras invertidas como caracteres de escape dentro de strings, você as escreve como barras invertidas simples: "\d+" corresponde a um ou mais dígitos. Se você está vendo comportamento inesperado, tente o padrão com removeHtml definido como TRUE para simplificar o conteúdo sendo correspondido. Teste seu regex em regex101.com antes de usá-lo na função.
Grupo 0 (o padrão) retorna todo o texto correspondente. Grupo 1 retorna apenas o texto dentro do primeiro conjunto de parênteses no seu padrão. Por exemplo, com o padrão "Preço: (R\$[0-9,]+)" aplicado ao texto "Preço: R$29,99", grupo 0 retorna "Preço: R$29,99" e grupo 1 retorna "R$29,99". Isso é útil quando você precisa corresponder a um padrão para contexto mas apenas extrair parte dele. Você pode ter múltiplos grupos de captura (grupo 2, grupo 3, etc.) adicionando mais seções entre parênteses ao seu padrão.
Habilite removeHtml (defina como TRUE) quando: (1) O texto que você quer corresponder está dividido em múltiplas tags HTML, como um preço exibido como "<span>R$</span><span>29</span>,<span>99</span>". (2) Tags HTML estão interferindo com suas correspondências de padrão. (3) Você quer corresponder apenas ao conteúdo de texto visível, ignorando toda marcação. (4) Seu regex é projetado para texto plano, não HTML. Deixe como FALSE quando você especificamente precisa corresponder a atributos HTML, nomes de tags ou estrutura de marcação.
O motor regex suporta flags inline usando a sintaxe (?flags) no início do seu padrão. Use "(?i)" para correspondência insensível a maiúsculas, "(?s)" para modo de linha única (ponto corresponde a quebras de linha), e "(?m)" para modo multilinha. Por exemplo, "(?i)preço:\s*R\$[0-9,]+" corresponde a variantes de "Preço:", "PREÇO:" e "preço:". Você pode combinar flags: "(?im)" habilita tanto modo insensível a maiúsculas quanto multilinha.
Por padrão, o regex é aplicado ao código HTML fonte bruto, que inclui todas as tags, atributos e marcação. Por exemplo, um padrão como "[A-Z][a-z]+" destinado a corresponder a palavras capitalizadas também pode corresponder a nomes de tags como "Div" ou "Span". Defina removeHtml como TRUE para remover todas as tags HTML primeiro, para que seu regex veja apenas o conteúdo de texto visível. Alternativamente, torne seu regex mais específico para excluir padrões HTML.
O motor regex suporta sintaxe completa compatível com PCRE incluindo lookaheads, lookbehinds, grupos sem captura, quantificadores preguiçosos e classes de caracteres. No entanto, padrões extremamente complexos com backtracking excessivo (como quantificadores aninhados como "(a+)+") podem causar erros de timeout. Mantenha os padrões tão simples e específicos quanto possível. Se você se encontrar escrevendo padrões regex muito longos, considere usar SCRAPE_BY_CSS_PATH ou SCRAPE_BY_XPATH para reduzir o conteúdo primeiro, então use regex no resultado.
REGEXEXTRACT é uma função nativa do Google Sheets que aplica um regex a texto já na sua planilha. SCRAPE_BY_REGEX busca uma página web e aplica o regex ao conteúdo da página, combinando busca web e extração em um único passo. Você poderia alcançar resultados similares usando SCRAPE_BY_CSS_PATH para obter o texto da página e então REGEXEXTRACT no resultado, mas SCRAPE_BY_REGEX é mais eficiente pois processa tudo no lado do servidor em uma requisição e pode retornar múltiplas correspondências.
Por padrão, o ponto (.) em regex não corresponde a caracteres de quebra de linha. Se você precisa corresponder através de quebras de linha, use a flag inline "(?s)" no início do seu padrão para habilitar o modo de linha única, onde ponto corresponde a qualquer caractere incluindo quebras de linha. Por exemplo, "(?s)<div class="product">.*?</div>" corresponde a uma div e todo seu conteúdo através de múltiplas linhas. A flag (?m) faz ^ e $ corresponderem ao início/fim de cada linha em vez da string inteira.
Funções Relacionadas
Comece a usar SCRAPE_BY_REGEX hoje
Instale o Unlimited Sheets para obter SCRAPE_BY_REGEX e outras 41 funções poderosas no Google Sheets.