Skip to content

feat: adiciona raspador para São Sebastião/SP - #1471

Open
maia-andre wants to merge 2 commits into
okfn-brasil:mainfrom
maia-andre:sp-sao-sebastiao
Open

feat: adiciona raspador para São Sebastião/SP#1471
maia-andre wants to merge 2 commits into
okfn-brasil:mainfrom
maia-andre:sp-sao-sebastiao

Conversation

@maia-andre

Copy link
Copy Markdown

AO ABRIR uma Pull Request de um novo raspador (spider), marque com um X cada um dos items da checklist abaixo. Caso algum item não seja marcado, JUSTIFIQUE o motivo.

Layout do site publicador de diários oficiais

Marque apenas um dos itens a seguir:

  • O layout não se parece com nenhum caso da lista de layouts padrão
  • É 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 adequada para o padrão.

Código da(s) spider(s)

  • O(s) raspador(es) adicionado(s) tem os atributos de classe exigidos.
  • O(s) raspador(es) adicionado(s) cria(m) objetos do tipo Gazette coletando todos os metadados necessários.
  • O atributo de classe start_date foi preenchido com a data da edição de diário oficial mais antiga disponível no site.
  • Explicitar o atributo de classe end_date não se fez necessário.
  • Não utilizo custom_settings em meu raspador.

Testes

  • Uma coleta-teste da última edição foi feita. O arquivo de .log deste teste está anexado na PR.
  • Uma coleta-teste por intervalo arbitrário foi feita. Os arquivos de .loge .csv deste teste estão anexados na PR.
  • Uma coleta-teste completa foi feita. Os arquivos de .log e .csv deste teste estão anexados na PR.

Verificações

  • Eu experimentei abrir alguns arquivos de diários oficiais coletados pelo meu raspador e verifiquei eles conforme a documentação não encontrando problemas.
  • Eu verifiquei os arquivos .csv gerados pela minha coleta conforme a documentação não encontrando problemas.
  • Eu verifiquei os arquivos de .log gerados pela minha coleta conforme a documentação não encontrando problemas.

Descrição

Resolve #468. Relacionado a #1071.

Continuação do PR #1075, de @almeidadm, que autorizou a retomada do trabalho (comentário). O commit original foi mantido com a autoria dele; o segundo commit adapta o raspador ao estado atual do site e do projeto.

Município: São Sebastião/SP (IBGE 3550704) — fonte: https://www.saosebastiao.sp.gov.br/doem.asp

O que mudou em relação ao PR #1075

  • O arquivo foi movido de data_collection/ para querido_diario_raspadores/ (reorganização do repositório).
  • O site mudou de layout: as edições agora são listadas por ano (doem.asp?Ano=AAAA, de 2017 até o ano corrente) e a página sem parâmetro mostra só o ano atual. O raspador faz uma requisição por ano dentro do intervalo de coleta, usando yearly_sequence, e usa async def start() conforme o padrão atual do projeto.
  • Os cards passaram a ser div.doem-card; a data e o número da edição são lidos do texto exibido no card (p e h4), e não mais do nome do arquivo PDF.
  • Aplicada a sugestão da revisão de @victorfernandesraton (extração dentro do if de intervalo de datas).

Sobre os metadados

  • power="executive_legislative": a Câmara Municipal publica atos próprios (extratos contratuais, por exemplo) no mesmo diário.
  • is_extra_edition=False: o site não sinaliza edições extras. Há dias com duas edições (numeração sequencial), mas sem qualquer marcação de "extra".
  • Inconsistências que são do site, não do raspador: em 4 edições (nº 995, 1033, 2015 e 37) a data exibida difere da data embutida no nome do arquivo, e o site reutiliza o número de edição em 4 casos (nº 463, 1168, 1510 e 2119, cada um com dois PDFs distintos). O raspador reproduz o que o site exibe.

Coletas de teste (arquivos .log e .csv anexados em comentário logo abaixo)

  • Última edição: -a start=2026-09-02 → 1 edição, 2 requisições, sem erros.
  • Intervalo: -a start=2025-12-01 -a end=2026-01-31 → 39 edições, 41 requisições, sem erros; conferido item a item contra a listagem do site.
  • Completa: sem filtro → 2301 edições, 2316 requisições (10 páginas de ano + PDFs), 1 erro, 7 min 39 s, 3,2 GB baixados. O site lista 2302 edições em 2026-09-03; a única ausente é a edição nº 30 (22/05/2017), cujo link no site aponta para DOEM_029_20170522.pdf, que responde 404 (o arquivo correto existe em DOEM_030_20170522.pdf, mas o site não linka para ele). Esse 404 é o único ERROR do log e é o motivo de o monitor de erros do Spidermon ter falhado. Houve 4 timeouts de conexão recuperados por retry, e 5 PDFs acima de 32 MB (o maior com 149 MB) geraram apenas avisos de tamanho.
  • Ao gravar no banco local, a edição nº 1168 gera um aviso (UNIQUE constraint failed) porque o site publica o mesmo PDF duas vezes, com nomes de arquivo diferentes, para 21/02/2022; o conteúdo é idêntico (mesmo checksum), então o banco rejeita a cópia. As duas linhas aparecem no .csv.

almeidadm and others added 2 commits September 3, 2026 21:42
O site da prefeitura (doem.asp) mudou desde a abertura do PR okfn-brasil#1075:

- as edições passaram a ser listadas por ano (doem.asp?Ano=AAAA) e a
  página sem parâmetro mostra apenas o ano corrente, então o raspador
  agora faz uma requisição por ano dentro do intervalo de coleta;
- o HTML mudou de `li.document h4.document-title a` para cards
  `div.doem-card`, com número (h4), data (p) e link (a.doem-btn).

Também aplica a sugestão da revisão de mover a extração para dentro do
`if` de intervalo de datas e passa a ler data e número de edição do
texto exibido no card, em vez do nome do arquivo PDF.
@maia-andre

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: novo

Development

Successfully merging this pull request may close these issues.

Add spider for São Sebastião/SP

2 participants