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.

querido-diario's People

Contributors

jvanz avatar irio avatar rennerocha avatar cuducos avatar giovanisleite avatar sergiomario avatar antoniovendramin avatar brunolellis avatar dannnylo avatar rodbv avatar anapaulagomes avatar rodolfolottin avatar victor-torres avatar alfakini avatar pgarcias01 avatar vitorbaptista avatar alvarolqueiroz avatar feliperuhland avatar he7d3r avatar danielbom avatar jaswdr avatar luzfcb avatar camilafracaro avatar weibemoura avatar adorilson avatar arianecamilo avatar beothorn avatar viniciusartur avatar tcurvelo avatar jefersonalves avatar

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.