Vamos utilizar como exemplo um arquivo do Senado Federal do Brasil que informa a relação de senadores e se usufruem de Auxílio-Moradia ou Imóvel Funcional.
O link do arquivo é este: http://www.senado.gov.br/transparencia/lai/secrh/senador_auxilio_imoveis_pdf.pdf
Utilizaremos as bibliotecas python “requests” e “tabula” que podem ser instaladas com os comandos abaixo:
pip install requests
pip install tabula-py
Nosso script começa importando as bibliotecas mencionadas:
import requests as req
import tabula as tb
Então, criamos uma função (download_file) que recebe dois parâmetros: url e file_path. O primeiro, é a url (endereço eletrônico) do arquivo pdf. O segundo é o caminho do diretório onde o arquivo pdf deve ser salvo.
A função inicia fazendo uma checagem na requisição da url. Se estiver tudo OK segue para a escrita do arquivo no diretório informado.
# Function to download pdf file
def download_file(url, file_path):
# Checks url
response = req.get(url)
if response.status_code == req.codes.OK:
# with: the reference to the file exists only in its scope, being closed automatically.
# Uses "wb" for binary writing mode
with open(file_path, 'wb') as new_file:
new_file.write(response.content)
print("PDF Downloaded: {}".format(file_path))
else:
print("Something went wrong...")
response.raise_for_status()
def main():
pdf_file = "/pdf_file.pdf"
csv_file = "/csv_file.csv"
url = input('URL: ')
path = input('PATH: ')
Chamamos então a função download_file passando os parâmetros. Com o arquivo pdf salvo, vamos seguir para a conversão para csv.
Para isso, usamos a biblioteca tabula (tb) que recebe como parâmetros: caminho + nome do arquivo pd, caminho + nome do arquivo csv que será gerado e o formato do arquivo gerado (csv):
download_file(url, path+pdf_file)
try:
tb.convert_into(path+pdf_file, path+csv_file, output_format="csv", pages="all")
print("PDF converted and CSV saved.")
except:
print("Something went wrong.")
main()
Script completo no GitHub AQUI.
Resultado da execução do script: