covid19-br icon indicating copy to clipboard operation
covid19-br copied to clipboard

[Feat] MA spider

Open dehatanes opened this issue 2 years ago • 2 comments

Implementando spider para o estado do Maranhão.

Fontes usadas:

  • Boletins em pdf de https://www.saude.ma.gov.br/boletins-covid-19/
  • CSVs em https://www.saude.ma.gov.br/boletins-covid-19/

Esse spider:

  • Faz o parse do boletim oficial pegando ✅ total oficial (pdf e as vezes no csv) ✅ dados dos municípios (nos csv's) ❌ dados importados (não são disponibilizados em nenhuma das fontes)

Débito:

  • Em alguns csv's (como https://www.saude.ma.gov.br/wp-content/uploads/2022/03/Dados-Gerais-0603.csv) rola um erro ao importá-lo para a rows. Não parece ser muito treta de resolver (segundo essa thread no stackoverflow), mas como não encontrei um jeito de usar esse modo na rows deixei um todo no código para fazer isso depois ao invés de dar uma volta para implementar uma forma alternativa de abrir esses csv's (sendo que isso poderia já estar implementado na rows e eu que mosquei kkk) 😄 (inclusive, se isso já estiver implementado na rows e eu que viajei me avisa que já mudo aqui ⭐ ) image

  • Queria saber sua opinião sobre criar testes para a parte de extração do total oficial do pdf. Como era uma coisa muito pequena eu não achei necessário criar um extractor para isso (e aí testar o extractor como fizemos nos outros estados). Mas se quiser posso criar o extractor para essa parte ser mais facilmente testável.

dehatanes avatar Mar 12 '22 23:03 dehatanes

Esse CSV de exemplo foi criado de maneira bem estranha! Descobri que uma das questões dele é o encoding e também não podemos começar a ler da primeira linha (o cabeçalho mesmo vem depois). Talvez o ideal seja não ler com a rows -- fiz o código abaixo para ler esse exemplo, mas não sei se funciona nos outros CSVs:

filename = "Downloads/Dados-Gerais-0603.csv"
with open(filename, encoding="mac_iceland") as fobj:
    reader = csv.reader(fobj, delimiter=";", lineterminator="\n")
    header = None  # Wait until find the header
    for line in reader:
        # Consider only non-empty lines and first 3 columns
        line = [cell.strip() for cell in line[:3]]
        if not any(line):
            continue
        elif not header:
            if line[0] == "MUNICÍPIOS":
                header = line
            continue
        print(dict(zip(header, line)))

turicas avatar Mar 13 '22 23:03 turicas

Acho que por enquanto não precisamos dos testes para os totais.

turicas avatar Mar 13 '22 23:03 turicas