Coletando dados de demonstrativos financeiros com o Python

No post de hoje iremos mostrar como extrair dados de demonstrativos financeiros disponibilizados pela B3 utilizando o Python.

É possível obter os dados de demonstrativos financeiros através de duas fontes distintas, por meio dos bancos de dados da CVM e por meio da página do site da B3. A diferença entre as duas está no fato que por meio da B3 é possível obter os dados atualizados em menor atualização de tempo, portanto, essa é a vantagem que a biblioteca brfinance, criado por  traz. Será por meio dela que iremos importar os dados de demonstrativos financeiros.

O segredo da biblioteca está em "conectar" com o objeto CVMAsyncBackend, e após declará-lo em uma variável, utiliza-lo em conjunto com seus métodos para obter os dados de acordos com os inputs inserido. Vejamos, de acordo com o tutorial proposto pelo autor,  por etapas como funciona.

Primeiro importamos as bibliotecas.


from brfinance import CVMAsyncBackend
import pandas as pd
from datetime import datetime, date
A partir do objeto CVMAsyncBackend() é possível utilizar os métodos para capturar os dados das empresas.
Definimos a variável com o nome de cvm_httpclient. Em seguida, usamos o método get_cvm_codes para obter os códigos CVM das empresas. Com o método get_consulta_externa_cvm_categories é obtido as categorias dos documentos que podem ser obtidos.

cvm_httpclient = CVMAsyncBackend()
# Dicionário dos códigos CVM de todas as empresas
cvm_codes = cvm_httpclient.get_cvm_codes()
# Dicionário de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)
categories = cvm_httpclient.get_consulta_externa_cvm_categories()


Ao obter os códigos das empresas e das categorias desejadas, é necessário somente definir os inputs do método

get_consulta_externa_cvm_results para obter os dados da(s) empresa(s) desejada(s).


# Realizando busca por Empresa
start_date = date(2020, 1, 1) # data de início
end_dt = date.today() # data de fim
cvm_codes_list = ['21610'] # Código CVM da B3
category = ["EST_4", "EST_3"] # Códigos de categoria para DFP e ITR.
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas




# Busca
search_result = cvm_httpclient.get_consulta_externa_cvm_results(
    cod_cvm=cvm_codes_list,
    start_date=start_date,
    end_date=end_dt,
    last_ref_date=last_ref_date,
    category=category
    )



Em search_result, obtém-se os resultados da busca dos balanços e demonstrativos disponíveis na B3, de acordo com o que foi definido na consulta. Os passos seguintes referem-se apenas em filtrar o data frame para obter a DFP e ITR.


# Filtrar dataframe de busca para DFP e ITR apenas
search_result = search_result[
    (search_result['categoria']=="DFP - Demonstrações Financeiras Padronizadas") |
    (search_result['categoria']=="ITR - Informações Trimestrais")]
search_result = search_result[pd.to_numeric(search_result['numero_seq_documento'], errors='coerce').notnull()]


Depois disso, é só acessar em cada linha o documento produzido pela consulta.



# Obter demonstrativos
for index, row in search_result.iterrows():
    empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
    print("*" * 20, empresa, "*" * 20)
    reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)

    for report in reports:
        reports[report]["cod_cvm"] = row["cod_cvm"]
        print(reports[report].head())


______________________________________

Quer saber mais?

Veja nosso curso de Python para Investimentos.

_______________________________________________________________

Referências

Oliveira, Eudes. brfinance - Acesse facilmente dados financeiros de empresas brasileiras na B3/CVM. Acesso em: https://github.com/eudesrodrigo/brFinance.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Estamos em pleno emprego no mercado de trabalho?

Este artigo investiga se o mercado de trabalho brasileiro atingiu o nível de pleno emprego, utilizando uma estimativa da NAIRU (Non-Accelerating Inflation Rate of Unemployment) baseada na metodologia de Ball e Mankiw (1997). Através de uma modelagem em Python que unifica dados históricos da PME e PNAD Contínua com as expectativas do Boletim Focus, comparamos a taxa de desocupação corrente com a taxa neutra estrutural. A análise visual e quantitativa sugere o fechamento do hiato de desemprego, sinalizando potenciais pressões inflacionárias. O texto detalha o tratamento de dados, a aplicação do Filtro Hodrick-Prescott e discute as vantagens e limitações da metodologia econométrica adotada.

Como se comportou a Taxa de Participação no Brasil nos últimos anos? Uma Análise com a Linguagem R

O objetivo deste estudo é analisar a evolução da Taxa de Participação no Brasil, contrastando-a com a Taxa de Desocupação e decompondo suas variações para entender os vetores (populacionais e de força de trabalho) que influenciam o comportamento atual do mercado de trabalho. Para isso, utilizamos a linguagem R em todo o processo, desde a coleta e o tratamento das informações até a visualização dos resultados, empregando os principais pacotes disponíveis no ecossistema da linguagem.

Como se comportou a inflação de serviços no Brasil nos últimos anos?

Uma análise econométrica da inflação de serviços no Brasil comparando os cenários de 2014 e 2025. Utilizando uma Curva de Phillips própria e estimativas da NAIRU via filtro HP, investigamos se o atual desemprego nas mínimas históricas repete os riscos do passado. Entenda como as expectativas de inflação e o hiato do desemprego explicam o comportamento mais benigno dos preços atuais em relação à década anterior.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.