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 índice 0).

  • 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

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server