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
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
# 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 )
# 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()]
# 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.