Python: Como Extrair Tabelas HTML e Converter para CSV em 5 Linhas de Código
Python: Como Extrair Tabelas HTML e Converter Direto para CSV
Em tarefas de web scraping, extrair tabelas HTML usando seletores manuais pode ser trabalhoso. Com as bibliotecas pandas e BeautifulSoup4, é possível identificar todas as tags
<table> de uma página da web e convertê-las automaticamente em arquivos CSV formatados em poucos segundos.Instalação das Bibliotecas
Bash
pip install pandas requests lxml html5lib
1. Método Rápido com Pandas (Ideal para Páginas Estáticas)
O método
pd.read_html() faz o parsing automático do código HTML, encontra todas as tabelas presentes na página e as converte diretamente em DataFrames.Python
import pandas as pd
def baixar_tabela_html(url, indice_tabela=0, arquivo_saida="tabela_extraida.csv"):
try:
# Lê todas as tabelas HTML encontradas na URL
tabelas = pd.read_html(url)
# Seleciona a tabela desejada pelo índice (0 é a primeira tabela da página)
df = tabelas[indice_tabela]
# Exporta o DataFrame diretamente para arquivo CSV
df.to_csv(arquivo_saida, index=False, encoding="utf-8-sig")
print(f"✅ Tabela extraída com sucesso e salva em: {arquivo_saida}")
except Exception as e:
print(f"❌ Erro ao extrair tabela: {e}")
# Exemplo de uso:
url_alvo = "https://www.w3schools.com/html/html_tables.asp"
baixar_tabela_html(url_alvo, indice_tabela=0, arquivo_saida="empresas.csv")
Pontos-chave:
pd.read_html(url): Analisa a estrutura do HTML remoto e retorna uma lista com todas as tabelas encontradas.indice_tabela=0: Define qual tabela da lista será processada (a primeira tabela do documento equivale ao índice0).encoding="utf-8-sig": Garante que caracteres acentuados e símbolos do português sejam exibidos corretamente ao abrir o arquivo CSV no Microsoft Excel.index=False: Impede que o Pandas grave a coluna com os índices numéricos das linhas no arquivo final.
2. Método Customizado com Requests e BeautifulSoup (Para Requisições com Headers)
Caso o site exija cabeçalhos HTTP (como
User-Agent) para liberar o acesso ou bloquear robôs simples, combine o requests com o parsing do Pandas.Python
import requests
import pandas as pd
def extrair_tabela_com_headers(url, arquivo_saida="dados.csv"):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
# Faz a requisição simulando um navegador comum
resposta = requests.get(url, headers=headers)
if resposta.status_code == 200:
# Passa o conteúdo HTML direto para o Pandas
tabelas = pd.read_html(resposta.text)
df = tabelas[0]
df.to_csv(arquivo_saida, index=False, encoding="utf-8-sig")
print(f"📄 Tabela convertida e salva em: {arquivo_saida}")
else:
print(f"🚨 Falha na requisição. Código HTTP: {resposta.status_code}")
# Exemplo de uso:
extrair_tabela_com_headers("https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)", "gdp_paises.csv")
Pontos-chave:
headers={"User-Agent": ...}: Evita bloqueios por erros de requisição recusada (HTTP 403 Forbidden).pd.read_html(resposta.text): Faz o parsing do HTML retornado diretamente do buffer de memória da requisição.

Comentários
Postar um comentário