Extraindo Tabelas Financeiras: Ações, ETFs e Dados de Mercado

python dev.to

Sites financeiros são minas de ouro de dados tabulares. Preços de ações, holdings de ETFs, índices de mercado, relatórios de resultados — tudo em tabelas HTML, esperando para ser analisado.

Mas obter esses dados em um formato utilizável nem sempre é simples.

Este guia cobre os desafios comuns com tabelas financeiras e soluções práticas para extraí-las de forma limpa.

Por Que Tabelas Financeiras São Complicadas

Dados financeiros têm peculiaridades que quebram métodos de extração ingênuos.

Formatos Numéricos Mistos

Sites americanos mostram 1,234.56. Sites brasileiros e europeus mostram 1.234,56. Alguns portais financeiros misturam ambos dependendo da fonte de dados.

Copiar e colar no Excel frequentemente distorce esses valores. Um milhar vira um decimal. Uma data vira um número. Caos.

Atualizações em Tempo Real

Muitas tabelas financeiras são atualizadas dinamicamente. O DOM muda após o carregamento da página. Se você faz scraping cedo demais, obtém dados desatualizados ou células vazias.

Estruturas Aninhadas

Tabelas de holdings frequentemente têm linhas expansíveis. Os top holdings de um fundo podem mostrar 10 linhas, com um botão "Mostrar todos os 50" escondendo o resto. Os dados ocultos existem na página mas não são visíveis.

Símbolos de Porcentagem e Moeda

+2,34% e R$ 1.234 parecem normais para humanos. Para uma planilha, são strings de texto que não ordenam nem calculam corretamente.

Fontes Comuns de Dados Financeiros

Yahoo Finance

Cotações de ações, dados históricos, holdings de portfólio. Tabelas são relativamente limpas mas atualizam dinamicamente.

Dica: Espere a página carregar completamente antes de extrair. O render inicial frequentemente mostra placeholders de carregamento.

Google Finance

Poucas tabelas, principalmente cards e gráficos. Menos útil para extração em massa.

Morningstar

Holdings de fundos, dados de performance, breakdown por setor. Tabelas são bem estruturadas mas frequentemente paginadas.

Dica: Procure por "Mostrar Todos" ou controles de paginação. A primeira página pode mostrar apenas os top 10 holdings.

SEC EDGAR / CVM

Arquivos contêm tabelas, mas estão embutidos em documentos complexos. Relatórios trimestrais e anuais têm demonstrações financeiras como tabelas HTML.

Dica: As tabelas estão lá, mas cercadas por texto legal. Identifique a tabela específica que você precisa antes de extrair.

Investing.com, InfoMoney, Status Invest

Focados em notícias mas incluem tabelas de dados para cotações, resultados e calendários econômicos.

Estratégias de Extração

Estratégia 1: Exportação Direta

A abordagem mais simples — se você só precisa dos dados uma vez.

Ferramentas como o HTML Table Exporter detectam tabelas na página e exportam diretamente para CSV ou Excel. Sem código necessário.

Para dados financeiros especificamente:

  • Use presets de limpeza que normalizam formatos numéricos
  • Exporte para CSV se vai processar depois; Excel se é o destino final
  • Verifique que o conteúdo dinâmico carregou antes de exportar

Estratégia 2: Python + Pandas

Para extração recorrente ou integração em pipelines.

import pandas as pd

# Extração básica
tables = pd.read_html('https://example.com/dados-acoes')
df = tables[0]  # Primeira tabela da página

# Com especificação de cabeçalho
df = pd.read_html(url, header=0)[0]

# Tratando encoding
df = pd.read_html(url, encoding='utf-8')[0]
Enter fullscreen mode Exit fullscreen mode

Limitações: read_html não executa JavaScript. Tabelas dinâmicas não carregam.

Estratégia 3: Selenium para Conteúdo Dinâmico

Quando tabelas carregam via JavaScript:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

driver = webdriver.Chrome()
driver.get('https://example.com/dados-acoes')

# Esperar tabela carregar
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "table"))
)

# Extrair
html = driver.page_source
tables = pd.read_html(html)
Enter fullscreen mode Exit fullscreen mode

Trade-off: Mais configuração, mas lida com conteúdo renderizado por JavaScript.

Limpando Dados Financeiros

Exportações brutas geralmente precisam de limpeza.

Removendo Símbolos de Moeda

df['Preco'] = df['Preco'].replace('[R\$,]', '', regex=True).astype(float)
Enter fullscreen mode Exit fullscreen mode

Tratando Porcentagens

df['Variacao'] = df['Variacao'].str.rstrip('%').astype(float) / 100
Enter fullscreen mode Exit fullscreen mode

Normalizando Formatos Numéricos

Para formato brasileiro (1.234,56 → 1234.56):

df['Valor'] = df['Valor'].str.replace('.', '', regex=False)
df['Valor'] = df['Valor'].str.replace(',', '.', regex=False).astype(float)
Enter fullscreen mode Exit fullscreen mode

Parseando Datas

Sites financeiros usam formatos de data inconsistentes.

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

Exemplo Prático: Holdings de ETF

Digamos que você quer os holdings de um fundo para análise.

O jeito manual:

  1. Visitar a página do fundo
  2. Encontrar a tabela de holdings
  3. Copiar e colar no Excel
  4. Gastar 20 minutos corrigindo formatação

O jeito eficiente:

  1. Navegar até a tabela de holdings
  2. Exportar diretamente para Excel com normalização de números
  3. Pronto

A diferença se acumula. Se você acompanha múltiplos fundos mensalmente, automação economiza horas.

Casos Extremos para Ficar Atento

Tabelas Divididas em Abas

Alguns sites mostram diferentes dados (Holdings, Performance, Risco) em abas que carregam tabelas diferentes. Cada aba é uma extração separada.

Notas de Rodapé e Anotações

Tabelas financeiras adoram asteriscos e marcadores. 1.234* pode significar "estimado" mas quebra o parsing numérico.

Solução: Remover sufixos não-numéricos antes da conversão.

Linhas de Cabeçalho Repetidas

Tabelas longas às vezes repetem cabeçalhos no meio da tabela para facilitar a leitura. Sua extração pode incluir linhas de cabeçalho duplicadas como dados.

Solução: Filtrar linhas onde todos os valores correspondem ao cabeçalho.

Quando Automatizar vs. Quando Exportar Manualmente

Exportação manual funciona quando:

  • Análise pontual
  • Cronograma irregular
  • Tabelas diferentes a cada vez

Automação funciona quando:

  • Coletas recorrentes diárias/semanais
  • Mesmas tabelas, mesma estrutura
  • Integração em pipelines maiores

Para a maioria dos analistas fazendo pesquisa ocasional, exportação manual com uma boa ferramenta é mais rápida do que construir e manter scripts. Para um guia completo sobre exportação de dados de plataformas empresariais, confira nosso artigo sobre como exportar dados de CRM para Excel.

Resumo

Tabelas financeiras são valiosas mas bagunçadas. Os principais desafios são formatos numéricos, carregamento dinâmico e estrutura inconsistente.

Para extrações rápidas, ferramentas baseadas em navegador resolvem a maioria dos casos. Para pipelines, Python com esperas adequadas e limpeza resolve o resto.

O objetivo não é automação perfeita — é obter dados limpos com o mínimo de atrito.


Precisa exportar tabelas financeiras rapidamente? Saiba mais em gauchogrid.com/pt-br/html-table-exporter ou experimente o HTML Table Exporter grátis na Chrome Web Store.

Source: dev.to

arrow_back Back to Tutorials