Como baixar um arquivo pdf da internet e convertê-lo para csv com python

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()

       
Na função main() definimos as variáveis com os nomes dos arquivos pdf e csv e solicitamos que o usuário informe o link do arquivo pdf a ser baixado e o caminho onde os arquivos devem ser salvos.

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: