Archive | mayo 2017

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/