O Petrobras scraper é um projeto para captura de dados do site da Petrobras com indicadores de preços médios da Gasolina e Diesel.
A Petrobras apresentava o ajuste de preços com a variação em percentual em relação a data divulgada anteriormente, através deste relatório PDF. Este relatório não é mais atualizado e a última data disponível é o dia 17/02/2018. Um trecho deste relatório pode ser visualizado na imagem abaixo:
O programa que faz o download e converte os dados baixados para CSV é o download_ajustes_precos_diesel_e_gasolina.py.
A partir de 08/02/2018 a Petrobras passou a disponibilizar a informação de preços médios em reais, e não mais em percentual, através deste relatório PDF. Este relatório não é mais atualizado e a última data disponível é o dia 19/04/2019. Um trecho deste relatório pode ser visto abaixo:
O programa que faz o download e converte os dados baixados para CSV é o download_precos_medios_diesel_e_gasolina.py.
As informações disponibilizadas no site da petrobras estão apenas no formato PDF. Entrei em contato com eles (Protocolo Ouvidoria Geral Nº 00914/2018) solicitando que o relatório fosse disponibilizado em outro formato (json, xml ou txt), mas eles responderam que existia apenas o formato PDF disponível e não me deram nenhum indicativo sobre a possibilidade de disponibilização da informação em outros formatos no futuro.
Diante disso, foi necessário a criação de um passo para extrair os dados da tabela em PDF, tarefa que foi realizada pela biblioteca tabula-py. O tabula-py é um wrapper do tabula-java, que extrai uma tabela de um arquivo PDF para um DataFrame pandas.
Para instalar as dependências do projeto utilize o comando abaixo:
> cd petrobras-scraper
> pip install -r requirements.txt
ou caso vocë utilize o pipenv, utilize o comando abaixo e ative o virtualenv:
> cd petrobras-scraper
> pipenv install
> pipenv shell
Para fazer o download dos preços e atualizar a base de dados de preços basta executar o programa download_precos_medios_diesel_e_gasolina.py com o comando abaixo:
> python download_precos_medios_diesel_e_gasolina.py
A partir da base de preços médios diários atualizada no passo anterior, foi criado uma outra base com a variação de preços em percentual. Para executar esse processo e atualizar a base de ajuste de preços basta executar o programa atualiza_base_ajuste_precos_diesel_gasolina.py com o comando abaixo:
> python atualiza_base_ajuste_precos_diesel_gasolina.py
Visto que os dados de preços da Petrobras foram disponibilizados apenas a partir de fevereiro/2018 e anteriormente já existia na base de dados preços utilizando base 100 tendo como início 01/01/2017, foi criado o programa calcula_preco_base_100.py para fazer esse cálculo e gerar a base final utilizada para análise
A base final contém a variação diária e os preços usando base 100 a partir de 01/01/2017. A execução desse programa gera dois arquivos de saída com o mesmo conteúdo: um em csv e outro no formato excel xlsx. A base final tem o formato abaixo:
Para executar a atualização das bases de dados de uma única vez, basta executar os 3 passos seguidos. Para facilitar esse processo, apenas execute o script start.bat/start.sh, de acordo com o seu sistema operacional:
> ./start.sh
> ./start.bat
Caso você deseja abrir as bases de dados como um dataframe pandas, utilize a função read_csv(), conforme exemplo abaixo:
import pandas as pd
path_file_base = 'bases/saida_indices_diesel_e_gasolina_base.csv'
df = pd.read_csv(path_file_base, sep=';')
print(df.tail())
Para disponibilização dos dados no formato json, foi desenvolvido um script em Flask que lê os arquivos csv com a base de preços e a base de índices e disponibiliza no formato json. Para executar, execute o comando abaixo:
> python ./flask-app.py
Então será iniciada uma aplicação Flask na porta 5000, que pode ser acessada no browser com os preços do diesel e gasolina e com os índices de acordo com os preços disponibilizados.