DEV Community

Cover image for Do Navegador ao Banco de Dados: O Caminho Mais Curto para Tabelas Web
circobit
circobit

Posted on

Do Navegador ao Banco de Dados: O Caminho Mais Curto para Tabelas Web

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:

  1. Extrair — Tirar a tabela da página web
  2. Limpar — Corrigir formatação, tipos e estrutura
  3. 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
Enter fullscreen mode Exit fullscreen mode

Ou com cabeçalhos:

sqlite3 mydb.db <<EOF
.mode csv
.headers on
.import data.csv tablename
EOF
Enter fullscreen mode Exit fullscreen mode

PostgreSQL:

COPY tablename FROM '/path/to/data.csv' 
WITH (FORMAT csv, HEADER true);
Enter fullscreen mode Exit fullscreen mode

Ou usando psql:

\copy tablename FROM 'data.csv' WITH (FORMAT csv, HEADER true);
Enter fullscreen mode Exit fullscreen mode

MySQL:

LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

Carregar

Basta executar o arquivo SQL:

# SQLite
sqlite3 mydb.db < data.sql

# PostgreSQL
psql -d mydb -f data.sql

# MySQL
mysql mydb < data.sql
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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()
          })
Enter fullscreen mode Exit fullscreen mode

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';
Enter fullscreen mode Exit fullscreen mode

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;"
Enter fullscreen mode Exit fullscreen mode

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()
Enter fullscreen mode Exit fullscreen mode

Ou em SQL após a importação:

ALTER TABLE mytable RENAME COLUMN "Total de Vendas" TO total_de_vendas;
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Representações de Nulo

Tabelas web mostram campos vazios, "N/A", "—", "-" para dados ausentes.

df = df.replace(['N/A', '', '-', ''], pd.NA)
Enter fullscreen mode Exit fullscreen mode

Ou no DuckDB:

SELECT NULLIF(column, 'N/A') AS column FROM 'data.csv';
Enter fullscreen mode Exit fullscreen mode

Datas em Vários Formatos

df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=True)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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:

  1. Exporte para CSV com limpeza de números/datas
  2. Carregue com a importação nativa de CSV do seu banco
  3. 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)