Open trevineju opened 1 month ago
Fiz esse script que me ajudou a validar os spiders do Maranhão. Acho que pode ajudar mais alguém, e talvez possamos melhorar isso pra incluir numa documentação ou dentro do próprio projeto.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
from sys import argv
from datetime import date, timedelta
from pathlib import Path
if len(argv) <= 1:
print('Você precisa fornecer um spider como argumento!')
exit(127)
TODAY = date.today()
YESTERDAY = date.today() - timedelta(1)
MONTH_START = date.today() - timedelta(30)
DATE_FORMAT = '%Y-%m-%d'
SPIDERS = argv[1:]
def scrape(spider: str, output_file_name: str, params: list[str]):
log_file = f'{spider}_{output_file_name}.log'
csv_file = f'{spider}_{output_file_name}.csv'
command = ['scrapy', 'crawl', spider]
command.extend(params)
command.extend(['-s', 'LOG_FILE=' + log_file, '-o', csv_file])
subprocess.run(command)
if 'log_count/ERROR' in Path(log_file).read_text():
print(f'Erro encontrado no arquivo {log_file}!')
for spider in SPIDERS:
scrape(
spider=spider,
output_file_name='yesterday',
params=[
'-a',
'start_date=' + YESTERDAY.strftime(DATE_FORMAT)
]
)
scrape(
spider=spider,
output_file_name='interval',
params=[
'-a',
'start_date=' + MONTH_START.strftime(DATE_FORMAT),
'-a',
'end_date=' + TODAY.strftime(DATE_FORMAT),
]
)
scrape(
spider=spider,
output_file_name='complete',
params=[]
)
Pra rodar, é só passar o nome dos spiders como parâmetros.
python tests/spiders.py ma_matoes_do_norte ma_paco_do_lumiar ma_pedreiras ma_pindare_mirim ma_santa_luzia_do_parua ma_trizidela_do_vale ma_vargem_grande ma_vila_nova_dos_martirios
Caso haja algum erro na coleta, ele mostra no console.
Erro encontrado no arquivo ma_pindare_mirim_yesterday.log!
Erro encontrado no arquivo ma_vila_nova_dos_martirios_yesterday.log!
Fiz esse script que me ajudou a validar os spiders do Maranhão. Acho que pode ajudar mais alguém, e talvez possamos melhorar isso pra incluir numa documentação ou dentro do próprio projeto.
@jjpaulo2, que tal abrirmos uma issue para conversar sobre isso?
Poderia mesmo ter um recurso desses no repositório. E, no espaço da issue, a gente discutir outras verificações a serem incluídas, pq só buscar por 'log_count/ERROR'
no log não é suficiente. A documentação sobre logs traz outras considerações e, também, o que foi coletado precisa ser visto (podendo ser o .csv
ou o queridodiario.db
-- usei o sqlite uma vez: https://github.com/okfn-brasil/querido-diario/pull/954#issuecomment-1830289419)
As PRs que comentou que revisaria também estava pensando em usar esse script, ne? Bora dar uma segurada nelas pra gente validar isso primeiro e aí passar a usar com consistência.
Show! O que eu tô fazendo no momento é usar o script mais pra agilizar o trabalho de rodar os spiders. E depois eu vou passando nos arquivos de saída um a um, procurando problemas.
Se a gente incrementar essas validações, talvez nem precisaria mais olhar os arquivos de saída.
Considerando que avançamos o conhecimento em torno dos padrões de sites que municípios usam:
Passou a ser uma possibilidade fazer scripts que criam os arquivos das spiders,
uf_municipio.py
, a partir dos achados de mapeamento. Foram feitas algumas experimentações com as PRs a seguir usando diferentes padrões. Todas elas precisam de revisão humana do código (visto que todo o fluxo foi automatizado) e execuções de coletas-teste.Esta issue registra esse escopo específico de PRs abertas e também gerencia o progresso dessas tarefas.
Tasks
Contribuições de revisão são bem-vindas! (comentando na PR que pretende revisá-la)