Você encontrou dados em um site. Você precisa deles no seu banco de dados.
Qual é o caminho mais rápido do ponto A ao ponto B?
Este guia cobre os fluxos de trabalho práticos para levar tabelas HTML para SQLite, PostgreSQL, MySQL e outros bancos de dados — com o mínimo de fricção.
O Fluxo Geral
Todo pipeline navegador-para-banco-de-dados tem os mesmos passos:
- Extrair — Tirar a tabela da página web
- Limpar — Corrigir formatação, tipos e estrutura
- Carregar — Inserir no banco de dados
A questão é onde fazer cada passo e com quais ferramentas.
Caminho 1: CSV como Intermediário
A abordagem mais comum. Funciona com qualquer banco de dados.
Passo 1: Exportar para CSV
Use uma extensão de navegador como o HTML Table Exporter ou copie e cole em uma planilha e salve como CSV.
Consideração chave: Escolha do delimitador. Vírgulas funcionam, a menos que seus dados contenham vírgulas. Ponto e vírgula ou tabulações são mais seguros para dados complexos.
Passo 2: Carregar no Banco de Dados
SQLite:
sqlite3 mydb.db
.mode csv
.import data.csv tablename
Ou com cabeçalhos:
sqlite3 mydb.db <<EOF
.mode csv
.headers on
.import data.csv tablename
EOF
PostgreSQL:
COPY tablename FROM '/path/to/data.csv'
WITH (FORMAT csv, HEADER true);
Ou usando psql:
\copy tablename FROM 'data.csv' WITH (FORMAT csv, HEADER true);
MySQL:
LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Prós e Contras
✅ Compatibilidade universal
✅ Fácil de inspecionar o arquivo intermediário
✅ Possível corrigir problemas manualmente antes de carregar
❌ Passo extra
❌ Inferência de tipos é básica
Caminho 2: Direto para Instruções SQL
Exporte a tabela diretamente como instruções INSERT.
Exportar como SQL
Algumas ferramentas de exportação geram SQL diretamente. A saída fica assim:
INSERT INTO table_name (col1, col2, col3) VALUES
('valor1', 'valor2', 123),
('valor4', 'valor5', 456);
Carregar
Basta executar o arquivo SQL:
# SQLite
sqlite3 mydb.db < data.sql
# PostgreSQL
psql -d mydb -f data.sql
# MySQL
mysql mydb < data.sql
Prós e Contras
✅ Um passo da exportação ao banco
✅ SQL é portável entre bancos (na maioria dos casos)
❌ Datasets grandes = arquivos SQL enormes
❌ Precisa definir o schema da tabela antes
Caminho 3: Pipeline Python + Pandas
Máxima flexibilidade. Melhor para importações repetidas ou limpeza complexa.
Fluxo Completo
import pandas as pd
from sqlalchemy import create_engine
# Passo 1: Carregar CSV (exportado do navegador)
df = pd.read_csv('data.csv')
# Passo 2: Limpar
df.columns = df.columns.str.lower().str.replace(' ', '_') # Normalizar nomes de colunas
df['date'] = pd.to_datetime(df['date']) # Converter datas
df['amount'] = df['amount'].str.replace('[$,]', '', regex=True).astype(float) # Limpar moeda
# Passo 3: Carregar no banco de dados
engine = create_engine('sqlite:///mydb.db')
# Ou: create_engine('postgresql://user:pass@localhost/mydb')
# Ou: create_engine('mysql+pymysql://user:pass@localhost/mydb')
df.to_sql('tablename', engine, if_exists='replace', index=False)
Mapeamento de Tipos
O Pandas infere tipos, mas você pode ser explícito:
df.to_sql('tablename', engine,
if_exists='replace',
index=False,
dtype={
'id': Integer(),
'name': String(100),
'created_at': DateTime(),
'amount': Float()
})
Prós e Contras
✅ Controle total sobre limpeza e tipos
✅ Lida com transformações complexas
✅ Repetível e automatizável
❌ Requer ambiente Python
❌ Exagero para importações únicas
Caminho 4: DuckDB (O Atalho Moderno)
O DuckDB lê CSV diretamente e lida com a maioria da limpeza automaticamente.
Consulta Direta
-- Consultar CSV sem importar
SELECT * FROM 'data.csv';
-- Com inferência de tipos
SELECT * FROM read_csv_auto('data.csv');
-- Criar tabela a partir de CSV
CREATE TABLE mytable AS SELECT * FROM 'data.csv';
Do Navegador à Consulta em Segundos
# Exporte a tabela como CSV do navegador
# Depois consulte imediatamente:
duckdb -c "SELECT column1, SUM(column2) FROM 'data.csv' GROUP BY column1;"
Sem definição de schema. Sem passo de importação. Apenas consulte.
Prós e Contras
✅ Mais rápido para análises ad-hoc
✅ Excelente inferência de tipos
✅ Interface SQL
❌ Não é um banco de dados tradicional (para persistência, exporte os resultados)
Lidando com Problemas Comuns
Nomes de Colunas com Espaços
Tabelas web frequentemente têm cabeçalhos como "Total de Vendas" ou "Acumulado do Ano".
Corrigir na exportação: Algumas ferramentas normalizam cabeçalhos automaticamente.
Corrigir na importação:
df.columns = df.columns.str.replace(' ', '_').str.lower()
Ou em SQL após a importação:
ALTER TABLE mytable RENAME COLUMN "Total de Vendas" TO total_de_vendas;
Formatos Numéricos Misturados
Formato europeu/brasileiro (1.234,56) vs americano (1,234.56) quebram importações.
Corrigir antes de importar: Use uma ferramenta com presets de limpeza, ou:
# Brasileiro para padrão
df['value'] = df['value'].str.replace('.', '').str.replace(',', '.').astype(float)
Representações de Nulo
Tabelas web mostram campos vazios, "N/A", "—", "-" para dados ausentes.
df = df.replace(['N/A', '—', '-', ''], pd.NA)
Ou no DuckDB:
SELECT NULLIF(column, 'N/A') AS column FROM 'data.csv';
Datas em Vários Formatos
df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=True)
O format='mixed' lida com formatos de data inconsistentes na mesma coluna.
Escolhendo o Caminho Certo
| Cenário | Caminho Recomendado |
|---|---|
| Importação única, tabela pequena | CSV + importação direta no banco |
| Importação única, precisa de limpeza | Python + Pandas |
| Análise rápida, sem necessidade de persistência | DuckDB |
| Importações regulares da mesma fonte | Script Python (automatizar) |
| Precisa de formato SQL para compartilhar/versionar | Exportação direta para SQL |
Exemplo: Fluxo Completo
Digamos que você tem uma tabela de dados de produtos em um site.
Passo 1: Exporte com o HTML Table Exporter → CSV com números limpos
Passo 2: Validação rápida no DuckDB:
SELECT COUNT(*), COUNT(DISTINCT product_id) FROM 'products.csv';
-- Verificar duplicatas
Passo 3: Carregar no PostgreSQL:
import pandas as pd
from sqlalchemy import create_engine
df = pd.read_csv('products.csv')
engine = create_engine('postgresql://user:pass@localhost/inventory')
df.to_sql('products', engine, if_exists='replace', index=False)
Tempo total: 2 minutos.
A Meta-Lição
O caminho mais curto nem sempre é o mais direto.
Gastar 30 segundos na limpeza durante a exportação economiza 10 minutos depurando erros de importação. Usar o formato intermediário certo (CSV vs SQL vs JSON) depende do banco de dados de destino e da complexidade dos dados.
Para a maioria dos fluxos tabela web → banco de dados:
- Exporte para CSV com limpeza de números/datas
- Carregue com a importação nativa de CSV do seu banco
- Só use Python se precisar de transformações complexas
Pipelines simples são pipelines sustentáveis.
Para mais detalhes sobre exportação para diferentes formatos, veja nosso guia com as melhores extensões Chrome para exportar tabelas.
Precisa de exportações limpas e prontas para o banco de dados? Saiba mais em gauchogrid.com/pt-br/html-table-exporter ou experimente o HTML Table Exporter gratuitamente na Chrome Web Store.
Top comments (0)