cuducos/calculadora-do-cidadao

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.