O Google Sheets é mais do que uma folha de cálculo - combinado com o Google Apps Script (um tempo de execução JavaScript), torna-se uma plataforma de raspagem leve para recolher dados públicos da Web, monitorizar alterações de preços, extrair tabelas e alimentar painéis de controlo.
Este guia orienta-o passo a passo na criação de fluxos de trabalho fiáveis de recolha de dados da Web do Google Sheets com JavaScript, automatizando-os, evitando bloqueios comuns e integrando proxies (incluindo um percurso prático para utilizar fornecedores como OkeyProxy) para reduzir 403 erros e melhorar as taxas de sucesso.
Nota rápida: respeitar sempre o ficheiro robots.txt de um sítio, os termos de serviço e a legislação local. Utilize a recolha de dados para obter dados públicos legítimos e para fins de investigação/monitorização.
O que é o Google Sheets Web Scraping com Javascript?
O JavaScript de raspagem da Web do Google Sheets significa utilizar o Google Sheets juntamente com o Google Apps Script (um ambiente JavaScript) para obter páginas Web de forma programática, extrair dados estruturados e inserir esses dados numa folha. O Script do Google Apps expõe UrlFetchApp para recuperar o conteúdo e o SpreadsheetApp API para escrever resultados. Para muitos casos de uso rápido, isso é rápido, sem servidor e gratuito (dentro das cotas do Apps Script).
Porquê utilizar o Google Apps Script (Urlfetchapp)?
- Ambiente familiar: Sintaxe JavaScript, fácil de começar.
- Nenhuma infraestruturaO sistema é executado nos servidores da Google - não é necessário gerir nenhum servidor.
- IntegraçãoO programa: escreve diretamente nas folhas de cálculo do Google, envia mensagens de correio eletrónico, accionamentos, etc.
- Programação: os accionadores orientados para o tempo automatizam a recolha periódica.
Limitações a ter em conta: O Apps Script é executado a partir da infraestrutura do Google (pelo que os pedidos têm origem em intervalos de IP do Google), tem quotas de execução/tempo e não possui bibliotecas de análise HTML robustas incorporadas, como o Cheerio (pode contornar esta situação ou utilizar um proxy/relé externo para tarefas mais pesadas).
- Para além do IMPORTXML: Se alguma vez tentou extrair dados de uma folha de cálculo, provavelmente já se deparou com o problema
=IMPORTXMLfunção.
O que é IMPORTXML? É uma fórmula integrada no Google Sheets que permite obter dados de um sítio Web específico, fornecendo um URL e um XPath (um "mapa" para os dados). Por exemplo: =IMPORTXML("https://example.com", "//h1") puxaria o título principal de uma página.
Embora pareça fácil, muitas vezes falha no mundo real por vários motivos. Por exemplo, muitos sites modernos são "aplicativos de página única" (criados com React ou Vue). O IMPORTXML só pode ler o código-fonte inicial; não pode "esperar" que o JavaScript carregue os dados reais.
Exemplo simples de raspagem: Obter HTML e escrever em uma planilha
Um Script Apps mínimo que vai buscar uma página e escreve o título numa folha:
função 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() : 'Nenhum título encontrado';
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow([new Date(), url, title]);
}
Isto é adequado para páginas estáticas simples. Para conteúdos mais estruturados (tabelas, listas), precisará de uma lógica de análise.
Análise de HTML: Estratégias e exemplos
Opção A - Análise ligeira de regex / cadeia de caracteres
Útil para páginas pequenas e previsíveis. Não é robusto para HTML malformado.
function parseTable(html) {
// exemplo grosseiro - não confie em regex para HTML complexo
const rows = html.match(/]*>([\s\S]*?)/gi) || [];
return rows.map(r => {
const cols = (r.match(/]*>([\s\S]*?)/gi) || [])
.map(c => c.replace(/]+>/g, '').trim());
return cols;
});
}
Opção B - XmlService para HTML/XML bem formado
XmlService pode analisar XHTML ou HTML organizado convertido em XML, mas muitas páginas não são XML válidas.
Opção C - Transferir a análise para um serviço externo
Para páginas complexas, a melhor abordagem é executar um pequeno microsserviço de análise (Node.js + Cheerio/Puppeteer) no Cloud Run ou no Cloud Functions. Seu script de aplicativos chama esse serviço (que retorna JSON), e o serviço lida com a análise de HTML e o trabalho anti-bot.
Manipulação de conteúdo dinâmico (JS-rendered)
Muitos sites modernos renderizam conteúdo do lado do cliente via JavaScript (AJAX). O UrlFetchApp busca apenas o HTML do servidor - ele não executa o JavaScript da página.
Opções:
- Localizar o ponto de extremidade JSON/XHR utilizado pela página e chamá-lo diretamente (inspecionar o separador Rede no DevTools).
- Utilizar um browser sem cabeça (Puppeteer ou Playwright) hospedado no Cloud Run/Cloud Functions para renderizar a página e retornar HTML ou JSON. Chame este renderizador a partir do Apps Script.
- Utilizar serviços de renderização de terceiros (pagos) que devolvem o HTML integralmente processado; garantir a conformidade.
Automatizando a raspagem com gatilhos e tratamento de erros
- Accionadores orientados para o tempo: programar a recolha diária/hora a hora.
- Recuo exponencial: em HTTP 429/5xx, recuar e tentar de novo.
- Registo e notificações: registo de falhas e envio de correio eletrónico sobre erros persistentes.
Exemplo: criar um acionador diário:
função createDailyTrigger() {
ScriptApp.newTrigger('fetchPageTitle')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
Problemas comuns de bloqueio: Reputação de IP, limites de taxa, Captchas
Os sítios Web bloqueiam ativamente a recolha de dados através de:
- Reputação do IP: muitos pedidos de IPs de fornecedores de serviços em nuvem conhecidos (como os IPs do Google Apps Script) podem ser limitados ou bloqueados.
- Limites de taxas: demasiados pedidos num curto espaço de tempo desencadeiam estrangulamentos.
- CAPTCHAs: apresentado quando o comportamento parece automatizado ou suspeito.
Principais medidas de defesa:
- Respeito
robots.txt e restrições legais/ToS.
- Adicionar atrasos semelhantes aos humanos entre os pedidos.
- Manter os cabeçalhos dos pedidos legítimos (
Agente do utilizador, Aceitar).
- Utilize proxies para diversificar a origem dos pedidos (mais abaixo).
- Evite tentar contornar os CAPTCHAs - em vez disso, utilize APIs oficiais ou resolução humana quando estiver em conformidade.
Ultrapassar bloqueios com proxies - Conceção e restrições
Os proxies alteram o IP de origem dos seus pedidos para que os sítios-alvo vejam os pedidos provenientes de endereços diferentes. Para o Google Sheets:
- Restrição importante:
UrlFetchApp é executado nos servidores do Google e não expõe a configuração nativa de proxy host:porta. Não é possível definir diretamente um anfitrião proxy SOCKS5 ou HTTP nas opções do UrlFetchApp.
Soluções alternativas:
- Relé proxy / fetcher: Implante um pequeno serviço de proxy/relé (Cloud Run / Cloud Function / VPS) que aceita uma solicitação do seu script de aplicativos e a encaminha por meio de um proxy configurado (como OkeyProxy). O Apps Script chama o ponto de extremidade do relé (
https://your-relay.example.com/fetch?url=...), e o relé executa a busca proxy e retorna o HTML/JSON. Esta é a abordagem mais fiável e flexível.
- API de encaminhamento HTTP do fornecedor: Alguns fornecedores de proxy expõem um ponto final da API HTTP que pode obter URLs arbitrários em seu nome. Se o OkeyProxy ou outro fornecedor oferecer uma API de reencaminhamento autenticada, pode chamá-la diretamente a partir do Apps Script (sem necessidade de retransmissão). Verifique os documentos do provedor.
Nota de segurança: Quando utilizar uma retransmissão, proteja-a (chave API, HTTPS) para que apenas o seu script de aplicações a possa utilizar.
Captchas: O que fazer quando os encontra
Não tente contornar captchas de forma programática, a menos que tenha permissão explícita. Contornar captchas para fugir às protecções pode ser ilegal e viola os termos de muitos sítios.
Se se depara frequentemente com captchas:
- Abrandar a taxa de pedidos.
- Melhorar a confiança no IP (utilizar procurações residenciais rotativas ou proxies ISP estáticos como o OkeyProxy fornece).
- Para investigação legítima em grande escala, contactar o proprietário do sítio para obter acesso ou pontos de extremidade da API.
- Para CAPTCHAs inevitáveis num fluxo de trabalho empresarial, utilize serviços de interação humana ou parcerias oficiais - e garanta a conformidade.
Melhores práticas (velocidade, cabeçalhos, quotas, ética)
Construir um scraper que funcione é uma coisa, mas garantir que se mantém fiável, respeitoso e desbloqueado requer uma abordagem mais disciplinada e "humana" à automatização.
Respeitar o robots.txt e os ToS do sítio
Antes de obter um único byte de dados, verifique sempre as regras do sítio de destino - manter a conformidade é a única forma de garantir a sustentabilidade do seu projeto a longo prazo.
Utilizar cabeçalhos realistas
Incorpore cabeçalhos padrão User-Agent, Accept-Language e Referer nas suas opções UrlFetchApp para que os seus pedidos se assemelhem a um browser padrão e não a um script.
Implementar a limitação da taxa e o jitter
Não sobrecarregue um servidor com mil pedidos por segundo. Implemente "jitter" (intervalos aleatórios de sono) entre os pedidos para manter os padrões de tráfego naturais.
Monitorizar respostas e retrocesso
Configure a lógica para apanhar respostas 429 (Demasiados pedidos) ou 5xx (Erro do servidor). Se o site lhe disser para abrandar, ouça imediatamente.
⚖️ Evitar a violação de direitos de autor
Utilize dados extraídos para análise interna, investigação ou monitorização de preços, mas nunca extraia material protegido por direitos de autor para redistribuição ou utilização comercial pública.
Registar e auditar os seus accionadores
Uma vez que o Google Apps Script é executado em segundo plano, mantenha um registo simples dos tempos de execução e dos códigos de erro para que possa depurar rapidamente as falhas "silenciosas".
Conclusão
A recolha de dados da Web do Google Sheets com JavaScript (Apps Script + UrlFetchApp) é uma solução pragmática para muitas tarefas ligeiras de recolha de dados e monitorização.
Para páginas que bloqueiam IPs de centros de dados ou activam captchas frequentemente, a introdução de uma estratégia de proxy controlada - idealmente através de um relé seguro que utiliza proxies ISP residenciais/estáticos de um fornecedor respeitável, como o OkeyProxy - aumenta drasticamente o sucesso, mantendo o seu fluxo de trabalho sem servidor e integrado no Sheets.
Perguntas mais frequentes
P: O Apps Script pode utilizar proxies diretamente?
R: Não - o UrlFetchApp não fornece configurações de host/porta de proxy incorporadas. Use um relé ou a API do lado do servidor do provedor.
P: É legal fazer scraping de sítios Web?
R: Depende. Os dados públicos podem, muitas vezes, ser extraídos para investigação e monitorização, mas respeite sempre os ToS e as leis do sítio (direitos de autor, privacidade, regras anti-raspagem). Em caso de dúvida, contacte o proprietário do sítio.
P: E os captchas?
R: Utilizar abordagens legítimas: abrandar os pedidos, melhorar a reputação do IP (proxies residenciais) ou obter acesso à API. Evite tentar derrotar captchas de forma programática sem permissão explícita.
Deslocar para o topo






