Skip to content

Raspagem/coleta dos preços de combustíveis em Joinville/SC

License

Notifications You must be signed in to change notification settings

renanbirck/gasolina

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gasolina: raspagem e processamento dos preços dos combustíveis disponibilizados pelo PROCON de Joinville/SC

Introdução

O PROCON de Joinville/SC, disponibiliza, por meio do seu site, o preço dos combustíveis em todos os postos de gasolina do município.

Assim, o objetivo deste projeto é coletar esses dados e alimentar um banco de dados, a partir do qual é gerado um dashboard e tabelas nas quais é possível fazer a filtragem por bairro.

O back-end do projeto é estruturado em três módulos:

  • scraper: faz a raspagem do site do PROCON e determina o arquivo PDF a ser baixado.
  • parser: processa o arquivo PDF, carregando os valores dele no banco de dados.
  • api: disponibiliza os dados coletados para o front-end.

Requisitos

  • Para o scraper:
    • Python 3.11 ou mais recente;
    • requests;
    • BeautifulSoup.
  • Para o parser:
    • pymupdf (foi o que funcionou melhor para este layout de PDF nos meus testes);
    • TODO: continuar a parte de processamento do PDF
  • TODO: ver o uso de um ORM, substituindo o uso de SQL puro.
  • TODO: definir como será feita a API.
  • TODO: definir como será feito o front-end.

Execução

  • Para rodar o scraper dentro de um container:

    • Construir o container - usei o podman, mas é igual para o Docker - a partir da raiz: podman build -t docker-scraper -f scraper/Dockerfile .
    • Como o scraper escreve para um diretório, é preciso executar o container indicando onde gravar os dados. podman run -d -v [local onde gravar os dados]:/app/data docker-scraper:latest
  • Para rodar o parser:

    • No diretório parser, rodar o script run_parser.sh, fornecendo um arquivo adequado como parâmetro.
  • TODO: a estrutura dos PDFs mudou conforme o tempo, então preciso ver como fazer. Provavelmente vou fazer data wrangling na mão e fornecer um CSV.

  • TODO: integrar os testes com o container.

  • TODO: escrever Dockerfiles para o resto

  • TODO: configurar Actions para rodar os testes automaticamente

  • TODO: automatizar o deploy

  • TODO: ver se há alguma forma mais inteligente, evitando raspagem de PDF ou ao menos tornando ela mais resistenta a mudanças no layout do PDF.

Problemas encontrados

  • A tabela fornecida pela prefeitura é inconsistente, com postos repetidos ou que mudaram de nome.

Licença

Licenciado sob a licença MIT; ver o arquivo LICENSE para mais detalhes.

About

Raspagem/coleta dos preços de combustíveis em Joinville/SC

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages