Mirando los datos históricos que ofrece un observatorio meteorológico de mi ciudad, veo que sólo los ofrecen gráficamente y para descargar como PDF. No entiendo porqué no dejan descargarlos en csv que sería mucho más útil para todos.
Así que he estado buscando una solución para pasar estas tablas de pdf a csv o si alguien quiere a formato Excel o Libre Office. Me gusta csv porque con un csv haces de todo puedes tratarlo con python y sus librerías o puedes importarlo fácilmente en cualquier hoja de cálculo.
Como la idea es conseguir un proceso automatizado lo que quiero es un script para trabajar con Python y aquí es donde entra Tabula.
Convertir pdf a csv con Tabula
Los pasos y funcionamiento es muy sencillo. Lo primero será instalar la librería de Tabula en nuestro entorno de desarrollo. Tabula nos permite extraer datos de tablas en PDF en dataframes de Pandas la librería de Python optimizada pra trabajr con csv y arrays.
También permite extraer y convertir entre PDF, JSON, CSV y TSV. Una joyita. Puedes encontrar mucha más información en su repositorio de Github
Yo aprovecho todo el trabajo de días anteriores y lo instalo en Anaconda. En el enlace puedes ver como instalar Anaconda.
Insatalamos Tabula
#primero activamos nuestro entorno de desarrollo en nuestro caso sería conda activate comparador
pip install tabula-py
A la hora de ejecutarlo a mí me daba un error
la solución como indican en su documentación fue desinstalar la versión antigua de Tabula e instalar la nueva.
pip uninstall tabula
pip install tabula-py
Creamos el ejecutable .py
Creo el ejecutable .py que llamo pdftocsv.py lo meto en mi carpeta Descargas/eltiempo y es un archivo con el siguiente código
import tabula
# Extaer los datos del pdf al DataFrame
df = tabula.read_pdf("inforatge.pdf")
# lo convierte en un csv llamdo out.csv codificado con utf-8
df.to_csv('out.csv', sep='\t', encoding='utf-8')
El pdf a leer se llama inforatge.pdf y le digo que la salida se llame out.csv y se quedará en la carpeta en la que estamos trabajando.
Nos vamos al directorio donde tenemos tanto el ejecutable y el pdf que queremos convertir. Es importante porque si nos dirá que no encuentra el archivo.
cd Descargas/eltiempo
En este directorio tenemos el PDF, el archivo .py que hemos creado y ahí nos devolverá el csv que queremos.
Ejecutamos el código
python pdftocsv.py
Fíjate que he usado python, es decir que le digo que lo ejecute con python 2 y no con python3 que falla. Y ya está si no devuelve ningún error ya lo tenemos.
Hemos añadido 3 líneas más al archivo para el control de tiempo de ejecución. al final hemos dejado nuestro archivo pdftocsv.py como
import tabula
import time
start_time = time.time()
df = tabula.read_pdf("inforatge.pdf")
df.to_csv('out.csv', sep='\t', encoding='utf-8')
print("--- %s seconds ---" % (time.time() - start_time))
Más opciones de Tabula
Más ejemplos de cosas que podemos hacer. Hay muchas opciones, lo mejor es pasarse por el repositorio de Github oficial que he dejado
# Leer PDF remotos y convertirlos en DataFrame
df2 = tabula.read_pdf("https://github.com/tabulapdf/tabula-java/raw/master/src/test/resources/technology/tabula/arabic.pdf")
# Convertir un PDF en CSV
tabula.convert_into("test.pdf", "output.csv", output_format="csv")
Y sin duda una de las cosas más útiles convertir todos los archivos PDF, JSON, etc de un directorio.
tabula.convert_into_by_batch("input_directory", output_format='csv')
Con esto podremos automatizar tareas que de otra forma serían largas y tediosas. Al final este es uno de los motivos de usar esta librería.
Convertir pdf a excel online
Si lo que queremos es simplemente convertir un archivo, extraer los datos de la tabla de PDF a Excel, Librecalc o similar, no es necesario complicarlo tanto. Hay herramientas disponibles para hacer esta tarea, algunas para instalarlas y otras para hacer el trabajo online.
Yo he probado estas dos herramientas online y funcionan muy bien.
- https://www.pdftoexcel.com/es
- https://www.pdftoexcelonline.com/es/ funciona bien pero te envía el documento por mail
Ten en cuenta que esto no es un trabajo automatizado, y por eso el estudio de estas herramientas no ha sido exahustivo. Tan solo las comento para quien le pueda interesar.
El método clásico
Y siempre nos queda el método clásico, el más chapucero y costoso pero que al final es una opción si haypoco trabajo.
Copiar las celdas de la tabla del pdf y pegarlas en nuestra hoja de cálculo.