Skip to content

Commit

Permalink
Al maragogi (#1290)
Browse files Browse the repository at this point in the history
#### Layout do site publicador de diários oficiais
Marque apenas um dos itens a seguir:
- [x] O *layout* não se parece com nenhum caso [da lista de *layouts*
padrão](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/lista-sistemas-replicaveis.html)
- [ ] É um *layout* padrão e esta PR adiciona a spider base do padrão ao
projeto junto com alguns municípios que fazem parte do padrão.
- [ ] É um *layout* padrão e todos os municípios adicionados usam a
[classe de spider
base](https://github.com/okfn-brasil/querido-diario/tree/main/data_collection/gazette/spiders/base)
adequada para o padrão.

#### Código da(s) spider(s)
- [x] O(s) raspador(es) adicionado(s) tem os [atributos de classe
exigidos](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#UFMunicipioSpider).
- [x] O(s) raspador(es) adicionado(s) cria(m) objetos do tipo Gazette
coletando todos [os metadados
necessários](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#Gazette).
- [x] O atributo de classe
[start_date](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#UFMunicipioSpider.start_date)
foi preenchido com a data da edição de diário oficial mais antiga
disponível no site.
- [x] Explicitar o atributo de classe
[end_date](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#UFMunicipioSpider.end_date)
não se fez necessário.
- [x] Não utilizo `custom_settings` em meu raspador.

#### Testes
- [x] Uma coleta-teste **da última edição** foi feita. O arquivo de
`.log` deste teste está anexado na PR.
- [x] Uma coleta-teste **por intervalo arbitrário** foi feita. Os
arquivos de `.log`e `.csv` deste teste estão anexados na PR.
- [x] Uma coleta-teste **completa** foi feita. Os arquivos de `.log` e
`.csv` deste teste estão anexados na PR.

#### Verificações
- [x] Eu experimentei abrir alguns arquivos de diários oficiais
coletados pelo meu raspador e verifiquei eles [conforme a
documentação](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#diarios-oficiais-coletados)
não encontrando problemas.
- [x] Eu verifiquei os arquivos `.csv` gerados pela minha coleta
[conforme a
documentação](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#arquivos-auxiliares)
não encontrando problemas.
- [x] Eu verifiquei os arquivos de `.log` gerados pela minha coleta
[conforme a
documentação](https://docs.queridodiario.ok.org.br/pt-br/latest/contribuindo/raspadores.html#arquivos-auxiliares)
não encontrando problemas.

#### Descrição

Reimplementação do raspador do município de Maragogi AL , anteriormente
citado nesta issue
#1176 e feito
parcialmente nesta PR
#1186, porém o mesmo
ficou muito tempo esperando retorno do desenvolvedor, visto que houve
mudanças drásticas no site dos diários oficiais em questão, decidi abrir
esta nova PR para facilitar o fluxo de revisão


- Logs e outputs de uma extração completa:

[output-all.log](https://github.com/user-attachments/files/17197804/output-all.log)

[output-all.csv](https://github.com/user-attachments/files/17197805/output-all.csv)

- Logs e outputs de uma extração com data aleatória (2024-05-10 até
2024-08-23):

[output-date.csv](https://github.com/user-attachments/files/17197810/output-date.csv)

[output-date.log](https://github.com/user-attachments/files/17197809/output-date.log)
  • Loading branch information
ogecece authored Oct 16, 2024
2 parents 93322b5 + d4bbe96 commit 3eecd1b
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions data_collection/gazette/spiders/al/al_maragogi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import re
from datetime import date
from urllib.parse import parse_qs

import dateparser
from scrapy import FormRequest

from gazette.items import Gazette
from gazette.spiders.base import BaseGazetteSpider


class AlMaragogiSpider(BaseGazetteSpider):
name = "al_maragogi"
TERRITORY_ID = "2704500"
allowed_domains = ["diario.maragogi.al.gov.br"]
start_date = date(2024, 4, 17)
BASE_URL = "https://diario.maragogi.al.gov.br"

def start_requests(self):
yield FormRequest(
url=f"{self.BASE_URL}/busca",
formdata=self.__create_params(),
method="GET",
)

def parse(self, response, current_page=1):
publications = response.css("div.publicacao > div.box-publicacao")
for publication in publications:
title_element = publication.css("h4 a::text")
extra_edition = "extra" in title_element.get().lower()
edition_number = title_element.re_first(r"nº (\d+)/", re.IGNORECASE)

date_raw = publication.css("div div div::text").getall()[1].strip()
item_date = dateparser.parse(date_raw, languages=["pt"]).date()

file_id = publication.css("h4 > a::attr(href)").get().strip().split("/")[-1]
url = f"{self.BASE_URL}/diario-oficial/versao-pdf/{file_id}"

yield Gazette(
date=item_date,
edition_number=edition_number,
is_extra_edition=extra_edition,
file_urls=[url],
power="executive",
)

if current_page > 1:
return

last_page = self.__get_total_pages(response)
for page in range(2, last_page + 1):
yield FormRequest(
url=f"{self.BASE_URL}/busca",
formdata={"page": str(page), **self.__create_params()},
method="GET",
cb_kwargs={"current_page": page},
)

def __create_params(self) -> dict:
return {
"BuscaSearch[data_inicio]": self.start_date.strftime("%Y-%m-%d"),
"BuscaSearch[data_fim]": self.end_date.strftime("%Y-%m-%d"),
"BuscaSearch[sort]": "data_new",
"BuscaSearch[modulo]": "diario-oficial",
}

@staticmethod
def __get_total_pages(response) -> int:
query = response.css("div.publicacao ul > li.last > a::attr(href)").get()
if not query:
return 0

params = parse_qs(query.split("?")[-1])
return int(params.get("page", ["0"])[0])

0 comments on commit 3eecd1b

Please sign in to comment.