Como extrair dados de tabelas em sites com Python e Pandas

Publicado em: 09/04/2026
Tempo de leitura: 10 minutos

Você já se deparou com um site repleto de informações úteis organizadas em tabelas, mas sentiu que copiar e colar esses dados manualmente seria um trabalho interminável? Aprender como extrair dados de tabelas em sites com Python e Pandas é uma das habilidades mais valiosas para quem deseja trabalhar com Python para análise de dados. Através de uma técnica chamada web scraping, conseguimos transformar o conteúdo visual de uma página da web em uma estrutura organizada, como uma planilha do Excel ou um arquivo CSV, em poucos segundos.

O Python se tornou a linguagem favorita para essa tarefa devido à sua simplicidade e ao ecossistema de bibliotecas poderosas. O Pandas, especificamente, possui uma função “mágica” chamada read_html() que automatiza quase todo o processo de identificação e captura de tabelas HTML. Neste guia, vamos explorar desde a configuração do ambiente até a limpeza dos dados extraídos, garantindo que você consiga automatizar essa coleta de forma eficiente e profissional.

Por que utilizar o Pandas para extrair tabelas de sites?

Existem diversas bibliotecas para realizar raspagem de dados, como o BeautifulSoup ou o Selenium. No entanto, o Pandas se destaca quando o objetivo é especificamente capturar tabelas. A principal vantagem é a velocidade de implementação. Enquanto em outras ferramentas você precisaria mapear cada linha (tr) e cada célula (td) do código HTML, o Pandas lê o código-fonte da página e retorna uma lista de DataFrames prontos para uso.

De acordo com a documentação oficial da Pandas Foundation, a função de leitura de HTML utiliza bibliotecas auxiliares como LXML para processar a estrutura do site. Isso significa que, além de extrair, você já tem em mãos as ferramentas necessárias para filtrar, ordenar e salvar os dados em diferentes formatos. É a escolha ideal para quem busca automatizar tarefas com Python sem precisar escrever centenas de linhas de código.

Configurando seu ambiente de desenvolvimento

Para começar nosso projeto, precisamos garantir que as ferramentas certas estejam instaladas no seu computador. Além do próprio Python, instalaremos o Pandas e algumas bibliotecas de suporte que ajudam o Python a “entender” o HTML dos sites. Se você ainda não tem o Python, o primeiro passo é aprender como instalar o Python corretamente em seu sistema operacional.

Instalando as bibliotecas necessárias

Abra o seu terminal ou prompt de comando e execute o seguinte comando para instalar o Pandas e os parsers (analisadores) de HTML:

Bash
pip install pandas lxml html5lib beautifulsoup4

Essas bibliotecas trabalham juntas nos bastidores. O lxml e o html5lib são responsáveis por ler o código bruto da página, enquanto o Pandas organiza tudo em tabelas legíveis. Se você estiver usando um ambiente isolado, lembre-se de ativar seu ambiente virtual venv antes da instalação para manter seu projeto organizado.

Entendendo a função read_html do Pandas

A função pd.read_html() é o coração deste tutorial. Ela aceita uma URL, um arquivo local ou uma string contendo HTML. Ao ser executada, ela procura por todas as tags <table> presentes no conteúdo e as converte em uma lista de objetos DataFrame. Um DataFrame é basicamente a versão do Python para uma tabela de banco de dados ou planilha de Excel.

É importante notar que um site pode ter várias tabelas: menus laterais, rodapés ou a tabela de dados principal que você realmente deseja. Por isso, a função sempre retorna uma lista, mesmo que encontre apenas uma única tabela na página. Você precisará acessar os itens dessa lista usando índices, como dados[0] para a primeira tabela encontrada.

Como extrair dados de tabelas em sites com Python e Pandas na prática

Agora que entendemos a teoria, vamos colocar a mão na massa. Imagine que queremos extrair a tabela de cotação de moedas de um site de notícias financeiras ou dados demográficos da Wikipédia. O processo segue um fluxo lógico: importar a biblioteca, definir a URL e capturar os dados.

Acessando a página e capturando a lista de tabelas

Nesta primeira etapa, vamos simplesmente carregar todos os dados estruturados que o Pandas conseguir encontrar no endereço fornecido. Veja como o código é curto e direto:

Python
import pandas as pd

# Definimos a URL do site desejado
url_site = "https://pt.wikipedia.org/wiki/Lista_de_unidades_federativas_do_Brasil_por_populacao"

# O Pandas lê todas as tabelas da página
lista_tabelas = pd.read_html(url_site)

# Verificamos quantas tabelas foram encontradas
print(f"Total de tabelas encontradas: {len(lista_tabelas)}")

Neste ponto, o Python já fez a parte pesada. Ele “limpou” as tags HTML e restou apenas o texto organizado. É muito mais simples do que usar a biblioteca requests sozinha para depois tratar o texto manualmente.

Identificando a tabela correta para análise

Como o site pode conter muitas tabelas, precisamos visualizar o conteúdo de cada uma para encontrar a que nos interessa. Geralmente, fazemos isso exibindo as primeiras linhas de cada item da lista gerada.

Python
# Visualizando a primeira tabela encontrada
df_populacao = lista_tabelas[0]
print(df_populacao.head())

Se a primeira tabela não for a correta, você pode testar lista_tabelas[1], lista_tabelas[2] e assim por diante. Para listas muito longas, você pode usar um loop for em Python para imprimir o cabeçalho de cada uma delas e identificar visualmente qual é a tabela de dados real.

Limpando e tratando os dados extraídos

Dados extraídos da web raramente vêm perfeitos. Eles podem conter caracteres especiais, valores nulos ou nomes de colunas confusos. Após descobrir como extrair dados de tabelas em sites com Python e Pandas, o próximo passo crucial é o tratamento desses dados para que fiquem prontos para uso em relatórios ou gráficos.

Removendo colunas desnecessárias e tratando valores

Muitas vezes, as tabelas da Wikipédia, por exemplo, possuem colunas de “posição” ou “referências” que não servem para nossa análise. Podemos removê-las facilmente usando o método drop do Pandas. Também é comum que números venham com pontos e vírgulas em formatos que o Python não reconhece como cálculos matemáticos imediatamente.

Python
# Selecionando apenas as colunas que importam
df_final = df_populacao[['Unidade federativa', 'População', '% da pop. total']]

# Renomeando colunas para facilitar o acesso
df_final.columns = ['Estado', 'Populacao', 'Percentual']

# Exibindo o resultado limpo
print(df_final.head())

Caso você encontre erros durante esse processo, como nomes de colunas inexistentes, fique atento para não cometer um KeyError, verificando sempre se o nome digitado corresponde exatamente ao que está no DataFrame.

Lidando com bloqueios e sites dinâmicos

Nem todos os sites permitem que scripts acessem seus dados facilmente. Alguns sites podem retornar um erro de “403 Forbidden”. Isso acontece porque o servidor identifica que não é um navegador humano acessando a página. Para contornar isso, precisamos definir um “User-Agent”, que simula o acesso por um navegador como Chrome ou Firefox.

Para casos mais complexos, onde a tabela só aparece após clicar em um botão ou fazer login, apenas o Pandas não será suficiente. Nesses cenários, você precisaria de ferramentas que controlam o navegador, como o Selenium, para renderizar a página antes de passar o HTML para o Pandas.

Python
import requests

# Definindo um cabeçalho para parecer um navegador real
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
requisicao = requests.get(url_site, headers=headers)

# Passando o conteúdo da requisição para o Pandas
tabelas = pd.read_html(requisicao.text)

Exportando os dados para Excel e CSV

Depois de todo o trabalho de extração e limpeza, você provavelmente vai querer salvar esses dados. O Pandas torna isso extremamente simples. Você pode transformar seu DataFrame em um arquivo de planilha em uma única linha de código. Isso é fundamental para criar relatórios automáticos que podem ser lidos por colegas que não programam.

Python
# Salvando em formato CSV
df_final.to_csv("populacao_brasil.csv", index=False, encoding='utf-8')

# Salvando em formato Excel
df_final.to_excel("dados_extraidos.xlsx", index=False)

A manipulação de arquivos é uma parte essencial do ecossistema Python. Se você deseja aprofundar seus conhecimentos em como lidar com planilhas programaticamente, vale a pena ler este guia sobre Python e Excel para dominar a edição de arquivos .xlsx.

Código Completo do Projeto

Abaixo, apresentamos o código unificado que realiza a extração, tratamento e exportação dos dados. Este script captura a lista de estados brasileiros por população diretamente da Wikipédia e salva em um arquivo CSV organizado.

Python
import pandas as pd
import requests

def extrair_dados_populacao():
    # 1. Configurações Iniciais
    url = "https://pt.wikipedia.org/wiki/Lista_de_unidades_federativas_do_Brasil_por_populacao"
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
    
    try:
        # 2. Fazendo a requisição e lendo o HTML
        response = requests.get(url, headers=header)
        tabelas = pd.read_html(response.text)
        
        # 3. Selecionando a tabela principal (geralmente a primeira com dados)
        df = tabelas[0]
        
        # 4. Limpeza de Dados
        # Selecionamos apenas as colunas de Interesse (Estado e População)
        # Nota: Os nomes das colunas podem variar dependendo do site
        df_limpo = df.iloc[:, [1, 2]].copy() 
        df_limpo.columns = ['Estado', 'Populacao']
        
        # Removendo caracteres não numéricos da coluna Populacao para converter em número
        df_limpo['Populacao'] = df_limpo['Populacao'].str.replace(r'\W', '', regex=True)
        
        # 5. Exportando para CSV
        df_limpo.to_csv("populacao_estados_brasil.csv", index=False)
        
        print("Extração concluída com sucesso! Arquivo 'populacao_estados_brasil.csv' gerado.")
        print(df_limpo.head())
        
    except Exception as e:
        print(f"Ocorreu um erro durante a extração: {e}")

if __name__ == "__main__":
    extrair_dados_populacao()

Dominar a extração de dados é o primeiro passo para se tornar um analista de dados ou desenvolvedor focado em automação. Com o Pandas, o que antes levava horas de trabalho braçal agora pode ser feito com scripts confiáveis e reutilizáveis. Continue praticando com diferentes sites e explore as vastas possibilidades que o processamento de dados com Python oferece.

Perguntas Frequentes

O Pandas consegue ler tabelas de qualquer site?

O Pandas consegue ler tabelas que estejam dentro das tags HTML <table>. Ele não funciona para tabelas construídas inteiramente com <div> ou elementos canvas sem o uso de outras bibliotecas.

Por que recebo erro de “ImportError: lxml not found”?

Este erro ocorre porque o Pandas precisa do motor LXML para processar o HTML. Basta rodar o comando pip install lxml no seu terminal para resolver.

Como extrair apenas uma tabela específica se o site tiver dez?

Você pode usar o parâmetro match na função: pd.read_html(url, match="Texto da Tabela"). O Pandas buscará apenas tabelas que contenham aquele texto específico.

O Pandas funciona com sites que exigem login?

Diretamente, não. Para sites com login, você deve usar a biblioteca requests para realizar a autenticação primeiro ou usar o Selenium para navegar até a página logada.

Como converter os números da tabela para o formato matemático?

Muitas vezes os números vêm como strings. Use df['coluna'].str.replace('.', '').astype(int) para remover separadores de milhar e converter para inteiro.

Posso extrair tabelas de arquivos HTML salvos no meu computador?

Sim! Em vez de passar uma URL, você pode passar o caminho do arquivo local: pd.read_html("caminho/do/seu/arquivo.html").

O read_html é melhor que o BeautifulSoup?

Para tabelas simples, o read_html é muito mais rápido e fácil. O BeautifulSoup é melhor quando você precisa extrair outros elementos além de tabelas, como links, imagens ou textos soltos.

Depende dos termos de uso do site e da finalidade. Sempre verifique o arquivo /robots.txt do domínio e evite fazer muitas requisições por segundo para não sobrecarregar o servidor alheio.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Projetos
    Foto do Leandro Hirt

    Como converter áudio em texto com Python de forma gratuita

    Transformar arquivos de áudio em texto é uma das tarefas mais úteis e requisitadas na era da inteligência artificial e

    Ler mais

    Tempo de leitura: 10 minutos
    08/04/2026
    Projetos
    Foto do Leandro Hirt

    Como criar um sistema de login simples com Python e TXT

    Aprender a manipular informações externas é um dos grandes marcos na jornada de qualquer programador. Se você está dando seus

    Ler mais

    Tempo de leitura: 10 minutos
    07/04/2026
    Projetos
    Foto do Leandro Hirt

    Como gerar calendário mensal em Python em 2 minutos

    Você sabia que criar um calendário completo e formatado pode ser feito em pouquíssimas linhas de código? Muitas vezes, ao

    Ler mais

    Tempo de leitura: 9 minutos
    03/04/2026
    Projetos
    Foto do Leandro Hirt

    Como criar um conversor de moedas em Python passo a passo

    Criar um conversor de moedas em Python é um dos projetos mais gratificantes para quem está começando no mundo da

    Ler mais

    Tempo de leitura: 9 minutos
    31/03/2026
    Projetos
    Foto do Leandro Hirt

    Como criar um gerenciador de senhas simples com Python

    A segurança digital tornou-se uma prioridade no cotidiano de qualquer pessoa que navega na internet. Com dezenas de contas e

    Ler mais

    Tempo de leitura: 12 minutos
    01/03/2026
    Projetos
    Foto do Leandro Hirt

    Como gerar QR Code com Python em poucos minutos

    Gerar um código de resposta rápida, o famoso QR Code, tornou-se uma habilidade essencial para desenvolvedores que buscam facilitar a

    Ler mais

    Tempo de leitura: 12 minutos
    26/02/2026