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

Completar revisões para spiders feitos com scripts automatizados #1284

Open
4 of 12 tasks
trevineju opened this issue Sep 25, 2024 · 3 comments
Open
4 of 12 tasks

Completar revisões para spiders feitos com scripts automatizados #1284

trevineju opened this issue Sep 25, 2024 · 3 comments
Labels
epic Grande tarefa. Geralmente, uma tarefa épica se desdobra em outras tarefas menores good first issue Sugestão de tarefa para quem contribui pela primeira vez neste repositório

Comments

@trevineju
Copy link
Member

trevineju commented Sep 25, 2024

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)

@trevineju trevineju added good first issue Sugestão de tarefa para quem contribui pela primeira vez neste repositório epic Grande tarefa. Geralmente, uma tarefa épica se desdobra em outras tarefas menores labels Sep 25, 2024
@trevineju trevineju changed the title Completar revisões para PRs de raspadores para municípios replicados Completar revisões para spiders feitos com scripts automatizados Sep 25, 2024
@jjpaulo2
Copy link
Contributor

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!

@trevineju
Copy link
Member Author

trevineju commented Sep 26, 2024

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: #954 (comment))

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.

@jjpaulo2
Copy link
Contributor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
epic Grande tarefa. Geralmente, uma tarefa épica se desdobra em outras tarefas menores good first issue Sugestão de tarefa para quem contribui pela primeira vez neste repositório
Projects
Status: pendente
Development

No branches or pull requests

2 participants