Implementar SELIC
cuducos opened this issue · 3 comments
Os dados estão em um formato não muito favorável, mas pelo menos lendo só o HTML puro dá para raspar.
Dá pra fazer com a rows ;)
Não vi a estrutura do projeto, mas o código a seguir pega o valor por mês desde 2011 e converte para decimal.Decimal
:
import io
from pprint import pprint
from urllib.request import urlopen
import rows
MONTHS = "Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro".split()
class PtBrPercentField(rows.fields.PercentField):
@classmethod
def deserialize(cls, value):
value = (value or "").replace(",", ".")
return super().deserialize(value)
url = "http://receita.economia.gov.br/orientacao/tributaria/pagamentos-e-parcelamentos/taxa-de-juros-selic"
response = urlopen(url)
html = response.read()
table = rows.import_from_html(
io.BytesIO(html),
index=1,
force_types={
"field_2011": PtBrPercentField,
"field_2012": PtBrPercentField,
"field_2013": PtBrPercentField,
"field_2014": PtBrPercentField,
"field_2015": PtBrPercentField,
"field_2016": PtBrPercentField,
"field_2017": PtBrPercentField,
"field_2018": PtBrPercentField,
"field_2019": PtBrPercentField,
},
)
data = {}
for year in range(2011, 2019 + 1):
for row in table:
data[f"{year}-{MONTHS.index(row.mes_ano) + 1:02d}"] = getattr(
row, f"field_{year}"
)
pprint(data)
Obrigado pelo trabalho de integração. <3
Eu não vi em detalhes o seu código, mas queria alertar que meu código só pega a primeira tabela e seria interessante pegar outras também, com dados de décadas anteriores (seria só trocar o índice da tabela no import_from_html
).
Sim! O código que fiz tem uma abstração. Se o kwargs é um dicionário, ele chama o import_from_html
apenas uma vez; se o kwargs é uma sequência, ele chama o import_from_html
uma vez para cada dicionário da sequência… assim leio as três tabelas ; ) Mas vou ter que pensar em um solução quando tiver uma quarta tabela hehehe…isso ainda ficou hard coded.