A maioria dos tutoriais sobre "gemini web scraping" parece ter sido escrita para a mesma pessoa: um desenvolvedor Python que já tem ambiente virtual, esquema Pydantic e uma opinião forte sobre bibliotecas assíncronas. Se esse é o teu caso, ótimo — já vamos chegar ao código. Mas se tu trabalhas com vendas, marketing ou operações de ecommerce e só quer dados estruturados de várias páginas da web sem precisar aprender o que o markdownify faz, tu não está sozinho.
O Gemini é a família multimodal de IA do Google e vem se tornando rapidamente um dos motores mais usados para extração de dados da web. O Stack Overflow Developer Survey de 2025 mostrou que já usam ou pretendem usar ferramentas de IA — e o scraping com LLMs é uma parte importante dessa onda. Mas existe uma diferença enorme entre uma "demo legal em uma única URL" e um pipeline capaz de lidar com paginação, subpáginas, bloqueios anti-bot e HTML bagunçado em escala. Este guia cobre tanto o caminho em Python (com código) quanto a alternativa sem código, mostra como escolher o modelo com contas reais de tokens, explica scraping em múltiplas páginas (a etapa que quase todos os outros tutoriais ignoram) e é honesto sobre onde o scraping com Gemini desmorona. No fim, tu vai saber qual caminho faz mais sentido para o teu fluxo de trabalho — e como evitar os erros que eu vejo derrubarem tanto desenvolvedores quanto usuários de negócio.
O que é Web Scraping com Gemini?
Web scraping com Gemini significa enviar o conteúdo de uma página — HTML, Markdown ou até mesmo uma captura de tela — para um dos modelos de IA do Google Gemini, que então interpreta a página e devolve os dados em formato estruturado. Sem seletores CSS. Sem XPath. Sem regras frágeis que quebram no instante em que o site muda o layout.
O fluxo principal funciona assim:
- Buscar a página (com
requests, um navegador headless ou uma extensão do Chrome) - Limpar e converter o conteúdo (geralmente de HTML para Markdown, para reduzir custo de tokens)
- Enviar para o Gemini com um esquema que descreve os campos desejados
- Receber JSON estruturado de volta — pronto para planilha, CRM ou banco de dados
Compara isso com o scraping tradicional com BeautifulSoup ou Selenium, em que tu codificas seletores como div.product-title > span.price e torce para que o site não mude o design na próxima terça-feira. O Gemini lê a página de forma parecida com um humano — entende contexto, se adapta a mudanças de layout e lida com formatação bagunçada sem regras personalizadas.
Mais um ponto importante: o Gemini é nativamente multimodal. Ele processa texto, imagens, vídeo, áudio, PDFs e código em uma única requisição. Isso abre abordagens de scraping — como enviar uma captura de tela em vez de HTML — que a maioria dos outros LLMs simplesmente não consegue igualar. Voltaremos a isso mais adiante.
Por que o Web Scraping com Gemini Importa para Times de Negócios
Se tu está se perguntando por que um gerente de marketing ou analista de ecommerce deveria se importar com LLMs e web scraping, aqui vai a versão curta: isso economiza uma quantidade absurda de tempo e não quebra toda vez que um site é atualizado.
O de cerca de US$ 1 bilhão em 2025 para mais de US$ 2 bilhões em 2030 — e a extração orientada por IA é o segmento que cresce mais rápido. Isso não é exagero; reflete uma mudança real na forma como as equipes coletam dados.
Veja onde o scraping com Gemini se encaixa em fluxos de trabalho de negócios do dia a dia:
| Caso de uso | O que você extrai | Quem se beneficia |
|---|---|---|
| Geração de leads | Informações de contato de diretórios, LinkedIn (público) e sites de empresas | Vendas, BDRs |
| Monitoramento de preços da concorrência | Preços de produtos, status de estoque, promoções | Ecommerce, times de precificação |
| Extração de catálogos de produtos | Nomes, especificações, imagens, avaliações | Merchandising, operações de marketplace |
| Anúncios imobiliários | Detalhes do imóvel, preços, informações do corretor | Corretores, investidores |
| Agregação de conteúdo | Notícias, posts de blog, menções em redes sociais | Marketing, PR |
| Pesquisa de mercado de trabalho | Cargos, salários, localizações | RH, recrutamento |
A vantagem prática é dupla. Primeiro, tu evita o ciclo de escrever, testar e depurar scripts de parsing — o modelo lê a página do zero a cada execução. Segundo, tu não precisa contratar um desenvolvedor toda vez que um site mexe em um <div>. O plano gratuito do Gemini torna a experimentação praticamente sem custo em tarefas pequenas: , sem precisar de cartão de crédito.
Qual Modelo do Gemini Você Deve Escolher? (Flash Lite vs. Flash vs. Pro)
Nem todos os modelos do Gemini funcionam igual para scraping. Esta é a comparação prática que eu queria ver em todo tutorial, porque escolher o nível errado só desperdiça dinheiro ou gera dados ruins.
Os três modelos atuais do Gemini 2.5 compartilham uma janela de contexto de 1.048.576 tokens e são multimodais. As diferenças estão no custo, na velocidade e em como lidam com extrações complexas.
| Modelo | Custo de entrada (por 1M tokens) | Custo de saída (por 1M tokens) | Melhor para | Precisão em esquemas complexos | Velocidade |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~US$ 0,025 | ~US$ 0,10 | Dados simples e planos, alto volume | ⚠️ Tem dificuldade com campos aninhados/opcionais | Mais rápido |
| Gemini 2.5 Flash | ~US$ 0,075 | ~US$ 0,625 | A maioria das tarefas de scraping | ✅ Bom para extração estruturada | Rápido |
| Gemini 2.5 Pro | ~US$ 0,3125 | ~US$ 2,50 | Esquemas aninhados complexos, casos extremos | ✅ Maior precisão | Mais lento |
(Preços da . A Batch API oferece 50% de desconto nessas tarifas.)
Gemini 2.5 Flash Lite: Rápido e Barato, mas com Atenção às Lacunas
O Flash Lite é a opção econômica. Ele é ideal para dados simples e planos — nomes de produtos, preços, listagens de um nível — em alto volume. Mas tem problemas documentados com campos opcionais, timestamps e dados aninhados. Um desenvolvedor no fórum do Google que o Flash Lite "enlouquece" quando os esquemas incluem propriedades não obrigatórias, emitindo texto repetitivo até estourar o limite de tokens. Se o teu esquema tiver mais de dois níveis de aninhamento, ou campos que possam não existir em algumas páginas, o Flash Lite vai consumir teus tokens e tua paciência.
Gemini 2.5 Flash: O Ponto Ideal para a Maioria dos Trabalhos
O Flash é onde eu começaria para quase qualquer tarefa real de scraping. Ele lida bem com extração estruturada, administra lógica de paginação e custa cerca de 3× mais que o Flash Lite na entrada — mas o ganho de precisão compensa. Em benchmarks de raciocínio do nível GPQA, o Flash fica a poucos pontos do Pro, o que significa que ele consegue lidar com inferência, normalização e achatamento de dados que o scraping realmente exige.
Gemini 2.5 Pro: Máxima Precisão para Dados Complexos
O Pro é a ferramenta de precisão. Use-o quando estiver extraindo esquemas profundamente aninhados (pensa em especificações de produtos com vários grupos de variantes, cada um com tamanhos, cores e preços) ou quando campos inventados forem inaceitáveis (dados jurídicos, financeiros ou médicos). Ele custa cerca de 12× mais na entrada que o Flash Lite, então reserve-o para casos em que precisão importa mais do que preço.
Exemplo Prático de Custo: 10.000 Páginas de Produtos
Assumindo que você pré-processe o HTML para Markdown (o que você deve fazer — mais sobre isso abaixo), uma página típica de produto cai de ~20.000 tokens de HTML bruto para ~4.000 tokens de Markdown. O JSON de saída fica em torno de 500 tokens por página.
| Modelo | Custo de entrada (40M tokens) | Custo de saída (5M tokens) | Total para 10 mil páginas |
|---|---|---|---|
| Flash Lite | US$ 1,00 | US$ 0,50 | ~US$ 1,50 |
| Flash | US$ 3,00 | US$ 3,13 | ~US$ 6,13 |
| Pro | US$ 12,50 | US$ 12,50 | ~US$ 25,00 |
Sem o pré-processamento para Markdown (HTML bruto com ~200M tokens de entrada), esses números sobem de 4× a 5×. O pré-processamento é a otimização com maior impacto em todo o pipeline.
Código vs. Sem Código: Dois Caminhos para Web Scraping com Gemini
Aqui está a bifurcação. Se você é um desenvolvedor construindo um pipeline personalizado, o caminho Python + Gemini API dá controle máximo. Se você é um usuário de negócio que precisa dos dados agora e não quer abrir um terminal, um scraper de IA sem código resolve isso mais rápido.
| Critério | Gemini API (Python) | Thunderbit (Sem código) |
|---|---|---|
| Tempo de configuração | 15–30 min (ambiente, chaves, bibliotecas) | < 1 min (instalar extensão do Chrome) |
| Exige programação | Sim (Python, Pydantic) | Não |
| Tratamento de paginação | Script manual | Nativo (clique ou rolagem infinita) |
| Enriquecimento de subpáginas | Código personalizado por site | "Scrape Subpages" com 1 clique |
| Gestão de custo de tokens | Manual (limpeza de HTML, escolha do modelo) | Feita pelo mecanismo de IA |
| Opções de exportação | JSON/CSV via script | Excel, Google Sheets, Airtable, Notion |
| Melhor para | Desenvolvedores construindo pipelines personalizados | Usuários de negócio que precisam de dados agora |
é a opção sem código que construímos na Thunderbit — uma extensão do Chrome que usa IA (incluindo Gemini, ChatGPT, Claude e outros nos bastidores) para sugerir campos, raspar em dois cliques e exportar para a ferramenta que você preferir. Vou mostrar os dois caminhos abaixo.
Para quem trabalha primeiro com planilhas, o Quadratic é outra opção interessante — é uma planilha com IA capaz de executar scraping com Gemini diretamente na própria planilha. Mas, para fluxos que começam de uma página web conhecida (listagens de produtos, diretórios, bases de leads), o Thunderbit se alinha melhor ao modelo mental do usuário.
Passo a Passo: Web Scraping com Gemini em Python
Esta seção é para desenvolvedores. Se você quer o caminho sem código, pule para a próxima parte.
Antes de começar:
- Nível: Intermediário (é necessário conhecer Python)
- Tempo necessário: ~20–30 minutos para o primeiro scraping
- Você vai precisar de: Python 3.10+, uma conta no Google AI Studio (gratuita) e uma URL de destino
Passo 1: Configure o Ambiente Python e a Chave da API Gemini
Crie uma pasta de projeto e um ambiente virtual, depois instale as bibliotecas necessárias:
1mkdir gemini-scraper && cd gemini-scraper
2python -m venv venv && source venv/bin/activate
3pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Importante: O único SDK correto em 2026 é google-genai. O pacote antigo google-generativeai chegou ao fim de vida em 30/11/2025 e agora está depreciado. Se você vir import google.generativeai as genai em um tutorial, esse código está desatualizado.
Em seguida, obtenha sua chave de API no . Clique em "Get API Key", crie uma chave nova e salve-a como variável de ambiente:
1export GEMINI_API_KEY="sua-chave-aqui"
Agora você deve ter um ambiente Python funcionando, com todas as dependências instaladas e sua chave de API pronta.
Passo 2: Busque o HTML da Página de Destino
Use requests para baixar a página. Para este exemplo, vamos raspar uma página de produto:
1import requests
2url = "https://example.com/product/widget-pro"
3response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
4html = response.text
Se o site usar muito JavaScript ou proteção anti-bot, o requests.get() pode retornar uma casca vazia ou um erro 403. Vamos cobrir as mitigações na seção de limitações — mas, para muitos sites públicos, isso funciona bem.
Passo 3: Limpe o HTML e Converta para Markdown
Esta é a etapa que a maioria dos tutoriais menciona, mas não quantifica. O HTML bruto de uma página típica de produto fica em torno de 20.000 tokens. Depois de remover ruídos com BeautifulSoup e converter para Markdown, você cai para algo entre ~765 e 4.000 tokens — uma que economiza dinheiro de verdade e diminui alucinações.
1from bs4 import BeautifulSoup
2from markdownify import markdownify
3soup = BeautifulSoup(html, "html.parser")
4main = soup.select_one("main") or soup # pega apenas a área de conteúdo
5markdown_content = markdownify(str(main))
A chamada select_one("main") remove cabeçalhos, rodapés, barras de navegação e scripts — todo o ruído que desperdiça tokens e confunde o modelo. Se o site não usar a tag <main>, tente .product-detail, #content ou qualquer outro contêiner que envolva os dados reais.
Depois dessa etapa, você deve ter uma string Markdown limpa, só com o conteúdo relevante da página.
Passo 4: Defina o Esquema de Dados e Envie ao Gemini
Use Pydantic para definir o que você quer receber. O SDK google-genai aceita um BaseModel do Pydantic diretamente como response_schema:
1from google import genai
2from google.genai import types
3from pydantic import BaseModel
4class Product(BaseModel):
5 name: str
6 price: str
7 sku: str | None = None
8 description: str
9 sizes: list[str] = []
10 colors: list[str] = []
11client = genai.Client() # lê GEMINI_API_KEY do ambiente
12response = client.models.generate_content(
13 model="gemini-2.5-flash",
14 contents=f"Extraia os detalhes do produto desta página:\n\n{markdown_content}",
15 config=types.GenerateContentConfig(
16 response_mime_type="application/json",
17 response_schema=Product,
18 ),
19)
20product = response.parsed
21print(product)
Alguns detalhes importantes do :
- Não use
Field(default=...)nos esquemas enviados ao Gemini — a API gera umValueError. Em vez disso, usesku: str | None = Noneno nível do tipo. - Mantenha o aninhamento raso (no máximo 3 níveis). Esquemas muito profundos fazem o Flash e o Flash Lite produzirem saída recursiva ou colchetes sem fechamento.
- Marque os campos como obrigatórios ao usar Flash Lite e use strings vazias sentinela em vez de omissão — o tratamento de campos opcionais no Flash Lite é .
Agora você deve ter um objeto Product analisado, com dados estruturados da página.
Passo 5: Exporte e Armazene os Dados Coletados
Salve o resultado como JSON ou CSV:
1import json
2with open("products.json", "w") as f:
3 json.dump(product.model_dump(), f, indent=2)
Para enviar ao Google Sheets, você pode usar a biblioteca gspread. Para bancos de dados, serialize no ORM de sua preferência. A saída estruturada do Gemini é limpa o suficiente para ir direto para a maioria das ferramentas downstream.
Passo a Passo: Web Scraping com Gemini Sem Código (Usando Thunderbit)
Este é o caminho para usuários de negócio — ou desenvolvedores que preferem não escrever scripts descartáveis de scraping.
Antes de começar:
- Nível: Iniciante
- Tempo necessário: ~5 minutos para o primeiro scraping
- Você vai precisar de: navegador Chrome, (o plano gratuito funciona)
Passo 1: Instale a Extensão Thunderbit para Chrome
Acesse a e clique em "Adicionar ao Chrome". Cadastre-se com seu e-mail — todo o processo leva menos de um minuto. Compare isso com a configuração em Python de 15–30 minutos acima.
Passo 2: Abra a Página de Destino e Clique em "AI Suggest Fields"
Navegue até o site que você quer raspar — uma listagem de produtos, diretório imobiliário, base de leads, o que for. Clique no ícone do Thunderbit na barra do navegador e depois em "AI Suggest Fields."
A IA do Thunderbit lê a página e sugere automaticamente nomes de colunas e tipos de dados — coisas como "Nome do Produto", "Preço", "Avaliação", "URL da Imagem". Você pode ajustar os nomes das colunas, remover campos que não precisa ou adicionar prompts de IA personalizados por coluna (por exemplo, "classifique como Alto/Médio/Baixo" ou "traduza para inglês").
Você verá uma prévia da tabela com as colunas configuradas antes mesmo de raspar uma única linha.
Passo 3: Clique em "Scrape" e Revise os Resultados
Um clique. O Thunderbit cuida da paginação — tanto botões "Próxima" clicáveis quanto rolagem infinita — e extrai os dados para uma tabela estruturada. Você pode escolher entre:
- Cloud Scraping: mais rápido, processa até 50 páginas simultaneamente. Funciona em sites públicos.
- Browser Scraping: executa na aba do teu navegador já autenticado. Use isso para sites que exigem login (CRMs, diretórios restritos, ferramentas internas).
Os resultados aparecem em uma tabela na própria barra lateral da extensão. Revise buscando erros óbvios antes de exportar.
Passo 4: Exporte para Excel, Google Sheets, Airtable ou Notion
Clique no botão de exportação e escolha o formato. O Thunderbit exporta para Excel, Google Sheets, Airtable e Notion — grátis, sem paywall. Os campos de imagem são enviados diretamente para as bibliotecas de imagens do Notion e do Airtable, o que é uma ótima vantagem se você estiver raspando fotos de produtos ou fotos de perfil.
Sem parsing de JSON. Sem script. Os dados ficam prontos para uso imediatamente.
Scraping de Múltiplas Páginas e Subpáginas com Gemini
A maioria dos tutoriais termina discretamente depois de uma única URL. Trabalhos reais de scraping não terminam.
Raspar 500 páginas de produtos com paginação e subpáginas de detalhes é um trabalho sério — e a distância entre uma demo em URL única e essa realidade é enorme.
Como Lidar com Paginação com a Gemini API (Abordagem com Código)
Para URLs numeradas por página (o padrão mais comum), percorra as páginas até obter um resultado vazio:
1import time
2all_products = []
3for page in range(1, 101): # até 100 páginas
4 url = f"https://example.com/products?page={page}"
5 md = fetch_clean(url) # sua função de HTML→Markdown de antes
6 response = client.models.generate_content(
7 model="gemini-2.5-flash-lite", # barato para páginas de listagem
8 contents=f"Extraia nomes e URLs dos produtos:\n\n{md}",
9 config=types.GenerateContentConfig(
10 response_mime_type="application/json",
11 response_schema=list[ListingItem],
12 ),
13 )
14 items = response.parsed
15 if not items:
16 break
17 all_products.extend(items)
18 time.sleep(4) # respeite os limites do plano gratuito
Para sites com cursor ou rolagem infinita, tu precisará interceptar o endpoint XHR chamado pelo front-end (verifique a aba Network do navegador) e percorrer esse endpoint diretamente. É mais barato do que renderizar tudo de novo, e tu só envia os itens ao Gemini quando os campos precisam de limpeza via LLM.
Fique atento ao custo de tokens aqui — cada página multiplica a conta. Use Flash Lite para páginas de listagem simples e suba para Flash apenas na extração de detalhes.
Como Raspar Subpáginas para Dados Mais Ricos (Abordagem com Código)
O padrão clássico em duas etapas: a Etapa 1 raspa a listagem para coletar URLs, a Etapa 2 visita cada página de detalhe para extrair dados mais completos.
1# Etapa 1: coletar URLs com o Flash Lite, que é mais barato
2class Listing(BaseModel):
3 product_urls: list[str]
4listing = client.models.generate_content(
5 model="gemini-2.5-flash-lite",
6 contents=f"Extraia as URLs dos produtos:\n{listing_md}",
7 config=types.GenerateContentConfig(
8 response_mime_type="application/json",
9 response_schema=Listing,
10 ),
11).parsed
12# Etapa 2: extrair detalhes com o Flash
13class ProductDetail(BaseModel):
14 name: str
15 price: str
16 specs: dict[str, str]
17 reviews: list[str]
18for url in listing.product_urls:
19 md = fetch_clean(url)
20 detail = client.models.generate_content(
21 model="gemini-2.5-flash",
22 contents=f"Extraia os detalhes do produto:\n{md}",
23 config=types.GenerateContentConfig(
24 response_mime_type="application/json",
25 response_schema=ProductDetail,
26 ),
27 ).parsed
28 # salvar detalhe...
29 time.sleep(0.5)
Isso funciona, mas envolve bastante trabalho de infraestrutura: deduplicação de URLs, tratamento de erros, limitação de taxa, lógica de retry, cache do HTML bruto para que ajustes no esquema não obriguem a refazer buscas. Para 50 páginas, é administrável. Para 5.000, tu está montando uma infraestrutura inteira.
A Alternativa Sem Código: Paginação e Subpáginas Integradas do Thunderbit
O Thunderbit lida automaticamente com paginação por clique e rolagem infinita — sem precisar escrever loops. Para enriquecimento de subpáginas, o recurso "Scrape Subpages" visita cada página de detalhe vinculada à listagem e enriquece a tabela original com campos mais profundos. Um clique, não um script.
O modo de Cloud Scraping processa até 50 páginas simultaneamente, o que faz uma diferença real quando tu está raspando um catálogo de produtos ou um diretório imobiliário em escala. Para quem não quer gerenciar loops em Python e lógica de retry, essa é a escolha prática. (Para saber mais sobre , temos um passo a passo separado.)
Scraping por Captura de Tela: O Atalho Multimodal do Gemini
Aqui vai uma abordagem que a maioria dos tutoriais ignora completamente: enviar uma captura de tela de uma página da web para a API de visão do Gemini em vez do HTML bruto. Um desenvolvedor que uma única captura de tela custa apenas ~258 tokens — em comparação com milhares, mesmo para Markdown limpo. É uma diferença de custo enorme para extrações simples.
Como Usar a API de Visão do Gemini para Web Scraping
Capture uma imagem com Playwright, codifique-a e envie ao Gemini:
1from playwright.sync_api import sync_playwright
2from google import genai
3from google.genai import types
4from pydantic import BaseModel
5class Product(BaseModel):
6 title: str
7 price: str
8with sync_playwright() as p:
9 page = p.chromium.launch().new_page()
10 page.goto("https://example.com/product/widget-pro")
11 page.wait_for_load_state("networkidle")
12 png_bytes = page.screenshot(full_page=False) # apenas a área visível
13client = genai.Client()
14resp = client.models.generate_content(
15 model="gemini-2.5-flash",
16 contents=[
17 {"inline_data": {"mime_type": "image/png", "data": png_bytes}},
18 "Extraia o título e o preço do produto em JSON.",
19 ],
20 config=types.GenerateContentConfig(
21 response_mime_type="application/json",
22 response_schema=Product,
23 ),
24)
25print(resp.parsed)
De acordo com a do Google, uma imagem em que ambas as dimensões sejam ≤ 384 pixels custa 258 tokens. Imagens maiores são divididas em blocos de 768×768, a 258 tokens por bloco. Uma captura curta da área visível (258–1.600 tokens) sai muito melhor que o HTML bruto — mas uma captura de página inteira muito longa (~5.000 tokens) pode perder para Markdown limpo (~765–1.200 tokens).
Limitações do Scraping por Captura de Tela
- Menor precisão em tabelas densas: layouts com várias colunas, fontes pequenas e elementos sobrepostos geram leituras parciais — não alucinações, mas sim rótulos perdidos e cabeçalhos desalinhados.
- Não consegue seguir links: visão devolve texto, não âncoras clicáveis. Sem paginação, sem enriquecimento de subpáginas.
- Limite de resolução: textos menores que ~10 px frequentemente são lidos errado. O Google reduz a imagem para ~1.568 px no lado maior.
- Sobrecarga de captura: iniciar o Playwright + esperar networkidle leva de 2 a 5 segundos por página, o que pesa em escala.
O scraping por captura de tela funciona muito bem para páginas pesadas em JavaScript, sites com bloqueio de bot (quando requests.get() retorna 403, mas o navegador renderiza normalmente) e páginas com dados embutidos em gráficos ou imagens. Para páginas longas e densas em texto, Markdown ainda é a melhor opção.
O scraping de imagens e PDFs do Thunderbit usa uma abordagem parecida baseada em visão de IA — basta enviar uma imagem ou PDF e ele devolve uma tabela estruturada, sem precisar programar captura de tela nem lidar com base64. (Veja também: .)
Quando o Web Scraping com Gemini Falha (e o que Fazer no Lugar)
O Gemini é um mecanismo de extração, não de obtenção de conteúdo. Se você não conseguir entregar o conteúdo da página ao Gemini, ele não vai resolver. Ponto.
Existem vários cenários comuns em que toda a abordagem quebra, e a maioria dos tutoriais trata isso como detalhe. Prefiro ser direto.
| Limitação | O que acontece | Mitigação |
|---|---|---|
| Anti-bot / Cloudflare | Requisições da API são bloqueadas; requests.get() retorna 403 ou uma página de desafio | Use proxies com rotação de fingerprint TLS ou ferramentas baseadas em navegador (o modo Browser Scraping do Thunderbit usa tua sessão logada) |
| Limites da janela de tokens | Páginas grandes excedem o contexto útil (~200K–300K para extração confiável, embora 1M seja tecnicamente suportado) | Limpeza de HTML para Markdown, dividir páginas ou usar capturas de tela |
| Alucinação em conteúdo visual | O Gemini adivinha com base no alt text ou legendas em vez do conteúdo real da imagem | Valide as saídas; use explicitamente a API de visão para dados de imagem; adicione validadores de grounding |
| Limites de taxa da API | Bloqueios em escala — o plano gratuito é de ~100 RPD no Pro e ~1.000 RPD no Flash Lite | Gestão de fila, batch (50% de desconto) ou uso de ferramentas prontas |
| Extração inconsistente (modelos Lite) | Campos opcionais, timestamps e dados aninhados são ignorados ou fabricados | Atualize para Flash/Pro ou adicione restrições explícitas ao esquema |
| Sites protegidos (LinkedIn etc.) | Retorna erros ou dados vazios | Scraping baseado em navegador com sessão ativa (o Thunderbit suporta isso); respeite os Termos de Uso |
Alguns desses pontos merecem contexto extra.
Anti-bot agora é conscientemente voltado para LLMs. O Cloudflare desde julho de 2025, com 416 bilhões de requisições de bots de IA bloqueadas nos primeiros cinco meses. A Datadome adicionou detecção específica para LLMs em 2025 e viu o tráfego de bots de LLM quadruplicar. Um simples requests.get() + Gemini está praticamente morto contra sites protegidos pela Datadome. O problema é o fingerprint, não o IP — trocar IPs não adianta se o fingerprint TLS grita "Python requests".
A alucinação é sutil. LLMs treinados para ajudar tendem a preencher campos opcionais com invenções plausíveis em vez de retornar null. Já vi modelos adivinharem a marca de um produto pelo slug da URL, inferirem a moeda pelo TLD e escreverem contagens de avaliações plausíveis, porém falsas, a partir de skeleton loaders. O conjunto de mitigação inclui: esquemas Pydantic rigorosos, loops de retry com feedback de validação, validadores de grounding que checam se os valores extraídos realmente aparecem no HTML de origem e (Flash extrai, Pro valida uma amostra).
A janela de contexto de 1M não é utilizável em 1M. e de outros mostram que a qualidade do raciocínio cai bem antes do limite de tokens. Considere algo em torno de 200K–300K tokens como teto prático para extração estruturada.
Árvore de Decisão: Qual Ferramenta Você Deve Usar?
- Baixo volume + páginas simples + desenvolvedor → Gemini API gratuita + Python
- Volume médio + esquemas complexos + desenvolvedor → Gemini 2.5 Flash pago + Python + saídas estruturadas + pré-processamento
- Qualquer volume + não desenvolvedor + páginas com login ou muita paginação →
- Volume muito alto + anti-bot pesado + missão crítica → infraestrutura de scraping gerenciada (serviços de proxy) + Gemini como camada de extração
Web Scraping com Gemini: Dicas para Economizar Tempo e Dinheiro
Se tu estiver escrevendo em Python ou clicando em botões, estas dicas vão poupar bastante dor de cabeça.
- Sempre converta HTML para Markdown antes de enviar ao Gemini. Uma é comum; reduzir 95% também é possível se tu fizer um pré-corte com BeautifulSoup.
- Use apenas
google-genai. Não use o pacote depreciadogoogle-generativeai— ele já está em fim de vida. - Comece no Flash Lite apenas para esquemas planos. Suba para Flash no momento em que aparecer aninhamento ou campos opcionais.
- Evite
Field(default=...)nos esquemas Pydantic que você envia ao Gemini. Usesku: str | None = Noneno nível do tipo. - Pydantic +
response_schemasão essenciais — isso funciona tanto como contrato quanto como proteção contra alucinações. - Use a para trabalhos com mais de 1.000 páginas — 50% de desconto e sem consumo do RPM em tempo real.
- Valide manualmente uma amostra aleatória de 10 a 50 linhas antes de escalar um novo extractor. Desvio de precisão é invisível até tu olhar.
- Salve o HTML bruto em disco — ajustes no esquema não deveriam exigir que você refaça as buscas.
- Registre a URL de origem em cada linha para poder recrawlear páginas individuais sem rodar tudo de novo.
- Para usuários sem código: use prompts de IA personalizados por coluna no Thunderbit para levar o prompt engineering para a camada da planilha — traduzir, categorizar e resumir no nível da coluna.
E mais um: não leve o plano gratuito para produção. Os limites foram reduzidos entre 50% e 80% em dezembro de 2025 e podem cair de novo sem aviso.
Encerrando
A distância entre uma demo do Gemini em uma única URL e um pipeline de produção é maior do que a maioria dos tutoriais deixa parecer.
O caminho Python + Gemini API dá aos desenvolvedores controle total sobre seleção de modelo, pré-processamento, paginação e desenho de esquema. O caminho sem código — com ferramentas como — oferece aos usuários de negócio a mesma extração estruturada de dados sem tocar em um terminal.
O que eu levaria daqui é o seguinte:
- A escolha do modelo importa. Flash Lite para volume, Flash para equilíbrio, Pro para complexidade. Não escolha automaticamente a opção mais barata e depois se pergunte por que os dados ficaram errados.
- Scraping de múltiplas páginas e subpáginas é onde os tutoriais falham — e onde o trabalho real acontece. Os dois caminhos cobertos aqui resolvem essa lacuna.
- Limitações honestas economizam tempo. Se um site bloqueia requisições da API, nenhum nível de prompt engineering vai resolver. Escolha a ferramenta certa para o trabalho, não a mais sofisticada.
- Converter HTML para Markdown é a otimização com maior impacto — corta custos em mais de 75% e reduz alucinações.
Se quiser testar o caminho sem código, o permite raspar algumas páginas e ver o resultado na prática. Se você prefere programar, o plano gratuito da API do Gemini já é suficiente para prototipar um pipeline em uma tarde. De qualquer forma, você terá dados estruturados muito mais rápido do que o copy-paste jamais permitiria. Para saber mais sobre ou , cobrimos esses temas em profundidade no nosso blog.
FAQs
Quanto custa usar o Gemini para web scraping?
A Gemini API tem um plano gratuito com cerca de 100 requisições/dia no Pro, 500/dia no Flash e 1.000/dia no Flash Lite (no início de 2026 — esses limites foram reduzidos em dezembro de 2025). Na camada paga, raspar 10.000 páginas de produto custa aproximadamente US$ 1,50 com Flash Lite, US$ 6 com Flash ou US$ 25 com Pro — assumindo que você converta HTML para Markdown antes. Sem pré-processamento, os custos sobem de 4 a 5 vezes. A Batch API oferece 50% de desconto para tarefas que não precisam de tempo real.
O Gemini consegue raspar sites que exigem login?
A API do Gemini sozinha não consegue entrar em sites — ela apenas processa o conteúdo que você enviar. Você precisa buscar o HTML por conta própria usando tua própria sessão autenticada (por exemplo, com um navegador headless e cookies salvos). O modo Browser Scraping do Thunderbit faz isso de forma nativa: ele roda na tua aba do Chrome já logada, então qualquer site que você consegue ver no navegador, o Thunderbit consegue raspar.
Web scraping com Gemini é legal?
A legalidade depende dos termos de uso do site, do tipo de dado e da tua jurisdição. Nos EUA, após hiQ v. LinkedIn e Meta v. Bright Data, raspar dados publicamente acessíveis sem fazer login geralmente é considerado permitido — mas cada caso depende de fatos específicos. Raspar atrás de login traz mais risco jurídico. Dados pessoais de residentes da UE continuam sujeitos ao GDPR, independentemente de o site ser público. Sempre respeite robots.txt e os termos de uso e evite raspar dados pessoais sem base legal.
Posso usar o Gemini para raspar sites dinâmicos e pesados em JavaScript?
Sim, mas você precisa renderizar o JavaScript primeiro — seja com um navegador headless (Playwright, Puppeteer) ou interceptando diretamente os endpoints da API do site. Depois de obter o HTML renderizado, limpe-o e envie ao Gemini normalmente. Como alternativa, o scraping por captura de tela com a API de visão do Gemini ignora a renderização JS por completo — se o navegador consegue renderizar, o Gemini consegue ver. O Thunderbit lida automaticamente com páginas renderizadas em JS nos modos Cloud e Browser Scraping.
Qual é a diferença entre usar o Gemini para scraping e usar uma ferramenta dedicada como o Thunderbit?
O Gemini é um mecanismo de extração — ele interpreta o conteúdo e devolve dados estruturados. Ele não visita sites, não lida com paginação, não gerencia autenticação nem exporta para planilhas. Você ainda precisa de algo para levar o conteúdo da página ao Gemini e de algo para usar o resultado. Ferramentas dedicadas como combinam obtenção, renderização, extração com IA, paginação, enriquecimento de subpáginas e exportação em um único pacote — sem trabalho de infraestrutura.
Saiba mais