Code Monkey home page Code Monkey logo

querido-diario's Introduction

Querido Diário

Última atualização: 16/10/2021.


Click here to read this article in english.


Diário Oficial é o nome da publicação utilizada pela administração pública brasileira para comunicar suas ações à população. Para ser válido, todo ato público deve ser publicado no diário oficial, seja na esfera federal, estadual ou municipal.

Mesmo com os esforços recorrentes para fortalecer a Lei de Acesso à Informação pelo país, a comunicação oficial permanece - na maioria do território nacional - em PDFs.

O objetivo do Querido Diário é trazer os diários oficiais municipais para a era digital, centralizando as informações hoje disponíveis apenas em fontes separadas.

O projeto tinha duas metas distintas quando foi lançado: criar raspadores para os diários oficiais e analisar as informações sobre compras públicas e licitações. Atualmente, mantemos apenas o primeiro deles.

Para saber mais sobre o projeto, acesse o site oficial.

Tabela de Conteúdos

Ambiente de desenvolvimento

A melhor maneira de entender como o Querido Diário funciona é acessar a fonte original e rodá-la localmente. Todos os raspadores são desenvolvidos usando o framework Scrapy. Eles oferecem um tutorial para que você aprenda como usá-lo.

Se você utiliza Windows, antes de rodar os passos a seguir, você irá precisar do Microsoft Visual Build Tools (baixe aqui). Ao iniciar a instalação, você precisa selecionar 'C++ build tools' na aba de carregamento e também 'Windows 10 SDK' e 'MSVC v142 - VS 2019 C++ x64/x86 build tools' na aba de componentes individuais.

Se você utiliza Linux, os comandos a seguir irão criar um novo ambiente virtual - que manterá tudo isolado do seu sistema -, ativá-lo e instalar todas as bibliotecas necessárias para começar a rodar e desenvolver novos raspadores.

$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r data_collection/requirements-dev.txt
$ pre-commit install

No sistema Windows, você pode utilizar o código abaixo. Apenas substitua source .venv/bin/activate por .venv/Scripts/activate.bat. Os outros passos são os mesmos usados no Linux.

Rodar o raspador

Depois de configurar o ambiente de desenvolvimento, você poderá desenvolver e executar novos raspadores. Os raspadores estão na pasta data_collection, então você deve entrar nela e executar o comando scrapy:

$ cd data_collection

A seguir, listamos alguns comandos úteis.

Obter a lista de raspadores disponíveis

$ scrapy list

Executar o raspador com o nome spider_name:

Atenção: o comando acima levará um tempo para ser finalizado e irá coletar o site inteiro por padrão. Se você deseja pará-lo antes disso ou limitar a execução, utilize CLOSESPIDER_ITEMCOUNT ou configure start_date no raspador para uma data mais próxima.

$ scrapy crawl spider_name

Você pode limitar o número de diários que deseja baixar configurando start_date como um argumento com o formato YYYY-MM-DD. O comando a seguir irá baixar apenas diários cuja data é maior que 01/09/2020:

$ scrapy crawl sc_florianopolis -a start_date=2020-09-01

Dados coletados serão salvos na pasta data_collection/data.

Gerar múltiplos raspadores a partir de um template

Você pode se deparar com um cenário em que há diferentes cidades utilizando a mesma base para o raspador, como em FecamGazetteSpider. Para não ter que criar os arquivos de raspadores manualmente, você pode utilizar um script para casos em que temos alguns raspadores que não são complexos e usam a mesma base.

Os templates de raspadores ficam na pasta scripts/. Aqui está um exemplo de um raspador gerado:

from datetime import date
from gazette.spiders.base import ImprensaOficialSpider


class BaGentioDoOuroSpider(ImprensaOficialSpider):

    name = "ba_gentio_do_ouro"
    allowed_domains = ["pmGENTIODOOUROBA.imprensaoficial.org"]
    start_date = date(2017, 2, 1)
    url_base = "http://pmGENTIODOOUROBA.imprensaoficial.org"
    TERRITORY_ID = "2911303"

Para rodar o script, você precisa apenas de um arquivo .CSV seguindo a estrutura a seguir:

url,city,state,territory_id,start_day,start_month,start_year,base_class
http://pmXIQUEXIQUEBA.imprensaoficial.org,Xique-Xique,BA,2933604,1,1,2017,ImprensaOficialSpider
http://pmWENCESLAUGUIMARAESBA.imprensaoficial.org,Wenceslau Guimarães,BA,2933505,1,1,2017,ImprensaOficialSpider
http://pmVERACRUZBA.imprensaoficial.org,Vera Cruz,BA,2933208,1,4,2017,ImprensaOficialSpider

Depois de obter o arquivo .CSV, rode o comando:

cd scripts/

python generate_spiders.py new-spiders.csv

É isso. O novo raspador estará na pasta data_collection/gazette/spiders/.

Solução de problemas

Python.h faltando

Ao rodar o comando pip install, você pode obter o seguinte erro:

module.c:1:10: fatal error: Python.h: No such file or directory
     #include <Python.h>
              ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Tente instalar python3-dev. Por exemplo, via apt install python3-dev, se você está usando uma distro Debian, ou utilize o gerenciamento de pacotes da sua distro (por exemplo, python3.6-dev or python3.7-dev). Você pode saber qual é a sua versão via python3 --version.

Contribuindo

Se você está interessado em resolver issues e contribuir diretamente no código, por favor, leia o documento CONTRIBUTING.md.

Créditos

Este projeto é mantido pela Open Knowledge Brasil graças ao apoio da Digital Ocean e de muitas outras pessoas.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.