Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sistema replicavel administracaopublica #1247 #1297

Merged
merged 1 commit into from
Jan 22, 2025

Conversation

almeidadm
Copy link
Contributor

@almeidadm almeidadm commented Oct 4, 2024

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.

ma_nova_iorque_arbitrario.csv
ma_nova_iorque_arbitrario.log
ma_nova_iorque_completo.csv
ma_nova_iorque_completo.log
ma_nova_iorque_mais_recente.log

Descrição

O sistema replicável foi feita através da consulta ao domínio administracaopublica.com.br. Neste domínio podemos reutilizar os tokens identificadores do domínio originalmente apresentado na Issue #1247 transparenciadministrativa.com.br. Vale ressaltar que o domínio utilizado é disponibilizado na primeira página dos boletins.

Neste novo domínio a consulta ao endereço do arquivo pdf pode ser feita de maneira direta enquanto percorre o site, além de que as alterações de data podem ser feitas diretamente na url consultada.

O raspador consulta os boletins em um intervalo de 20 em 20 dias, correspondendo ao número máximo de boletins a serem mostrados sem navegação em paginação de resultados. Com isso podemos evitar a interação com elementos de renderização dinâmica no site.

@trevineju
Copy link
Member

boa, @almeidadm! Pode deixar um comentário na issue, por favor? Tenho tentado manter o quadro de tarefas atualizado com as pessoas atuando nas issues, e se vc não comentar lá, o GitHub não permite que eu cadastre que você fez. 😓

Colocando tb na fila de revisão ;)

@trevineju trevineju linked an issue Oct 4, 2024 that may be closed by this pull request
1 task
@trevineju trevineju added the hacktoberfest-accepted Pull Requests aprovados na Hacktoberfest label Oct 4, 2024
Copy link

@firefueled firefueled left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boa @almeidadm!

A task pede para a inclusão de Turilândia também.
Pode incluir este município?

Além disso o código está top! 👏 Falta uma coisinha só

)

def parse(self, response: Response, **kwargs: Any) -> Any:
gazettes = response.css(".diario_item_diario__g9Qfw")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este seletor com hash no sufixo pode causar problemas caso o site seja atualizado.
Este hash é adicionado por algum framework frontend que gera html, e dependendo da sua configuração, pode ser modificado sem aviso prévio e frequentemente, resultando em falha do raspador.

Felizmente, podemos remover o sufixo do seletor no Scrapy e usar a sintaxe que faz a busca pelo começo do nome da classe.
Vejo que usou dessa sintaxe na linha 38. Pode usar ela aqui também?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oi, @firefueled! Obrigado pelo feedback.

Para facilitar a revisão, subi dois novos commits para as alterações propostas, mas antes de aprovarem o PR posso fazer um git squash para melhorar o histórico de commits.

@firefueled
Copy link

Valeu @almeidadm !
Agora só ficaram faltando os arquivos csv e log referentes a peritoro e turilândia.
Desculpe por nao alertar para isso no meu último comentário :)

@trevineju trevineju force-pushed the administracaopublica branch 4 times, most recently from f4a73d8 to 78ac312 Compare January 21, 2025 22:32
@trevineju
Copy link
Member

trevineju commented Jan 21, 2025

@almeidadm, obrigada pela PR! Agilizei a revisão e já acomodei as modificações para desempacar logo o problema em produção que ela resolve.

As modificações feitas foram:

  1. Remoção de tipagens que não faz parte do padrão de projeto do repositório.

  2. Ajuste na criação da lista de datas
    image

Aqui por dois motivos: rrule cria uma recorrência de datetime e self.end_date é date, mais pra frente no código ele reclamava entre não ser possível comparar date e datetime. O segundo motivo é que só adicionar end_date, sem verificar se já estava ou não, permitia o caso em que o end_date existia duas vezes na lista.

  1. Ajuste no reconhecimento do padrão
    image
    Talvez o site tenha sido atualizado entre você fazer a PR e esta revisão, mas adicionaram uma coluna nova na página. Aí impactou o preenchimento dos metadados.

  2. Muitos redirecionamentos
    Os logs (abaixo) estão com muitos casos de redirect, mas era pq faltou o www no link
    image

  3. Troca do intervalo da recorrência
    image

O raspador consulta os boletins em um intervalo de 20 em 20 dias, correspondendo ao número máximo de boletins a serem mostrados sem navegação em paginação de resultados. Com isso podemos evitar a interação com elementos de renderização dinâmica no site.

O problema aqui são as edições "outras". Como você usou o limite da capacidade da página, não deixou espaço para casos de edições extras e de terceiros. Ou seja, em 20 dias, não necessariamente tem 20 edições; pode ter, seila, 28, por incluir algumas extras e de terceiros. O raspador pode perder essas edições, visto que não está paginando.

No print, coloquei 10 como exemplo, pensando que pode ser uma boa margem, mas estou rodando as coletas completas dos 3 raspadores dessa PR para intervalos de 20, 10, 7 e 5 dias. Assim que acabar verifico qual ficou melhor.

Até lá, seguem os logs da coleta do ultimo dia e de período, funcionando bem:
ma_peritoro_periodo_1mes.log | ma_peritoro_periodo_1mes.csv
ma_turilandia_periodo_1mes.log | ma_turilandia_periodo_1mes.csv
ma_nova_iorque_periodo_1mes.log | ma_nova_iorque_periodo_1mes.csv
ma_peritoro_ultima.log | ma_peritoro_ultima.csv
ma_turilandia_ultima.log | ma_turilandia_ultima.csv
ma_nova_iorque_ultima.log | ma_nova_iorque_ultima.csv

@almeidadm
Copy link
Contributor Author

@almeidadm, obrigada pela PR! Agilizei a revisão e já acomodei as modificações para desempacar logo o problema em produção que ela resolve.

As modificações feitas foram:

1. Remoção de tipagens que não faz parte do padrão de projeto do repositório.

2. Ajuste na criação da lista de datas
   ![image](https://private-user-images.githubusercontent.com/44185775/405407823-7cc7bfe6-5a7d-4081-8b04-440b9ef04528.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzc1MDY5ODUsIm5iZiI6MTczNzUwNjY4NSwicGF0aCI6Ii80NDE4NTc3NS80MDU0MDc4MjMtN2NjN2JmZTYtNWE3ZC00MDgxLThiMDQtNDQwYjllZjA0NTI4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAxMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMTIyVDAwNDQ0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBiNGQ3ZjNmMjI1MmM3MjJmM2FhOTFmNDk0Yzc4Y2MzODhlYmE4MzY0Y2M4OThiNmEzM2U5MGNhZTdhODM0NjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.CeOgR-zf8P-HwCU-y2UzX6w-tp27jRRBo5rWp1E2TBc)

Aqui por dois motivos: rrule cria uma recorrência de datetime e self.end_date é date, mais pra frente no código ele reclamava entre não ser possível comparar date e datetime. O segundo motivo é que só adicionar end_date, sem verificar se já estava ou não, permitia o caso em que o end_date existia duas vezes na lista.

3. Ajuste no reconhecimento do padrão
   ![image](https://private-user-images.githubusercontent.com/44185775/405408569-c012d0d8-2075-4bd4-ae37-3b54b2e891b5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzc1MDY5ODUsIm5iZiI6MTczNzUwNjY4NSwicGF0aCI6Ii80NDE4NTc3NS80MDU0MDg1NjktYzAxMmQwZDgtMjA3NS00YmQ0LWFlMzctM2I1NGIyZTg5MWI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAxMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMTIyVDAwNDQ0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFhNDU1NGM1MGRlZDNjMzcyZmQ3NmE5ZmFjNDM4M2YyZGM2ZTY2ZjM3MGM1OWNiNGY1MDgxNDkyMTM2MDk3MDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4Uk51ExkWtuRW7Xc6LLdyz1kA1VD0-sxorY44mPaoPY)
   Talvez o site tenha sido atualizado entre você fazer a PR e esta revisão, mas adicionaram uma coluna nova na página. Aí impactou o preenchimento dos metadados.

4. Muitos redirecionamentos
   Os logs (abaixo) estão com muitos casos de redirect, mas era pq faltou o www no link
   ![image](https://private-user-images.githubusercontent.com/44185775/405409329-4b057b7a-6df1-450f-a0b4-cac55df399e1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzc1MDY5ODUsIm5iZiI6MTczNzUwNjY4NSwicGF0aCI6Ii80NDE4NTc3NS80MDU0MDkzMjktNGIwNTdiN2EtNmRmMS00NTBmLWEwYjQtY2FjNTVkZjM5OWUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAxMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMTIyVDAwNDQ0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJhYTE2YWZlZGEyYjlmMTcxN2M4YzA3Y2E5NTYxNzRhYWRhOTc0MDEwYWY0ZTI3ZDdiZGE3M2QwNzcxNTg5Y2ImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Oj9Gy_CBq41l-aLeDp-YXqELxXulG003eSSElB71rxc)

5. Troca do intervalo da recorrência
   ![image](https://private-user-images.githubusercontent.com/44185775/405409484-bfd8764b-fb2b-4a55-90be-ced2a0e0d189.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzc1MDY5ODUsIm5iZiI6MTczNzUwNjY4NSwicGF0aCI6Ii80NDE4NTc3NS80MDU0MDk0ODQtYmZkODc2NGItZmIyYi00YTU1LTkwYmUtY2VkMmEwZTBkMTg5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAxMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMTIyVDAwNDQ0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNjMmM5M2I1MzFiNWNkYTM4OGU1MTA5NzA4Y2M2NDY4OTRiZmNkNTQ1MmYzNzAzMmE0YzFmNDUyNGM1YzFmZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.AteeuorvZi0CqJQ9E_YXThiSJFiRJ8UaKRSzhIL3kSE)

O raspador consulta os boletins em um intervalo de 20 em 20 dias, correspondendo ao número máximo de boletins a serem mostrados sem navegação em paginação de resultados. Com isso podemos evitar a interação com elementos de renderização dinâmica no site.

O problema aqui são as edições "outras". Como você usou o limite da capacidade da página, não deixou espaço para casos de edições extras e de terceiros. Ou seja, em 20 dias, não necessariamente tem 20 edições; pode ter, seila, 28, por incluir algumas extras e de terceiros. O raspador perde essas edições, visto que não está paginando.

No print, coloquei 10 como exemplo, pensando que pode ser uma boa margem, mas estou rodando as coletas completas dos 3 raspadores dessa PR para intervalos de 20, 10, 7 e 5 dias. Assim que acabar verifico qual ficou melhor.

Até lá, seguem os logs da coleta do ultimo dia e de período, funcionando bem: ma_peritoro_periodo_1mes.log | ma_peritoro_periodo_1mes.csv ma_turilandia_periodo_1mes.log | ma_turilandia_periodo_1mes.csv ma_nova_iorque_periodo_1mes.log | ma_nova_iorque_periodo_1mes.csv ma_peritoro_ultima.log | ma_peritoro_ultima.csv ma_turilandia_ultima.log | ma_turilandia_ultima.csv ma_nova_iorque_ultima.log | ma_nova_iorque_ultima.csv

Boa, @trevineju!
Tive alguns problemas nessa branch e acabei não conseguindo resolver.
Fico feliz que consegui contribuir pra essa solução!

Também agradeço os comentários sobre as alterações aplicadas! Assim consigo me atentar a essas questões, ou outras similares, em PRs futuros!

@trevineju
Copy link
Member

@trevineju
Copy link
Member

Boa, @trevineju! Tive alguns problemas nessa branch e acabei não conseguindo resolver. Fico feliz que consegui contribuir pra essa solução!

Também agradeço os comentários sobre as alterações aplicadas! Assim consigo me atentar a essas questões, ou outras similares, em PRs futuros!

nova spider ma_turilandia

correcao sufixo em seletor administracaopublica

Remoção de trechos e imports sobre tipagem

Corrige erros de digitação

Corrige lógica de geração de datas

Troca forma de reconhecimento de intervalos vazios

Resolve casos de redirecionamento

Corrige reconhecimento de layout do site

Corrige coleta de metadados

Reduz intervalo de recorrência de datas
@trevineju trevineju force-pushed the administracaopublica branch from 78ac312 to ab08f52 Compare January 22, 2025 01:16
@trevineju trevineju merged commit cf5a2b4 into okfn-brasil:main Jan 22, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
hacktoberfest-accepted Pull Requests aprovados na Hacktoberfest
Projects
Development

Successfully merging this pull request may close these issues.

[Novo spider base]: transparenciaadministrativa
3 participants