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

Feature/lista municipios tocantins #1336

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

firefueled
Copy link

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

#1093

Esta PR tenta adicionar 7 raspadores de Tocantins que usariam o mesmo sistema de publicação.

@firefueled
Copy link
Author

Preciso de uma ajuda pra decidir o que fazer com esta tarefa.

Apesar do site ser bem difícil de raspar devido a sua dependência no JS, tava até me divertindo conseguindo tocar aos trancos e barrancos.
Comecei tomando o site de Lavandeira como exemplo. Ele tem uma tabela paginada e eu consegui fazer o raspador navegar pelas páginas e pegar itens de cada uma delas.

O problema começou a surgir nesta navegação entre páginas. Comecei a receber respostas inesperadas do backend sem motivo aparente. Após muita dor de cabeça, cheguei à conclusão que o problema é no backend mesmo, e não parece ser um bug no meu raspador.
A evidência mais clara disso está aqui. Isso mostra três execuções subsequentes com resultados de captura diferentes.

O que acontece é que, em alguns momentos, uns itens são baixáveis porque o servidor responde OK na requisição necessária para construir o link de download do arquivo, em outros momentos, ele retorna um html de erro dizendo "dados inválidos" e não me dá o necessário para continuar.

Outra evidência de mal comportamento do backend é o estado do código da página. É um terror, e mostra que ele foi feito com técnicas e tecnologias muito antigas e mal-mantidas. Se o frontend está assim, imagino que o backend siga o exemplo.

Pra piorar, fui ver o site das outras cidades que deveriam ser cópias deste e logo na primeira (Combinado) percebi que o site parecia igual, mas com código levemente diferente.
Evidência de uma atualização ou versão mais nova do framework que existe para um site e não para os outros.

Outra cidade (Aurora do Tocantins), outro site semelhante, mas com código levemente diferente dos dois anteriores.

Outras evidências disso são:

  • Versões de PHP diferentes (7.4.33, 7.4.27, 7.4.23)
  • Software de servidor diferentes (nginx, Apache)
  • Redirecionamento para TLS diferentes

Isso indica que seria inviável(?) fazer um BaseSistema que funcione para todos porque cada site requer raspagem diferente.

Nota:
@ogecece mencionou que existem outras possibilidade de generalização que involvem coisas além de simples atributos de classe. Vou mapear o impacto destas para tomarmos uma decisão melhor.

Além disso, me parece inviável prosseguir com a criação do raspador para Lavandeira também, porque não dá pra confiar que o servidor vai responser da mesma maneira dadas requisições iguais.
Tentei relaxar a velocidade da requisições com o "DOWNLOAD_DELAY": 5.0 e não funcionou.
Não testei os outros sites profundamente, então eles ainda tem chances de se comportarem melhor do que Lavandeira.

Nota:
Outra sugestão foi usar um sistema de retry para os casos onde a resposta do servidor seja inesperada. Investigarei também

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.

1 participant