Você precisa de dados de um site. Escreve um scraper Python? Sobe um Playwright? Usa uma extensão de navegador? Depois de extrair dados de centenas de sites diferentes, desenvolvi um framework para escolher a ferramenta certa.
As Opções
| Abordagem | Executa em | Suporta JS | Login | Setup |
|---|---|---|---|---|
| Python + requests | Servidor | ❌ | Cookies manuais | 5 min |
| Python + BeautifulSoup | Servidor | ❌ | Cookies manuais | 5 min |
| Playwright/Puppeteer | Servidor | ✅ | Scriptável | 15 min |
| Extensão de Navegador | Navegador do usuário | ✅ | Automático | 0 min |
| Copiar e colar | Navegador do usuário | ✅ | Automático | 0 min |
Cada uma tem trade-offs. Vamos analisar.
Opção 1: Python + Requests/BeautifulSoup
Melhor para: Páginas HTML estáticas, APIs, pipelines automatizados
import requests
from bs4 import BeautifulSoup
response = requests.get("https://example.com/data")
soup = BeautifulSoup(response.text, "html.parser")
table = soup.find("table")
rows = []
for tr in table.find_all("tr"):
row = [td.get_text(strip=True) for td in tr.find_all(["td", "th"])]
rows.append(row)
Vantagens:
- Execução rápida
- Fácil de agendar (cron, Airflow)
- Sem overhead de navegador
Limitações:
- Não executa JavaScript
- Muitos sites modernos renderizam tabelas no client-side
- Autenticação requer manipulação manual de cookies
Quando falha: Tente fazer scraping de um dashboard React. O HTML que você recebe é um <div id="root"></div> vazio.
Opção 2: Navegadores Headless (Playwright/Puppeteer)
Melhor para: Páginas renderizadas por JavaScript, pipelines automatizados, sites que exigem interação
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com/dashboard');
// Esperar a tabela renderizar
await page.waitForSelector('table');
const data = await page.evaluate(() => {
const table = document.querySelector('table');
return Array.from(table.rows).map(row =>
Array.from(row.cells).map(cell => cell.textContent.trim())
);
});
console.log(data);
await browser.close();
})();
Vantagens:
- Executa JavaScript
- Pode interagir com páginas (cliques, scroll, preenchimento de formulários)
- Fluxos de autenticação scriptáveis
Limitações:
- Mais lento que HTTP direto
- Consome muitos recursos (memória, CPU)
- Tratamento de erros mais complexo
- Sites podem detectar navegadores headless
Quando falha: Muitos sites detectam Puppeteer/Playwright via propriedades do navigator, fingerprinting de WebGL ou análise comportamental. Plugins stealth ajudam, mas não são infalíveis.
Opção 3: Extensões de Navegador
Melhor para: Extração ad-hoc, sites autenticados, fluxos iniciados pelo usuário
Uma extensão de navegador roda na sessão real do navegador do usuário, com acesso total a:
- Sessões autenticadas
- Conteúdo renderizado por JavaScript
- O DOM exato que o usuário vê
Para uma comparação das melhores opções, veja As 5 Melhores Extensões Chrome para Exportar Tabelas.
// Content script em uma extensão Chrome
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.type === "EXTRACT_TABLE") {
const table = document.querySelector("table");
const data = Array.from(table.rows).map(row =>
Array.from(row.cells).map(cell => cell.textContent.trim())
);
sendResponse({ data });
}
});
Vantagens:
- Zero tratamento de autenticação — você já está logado
- Vê exatamente o que você vê (sem problemas de renderização JS)
- Funciona em qualquer site (sem detecção de bot)
- Sem infraestrutura de servidor necessária
Limitações:
- Requer acionamento manual (usuário clica)
- Não pode rodar agendado
- Limitado ao contexto do navegador
Quando falha: Você precisa extrair dados de 10.000 páginas automaticamente. Extensões são para fluxos de trabalho iniciados pelo usuário, não processamento em lote.
Framework de Decisão
Use Python + requests quando:
- ✅ A página é HTML renderizado no servidor
- ✅ Você precisa de extração automatizada/agendada
- ✅ Está construindo um pipeline de dados
- ✅ Autenticação é via API keys ou cookies simples
Use Playwright/Puppeteer quando:
- ✅ A página requer renderização JavaScript
- ✅ Você precisa de extração automatizada/agendada
- ✅ Precisa interagir (scroll, cliques, paginação)
- ✅ Consegue lidar com contra-medidas de detecção de bots
Use uma Extensão de Navegador quando:
- ✅ Você já está logado no site
- ✅ Precisa dos dados ocasionalmente (não automatizado)
- ✅ O site tem detecção de bots forte
- ✅ Quer os dados AGORA sem escrever código
Apenas copie e cole quando:
- ✅ Extração única
- ✅ Estrutura de tabela simples
- ✅ Não precisa num formato específico
Exemplos do Mundo Real
Exemplo 1: Tabelas da Wikipedia
Melhor abordagem: Extensão de navegador ou Python
A Wikipedia é HTML renderizado no servidor sem autenticação. Python funciona perfeitamente:
import pandas as pd
url = "https://pt.wikipedia.org/wiki/Lista_de_países_por_população"
tables = pd.read_html(url)
df = tables[0]
Mas tabelas da Wikipedia frequentemente têm rowspans complexos e linhas de navegação. Uma extensão dedicada lida com esses casos automaticamente.
Para um guia passo a passo, veja Scraper de Tabelas HTML: As 5 Melhores Extensões Chrome.
Exemplo 2: Dashboard Financeiro (Atrás de Login)
Melhor abordagem: Extensão de navegador
Sua corretora mostra dados da carteira após o login. Opções:
Python: Fazer engenharia reversa do fluxo de autenticação, lidar com 2FA, manter cookies de sessão. Possível mas frágil.
Playwright: Scriptar o login, lidar com prompts de 2FA, navegar até os dados. Funciona mas é complexo.
Extensão: Logar normalmente, clicar "Exportar Tabela". Pronto.
Para exportações ocasionais, a extensão ganha em tempo-até-dado.
Exemplo 3: Monitoramento Diário de Preços (1000 Páginas)
Melhor abordagem: Playwright + fila
Você precisa verificar preços em 1000 páginas de produtos diariamente. Isso requer:
// Pseudocódigo para extração em lote
const urls = loadUrlsFromDatabase();
for (const url of urls) {
const page = await browser.newPage();
await page.goto(url);
await page.waitForSelector('.price');
const price = await page.evaluate(() =>
document.querySelector('.price').textContent
);
await saveToDatabase(url, price);
await page.close();
// Rate limiting
await sleep(randomBetween(1000, 3000));
}
Extensões não podem fazer isso — elas requerem interação do usuário. Playwright é a ferramenta certa.
Exemplo 4: Exportação Pontual de Estatísticas Esportivas
Melhor abordagem: Extensão de navegador
O FBRef tem cabeçalhos complexos de dois níveis. Você precisa das estatísticas dessa temporada uma vez.
Abordagem Python: 30 minutos escrevendo um parser customizado para a estrutura de tabela deles.
Abordagem com extensão: Clicar exportar. 10 segundos.
Para extração pontual, não over-engineer.
Abordagens Híbridas
Às vezes você precisa de ambas:
-
Usar extensão para exportar cookies de autenticação
- Exportar cookies de uma sessão logada
- Importar no Python/Playwright para automação
-
Usar extensão para inspecionar estrutura, Python para escalar
- Examinar o DOM manualmente com ferramentas da extensão
- Escrever um scraper direcionado depois de entender a estrutura
-
Usar Playwright para navegação, extensão para extração
- Script navega até a página
- Chama API da extensão para parsing complexo de tabelas
Meu Stack
Para os 80% dos casos onde eu preciso de dados de tabelas web:
- Pontual, autenticado: HTML Table Exporter (extensão de navegador que eu criei)
-
Pontual, dados públicos:
pd.read_html()ou extensão - Pipeline automatizado: Playwright com parsers customizados
- API disponível: Chamadas diretas à API (sempre preferível)
A melhor ferramenta depende da extração específica. Combine a complexidade da sua solução com a complexidade do seu problema.
Qual sua abordagem preferida para extração? Saiba mais em gauchogrid.com/pt-br/html-table-exporter ou experimente a extensão gratuitamente na Chrome Web Store.
Top comments (0)