brfinance's People
Forkers
eduardobsg raphaelrrcoelho joeldatabox raphaellins csdionatan rspadim zecaclasher asoliveira kcpf dsantos18 marcoacf fragalli miltondev alexandrebarb0sa peter-sen pedrohcalmeida luizpadovani luiz158 schiessl caetanok calabrez victorpriye marlonscalabrin marcogandra arioliv casadodev patrickrudgeri fredericobianco lm0007 wesleyclzns glaucocustodio edinhodiluviano smcasagr 0peters furlancad joaovbezerra1990 zehcoque thiago-simoes vinicius-ianni joao-mts fmkauer osairps fernandohmendesbrfinance's Issues
Update README.md
Atualizar o README para as informações mais recentes da lib na tabela de métodos. Os parâmetros estão desatualizados, porém no exemplo está correto.
ValueError: No tables found matching pattern '.+'
Eudes, inicialmente parabéns por disponibilizar a biblioteca.
Usando para consulta de dados do Banco Inter (CVM CODE 24406) está dando o seguinte erro:
ValueError: No tables found matching pattern '.+'
Ob: erro obtido usando o symlpe.pynb com esse CVM CODE).
Pilha completa do erro do erro:
File "./teste_backtesting.py", line 76, in
reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/backend.py", line 71, in get_report
return response_class.data()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/responses.py", line 91, in data
data[key] = self._parse_get_reports(html.text, key)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/responses.py", line 111, in _parse_get_reports
df = pd.read_html(html, header=0, decimal=',')[table_index]
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 1098, in read_html
return _parse(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 926, in _parse
raise retained
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 906, in _parse
tables = p.parse_tables()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 222, in parse_tables
tables = self._parse_tables(self._build_doc(), self.match, self.attrs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 568, in _parse_tables
raise ValueError(f"No tables found matching pattern {repr(match.pattern)}")
ValueError: No tables found matching pattern '.+'
_clean_data method from Search class in CVM module crashing when getting linkDownload and linkView
Importação da classe CVMAsyncBackend
AttributeError com o uso de função depreciada em versões mais recentes do Pandas
A partir da versão 2.0 do pacote Pandas, a função append foi removida. Essa função é utilizada no arquivo responses.py. Se o usuário utilizar uma versão do Pandas igual ou superior à 2.0, o seguinte erro acontece:
AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?
Deve-se utilizar a função concat.
Ou então referenciar uma versão específica do Pandas que ainda faça uso de append como requerimento.
Licensa
Acredito que seria produtivo especificar uma licensa (preferencialmente open-source) para o projeto.
Sugestões apache2 ou gpl-3. Mas caso queira dar uma olhada mais a fundo, esse site pode ajudar: https://choosealicense.com/
Ola, parece que estou tendo um erro de SSL quando tento usar multiprocessing, existe alguma alternativa para este caso? Obrigado
FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
Substituir por
response_df = pd.concat([response_df,search_results_df])
brFinance/brfinance/responses.py
Line 78 in 10e3f24
Sugestão de melhoria para evitar erro em `get_cadastro_instrumentos`
Olá, @eudesrodrigo!
Primeiramente obrigado pela ferramenta! Está sendo bastante útil!
Segue uma sugestão de otimização:
A o parâmetro ref_date
da função get_cadastro_instrumentos
é por default date.today()
. Porém nos finais de semana (isto é, quando ref_date.weekday() > 4
) ela dá um erro. Sugiro adicionar uma verificação:
while ref_date.weekday() > 4:
ref_date = ref_date - timedelta(days=1)
Ler resultados de anos anteriores
Oi @eudesrodrigo, primeiramente quero te agradecer por disponibilizar essa ferramenta publicamente.
Atualmente ela só retorna o ano mais recente (em vermelho na imagem) certo? Você aceitaria um PR para retornar todos os anos (em azul)?
KeyError: 'value'.... Beautifulsoup hdnNumeroSequencialDocumento = soup.find(
ERRO
KeyError Traceback (most recent call last)
Cell In[1], line 51
49 empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
50 print("" * 20, empresa, "" * 20)
---> 51 reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
53 for report in reports:
54 reports[report]["cod_cvm"] = row["cod_cvm"]
File [...brfinance/backend.py:65), in CVMAsyncBackend.get_report(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
60 def get_report(
61 self,
62 NumeroSequencialDocumento,
63 CodigoTipoInstituicao,
64 reports_list=None):
---> 65 response = self._http_client().get_reports(
66 NumeroSequencialDocumento,
67 CodigoTipoInstituicao,
68 reports_list)
69 response_class = GetReportResponse(response=response)
71 return response_class.data()
File .../brfinance/http_client.py:99, in CVMHttpClient.get_reports(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
97 soup = BeautifulSoup(response.text, features="lxml")
98 print(soup)
...
102 id='hdnCodigoTipoDocumento').attrs["value"]
103 # hdnCodigoCvm = soup.find(id='hdnCodigoCvm').attrs["value"]
104 # hdnDescricaoDocumento = soup.find(id='hdnDescricaoDocumento').attrs["value"]
KeyError: 'value'
CODIGO RODADO (EXEMPLO)
from brfinance import CVMAsyncBackend
import pandas as pd
from datetime import datetime, date
cvm_httpclient = CVMAsyncBackend()
Dict de códigos CVM para todas as empresas
cvm_codes = cvm_httpclient.get_cvm_codes()
print(cvm_codes)
Dict de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)
categories = cvm_httpclient.get_consulta_externa_cvm_categories()
print(categories)
Realizando busca por Empresa
start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] # B3
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
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()]
reports_list = [
'Balanço Patrimonial Ativo',
'Balanço Patrimonial Passivo',
'Demonstração do Resultado',
'Demonstração do Resultado Abrangente',
'Demonstração do Fluxo de Caixa',
'Demonstração das Mutações do Patrimônio Líquido',
'Demonstração de Valor Adicionado'] # Se None retorna todos os demonstrativos disponíveis.
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())
Lib\site-packages\brFinance
Olá Eudes,
Parabéns pela idéia. Tentei installar usando o pip install e ocorreu um problema na hora de executar o código. Descobri que a importação não funciona no exemplo atual porque no código chama "from brfinance import CVMAsyncBackend" e observando a pasta Lib\site-packages\brFinance vi que o nome da pasta é brFinance. Eu renomei na minha máquina a pasta para Lib\site-packages\brfinance e aí rodou o programa.
Não recebo dados da CVM no search_result em algumas tentativas.
start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] #['21610'] # B3 22470 mglu 025291 3R
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas
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
)
não recebo nenhum erro... quando dou print(search_result) recebo as categorias padrão que estão lá no responses.py
Quando rodo algumas outras vezes, recebo os dados, então acho que é algum problema da resposta da cvm.
O Eudes falou alguma coisa sobre o tema na Live no minuto 27
Valor NaN
Link para exemplos no Readme está quebrado
No README há um link para exemplos que aponta para https://github.com/eudesrodrigo/brFinance/tree/master/examples, mas esse link está quebrado
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.