Scraping por linguagem 7 min de leitura

Extração de dados web no Google Sheets: fórmulas IMPORT e Apps Script

Extraia dados da web direto no Google Sheets: IMPORTXML, IMPORTHTML e Apps Script, com os limites das fórmulas e o que fazer quando elas não dão conta.

EW
Equipe Web-Scraping.biz
Coleta de dados para as demandas do negócio
Publicado: 12 março 2025

Se o scraping com Excel / VBA é a via «desktop», em que um script traz os dados direto para a pasta de trabalho, o Google Sheets oferece algo que o Excel não traz de fábrica: fórmulas de importação integradas. Em muitos casos não é preciso escrever uma linha de código sequer: basta inserir uma função em uma célula para que a planilha carregue sozinha os dados do site e os mantenha atualizados.

E quando as fórmulas não dão conta, entra em cena o Google Apps Script, o análogo em nuvem do VBA, escrito em JavaScript. Ele sabe fazer requisições HTTP, parsear JSON e rodar em horários programados — e tudo isso executa nos servidores do Google, não na sua máquina.

Neste artigo percorremos os dois níveis: primeiro as fórmulas, para uma extração rápida sem código; depois o Apps Script, para as tarefas complexas.

Em que o Google Sheets difere do Excel / VBA

A comparação ajuda a escolher a ferramenta conforme a tarefa:

Critério Excel / VBA Google Sheets
Extrair dados com uma fórmula, sem código Só com Power Query IMPORTXML, IMPORTHTML etc.
Linguagem de scripts VBA Apps Script (JavaScript)
Onde executa No seu PC Na nuvem do Google
Execução programada Agendador de Tarefas do Windows + macro Acionadores nativos
Trabalho colaborativo Compartilhando o arquivo Em tempo real, por um link
Dados financeiros prontos Não GOOGLEFINANCE integrada
Limites de requisições Praticamente nenhum Cotas do Google

A conclusão principal: para uma extração leve ou média, o Google Sheets costuma ser mais rápido, porque metade das tarefas se resolve com uma única fórmula. Nos cenários pesados e fora do padrão, a lógica é a mesma do VBA; o que muda é apenas a sintaxe.

Nível 1. Extração com fórmulas

IMPORTHTML — tabelas e listas

A função mais simples. Extrai uma tabela ou uma lista inteira pelo seu número:

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

Argumentos: a URL, o tipo de elemento ("table" ou "list") e o número de ordem dele na página. Se a página contém várias tabelas, vá testando o índice (1, 2, 3...) até achar a que procura. O resultado se «derrama» automaticamente pelas células vizinhas.

IMPORTXML — extração precisa com XPath

A mais poderosa das ferramentas de fórmula. Recebe uma URL e uma consulta XPath, a expressão que aponta para um elemento específico da marcação:

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

Alguns modelos de XPath úteis:

Tarefa XPath
Todos os títulos h2 //h2
Elemento pela classe //div[@class='value']
Elemento pelo id //*[@id='price']
Um atributo (por exemplo, um link) //a/@href
O texto dentro de uma tag //span[@class='cur']/text()
O enésimo elemento de uma lista (//li)[3]

O jeito mais fácil de obter o XPath é olhar no navegador: abra as ferramentas de desenvolvedor (F12), localize o elemento e clique com o botão direito → Copy → Copy XPath.

IMPORTDATA — CSV e TSV

Se a fonte oferece um arquivo CSV ou TSV já pronto, trazemos direto:

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

A função distribui os valores pelas colunas por conta própria. Ideal para datasets abertos e exportações.

IMPORTFEED — RSS e Atom

Para feeds de notícias e blogs:

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

GOOGLEFINANCE — finanças sem scraping nenhum

Merece menção à parte a GOOGLEFINANCE, a fonte integrada de dados de bolsa e de câmbio. É o caso em que não é preciso scrapear nada: o Google já coletou tudo por você.

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

O primeiro exemplo é o preço atual de uma ação; o segundo, a cotação de um par de moedas; o terceiro, as cotações históricas de um período. Se a sua tarefa cabe no que a GOOGLEFINANCE cobre, esse é o caminho mais confiável: sem bloqueios nem layout quebrado. O scraping de sites de terceiros só é necessário onde esses dados não existem ou quando é preciso uma fonte fora do padrão.

Nível 2. Google Apps Script

As fórmulas são ótimas, mas têm teto: não sabem se autenticar, contornar proteções complexas, processar o JSON aninhado de uma API nem executar lógica com ramificações. É aí que começa o Apps Script.

Abra a planilha → Extensões → Apps Script, e você entra no editor de código na nuvem. É o equivalente direto do editor de VBA do material sobre Excel, só que em JavaScript.

Requisição HTTP: UrlFetchApp

A requisição básica a uma página ou a uma API:

javascript
function getResponse(url) {
  const options = {
    method: 'get',
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    },
    muteHttpExceptions: true   // não falhar com os códigos 4xx/5xx
  };

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

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

Compare com a função GetResponse do artigo sobre VBA: a lógica é idêntica — abrir a requisição, definir o User-Agent, verificar o código de resposta. Só muda o invólucro: no lugar de MSXML2.XMLHTTP, aqui está o UrlFetchApp.

Parsing de JSON: nativo

A grande vantagem do Apps Script sobre o VBA: o JSON é parseado com uma única instrução integrada, sem funções caseiras nem módulos de terceiros.

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

  const data = JSON.parse(json);   // uma linha no lugar de ExtractJsonValue
  return data.price;
}

No VBA, para o mesmo resultado, era preciso analisar a string na mão ou plugar o VBA-JSON. Aqui basta o JSON.parse, e você já trabalha direto com o objeto.

Gravar o resultado na planilha

Gravamos os dados nas células por meio do objeto da planilha:

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

  // Cabeçalhos
  sheet.getRange(1, 1, 1, 3).setValues([['Ticker', 'Preço', 'Hora']]);

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

  tickers.forEach(function (ticker) {
    const price = getPrice(ticker);
    rows.push([ticker, price, now]);
    Utilities.sleep(1000);   // pausa de 1 s entre as requisições
  });

  // Despejamos tudo em uma única chamada: é mais rápido
  sheet.getRange(2, 1, rows.length, 3).setValues(rows);
}

O princípio de «acumular em um array e despejar em uma única chamada» é tão importante para a velocidade aqui quanto no VBA: o setValues sobre o intervalo inteiro roda várias vezes mais rápido do que gravar célula a célula dentro de um laço.

Parsing de HTML no Apps Script

Com a análise de HTML nativa a coisa complica: o Apps Script não tem um parser do DOM completo como o HTMLDocument do VBA. Na prática, usam-se expressões regulares ou a extração de texto entre marcadores:

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

// Exemplo: tirar o preço de "<span class='price'>152.34</span>"
// const price = extractByRegex(html, "class='price'>([\\d.]+)<");

Para marcações complexas, às vezes se recorre a bibliotecas de terceiros (por exemplo, o Cheerio por meio de um serviço intermediário), mas na maioria das tarefas bastam as expressões regulares ou a fórmula XPath IMPORTXML.

Uma função personalizada para a célula

O Apps Script permite criar uma fórmula própria, chamável direto da planilha como se fosse nativa:

javascript
/**
 * Retorna o preço de um ticker.
 * @customfunction
 */
function MYPRICE(symbol) {
  return getPrice(symbol);
}

Depois de salvar, a célula passa a aceitar =MYPRICE("AAPL"). O VBA tem um recurso parecido com as UDF, mas aqui a função fica disponível de imediato para todos que têm acesso à planilha.

Atualização automática programada

No VBA, execuções periódicas exigem o agendador de tarefas externo do Windows. No Google Sheets, o agendamento vem integrado: são os acionadores (triggers).

No editor do Apps Script: ícone do relógio (Acionadores) → Adicionar acionador → escolha a função, o evento «baseado em tempo» e o intervalo (a cada hora, a cada dia etc.).

Ou via código:

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

O script rodará nos servidores do Google mesmo com a sua máquina desligada e a planilha fechada. Para um scraper em VBA, isso é inalcançável sem um computador ligado o tempo todo.

Limites e armadilhas ocultas

A abordagem em nuvem tem seu preço: as cotas do Google.

  • As fórmulas IMPORT... se atualizam periodicamente (aproximadamente uma vez por hora) e são cacheadas. Não servem para dados atualizados ao segundo.
  • O UrlFetchApp tem um limite diário de chamadas (depende do tipo de conta; em geral, milhares de requisições por dia na gratuita).
  • O tempo de execução do script é limitado (na casa de 6 minutos por execução nas contas gratuitas). Uma extração longa terá de ser fatiada.
  • #N/A e Loading... nas fórmulas costumam significar que a fonte não retornou dados, o layout mudou ou a requisição vinda dos servidores do Google foi bloqueada.

Essas restrições são o principal motivo pelo qual o scraping pesado e frequente às vezes volta para o trilho «desktop» do material sobre Excel / VBA, onde, na prática, não há limites de requisições.

O que escolher: Sheets ou Excel / VBA

Um resumo rápido:

  • Rápido e sem código, dados na planilha, trabalho em equipe → Google Sheets e fórmulas.
  • Taxas de câmbio e cotações de bolsa → primeiro a GOOGLEFINANCE; só se ela não der conta, scraping.
  • Atualização automática sem PC ligado → Google Sheets com acionadores.
  • Grande volume, requisições frequentes, sem limites, parsing de HTML complexoExcel / VBA.
  • Ambiente corporativo sem nuvem, dados locais → Excel / VBA.

Conclusão

O Google Sheets cobre dois níveis de extração de dados com uma única ferramenta. As fórmulas IMPORTHTML, IMPORTXML, IMPORTDATA e GOOGLEFINANCE resolvem as tarefas típicas sem uma linha de código, e o Apps Script, com o UrlFetchApp e o JSON.parse nativo, assume tudo o que é complexo — e faz isso na nuvem, em horários programados e sem depender da sua máquina.

Na comparação com a abordagem do material sobre Excel / VBA, a lógica continua a mesma — requisição, parsing, gravação, tratamento de erros —, mas a sintaxe é mais simples, o JSON é parseado «de fábrica» e a automação não exige um agendador externo. O preço da comodidade são as cotas do Google: quando esbarrar nelas, faz sentido voltar à solução desktop em VBA. As duas ferramentas não competem entre si — elas se complementam: escolha conforme a tarefa concreta.