Archivo | python RSS for this section

Alimentar Tabla desde CSV usando Python


Hoy me enfrenté a la necesidad de alimentar una tabla de una BD de PostgreSQL usando archivos CSV (archivos QVD de Qlikview originalmente) y lo primero que traté de hacer fue generar el archivo CSV para importarlo a PostgreSQL pero algunos archivos estaban dando problemas y cuando es muy grande el CSV a importar, se hace más lento el proceso y el debug.

Desde Qlikview se tenía que recorrer todo el archivo e insertar cada una de las filas generando el comando SQL manualmente. Recurrí a Python para hacer la tarea y el resultado fue hacer el proceso mucho más fácil y divertido. La solución es usar pandas y su conexión para postgreSQL (a través de sqlalchemy), aquí el script:

#!/usr/bin/python

import pandas
from sqlalchemy import create_engine

RUTA_CSV="/ruta/archivocsv/"
archivo="ArchivoCSV.csv"

def main():
#Usando Pandas
engine = create_engine('postgresql://USER:PASS@IP:PORT/BD')
archivocsv=pandas.DataFrame.from_csv(RUTA_CSV+archivo, sep='\t')
archivocsv.to_sql("TABLA", engine, if_exists='append', schema='esquema')

if __name__ == "__main__":
main()

Al utilizar DataFrame.from_csv se crea el dataframe de pandas usando el separador requerido.
Con la función to_sql se realiza la inserción en la BD en la TABLA especificada usando el esquema schema y con la opción if_exists=’append’ indicamos que en caso de la tabla existir en la BD y esquema especificados, se haga una inserción de datos.

De ésta forma fácilmente podemos hacer un volcado de la información de archivos planos a una BD PostgreSQL, si los archivos planos son demasiado pesados es conveniente hacer el proceso en lotes y allí pandas brinda una alternativa también.

Don’t Worry….Be Linux!!!

Descargar archivos en masa con webscrapping en python


En algún momento todos hemos tenido la necesidad de descargar archivos en masa desde páginas de internet (y no, no siempre es con ánimos de piratear cosas). En algunos casos herramientas como JDownloader han sido de ayuda para tomar varios links, pero los links no siempre son visibles y tenemos qué navegar a través de varias páginas para obtener lo que buscamos.

Buscando podcasts para aprender inglés me encontré ésta página: https://learnenglish.britishcouncil.org/en/elementary-podcasts y los materiales me gustaron aunque vi que eran 4 series, dos de 10 capítulos y dos de 20 con sus transcripciones (120 archivos en total) así que descargué los dos primeros audios y me puse el reto de hacer algo con R o python para descargar el resto.

En éste post no voy a entrar en detalles técnicos sobre el script de python pero sí voy a hablar sobre los conceptos clave que involucra hacer un webscrapping para descargar archivos de páginas web:

  1. Conocer la estructura de la página web. Este proceso no es automático totalmente por lo que saber un poco de la estructura de la página de la que se quiere descargar ayuda bastante. Por ejemplo en mi caso, la estructura de la URL de los capítulos es: https://learnenglish.britishcouncil.org/en/elementary-podcasts/series-01-episode-01 que es susceptible de estar en un ciclo de programación. También sé que quiero descargar los archivos MP3 y un transcript en PDF y al examinar el código de la página es fácil ver que hay elementos span con clase “file” donde están los links para descargar.
  2. Determinar la herramienta para el scrapping. Decidí usar python para hacer el scrapping y basado en [1] empecé a entender cómo utilizar la función BeautifulSoup de la librería bs4 de python. Mi plan sería crear carpetas por cada sesión y guardar un archivo por cada capítulo (4 sesiones, ~15 captíulos por sesión) así que busqué cómo descargar los archivos una vez tuviera los links de descarga y encontré que así como en GNU/Linux, hay un wget en python.
  3. Crear el script. Con la estrategia definida creé el script que inicialmente fue de unas 15 líneas y luego lo perfecccioné un poco con el caso específico de la págin de British Council (algunas veces tienen 5 archivos de descarga, otras 2) y básicamente busca los links en la página, descarga los archivos y los almacena en la estructura de archivos que describí en el paso 2. El script y próximamente más info estilo notebook se encuentra disponible en mi github

Este es un ejemplo para que lo ajusten a sus necesidades y ojalá lo compartan en los comentarios.

Don’t worry….Be Linux!!!

[1] https://www.dataquest.io/blog/web-scraping-tutorial-python/