Web scraping con Python: primeros pasos #desafíoPython
Esta es la primera entrega del #desafioPython lanzado desde el podcast Web Reactiva. Se trata de seguir los pasos de un proyecto para alguien que o no conoce o está empezando la programación con python.
Habrá varias entregas de esta serie, con código incluido. Podrás seguirlas en el podcast y en twitter con el hashtag #desafíoPython.
¿Quieres disfrutar de todo el desafío con todos los problemas resueltos en vídeo?
Durante 9 horas de vídeo en castellano te cuento todos los detalles de como he creado esta aplicación. Apúntate al curso del Desafío Python
¿Qué es el web scraping? ¶
El scrapping es una técnica para capturar datos publicados en la web. Hay que pensar que no siempre hay una API pública a disposición de todos o que esta entraña algunas dificultades. Con el scarpping podremos acceder a esos sitios web como si fuéramos personas pero capturando la información allí contenida para hacer algo con ella después.
Aprovechamos lo que Google lleva tantos años haciendo, no hemos descubierto nada. Capturar esa información directamente del HTML estudiando el marcado de la misma. Si algo tiene bueno la web es que el formato HTML otorga una estructura jerárquica que podremos leer a través de programación.
Existen montones de librerías, servicios y documentación sobre como hacer scrapping. Además, si aciertas con los datos adecuados, puede ser un negocio muy lucrativo.
Una visión más global la encontrarás en el artículo de la wikipedia.
¿Por qué con python? ¶
Porque es de código abierto, fácil de leer y de aprender. Te lo cuento en detalle en este episodio del podcast:
Por su gran versatilidad también te ofrece una ventaja que no es baladí: vas a centrarte en la tarea a programar sin necesidad de distraerte con otras cosas. No hay que aprender fundamentos de servidores web o de análisis de datos. Puedes entrar a tener resultados con un relativo poco esfuerzo. Otra cosa será cuando quieras ir mejorando.
Así que desde el primer momento arrancamos con la terminal y lanzamos la ejecución del código. Estamos muy cerca entre lo que preparamos en nuestros programas y el resultado de los mismos y eso es bueno.
Más adelante veremos como conseguir más cosas con esta información que vamos a capturar, también gracias a python y sus múltiples posibilidades.
Objetivos del desafío ¶
Siempre hay que plantearse unos objetivos en un proyecto, sea de aprendizaje, un side project o un encargo de trabajo.
Aquí serían los siguientes, ya ves que no apuntamos muy alto, pero tenemos las ideas claras (algo esencial en la vida, no sólo en un proyecto de programación). Son estas:
- Aprender a programar en python (o por lo menos dar los primeros pasos).
- Capturar información de una web.
- Almacenar, gestionar y mostrar esa información.
- Publicar el resultado en internet.
- El proyecto debe ser de ejecución sencilla en una primera fase.
- Hacerlo todo con mucha pasión.
Aviso desde ya. Que los objetivos estén claros no quiere decir que no se puedan ir afinando con el paso del tiempo.
El tercer punto es demasiado ambiguo (¿dónde almacenamos? ¿qué tipo de gestión? ¿en qué lugar se muestra?), pero como el requisito es nuestro podemos permitirnos el lujo de no ser muy específicos ahora mismo. Llegará el punto en el que concretemos, a medida que vayamos avanzando en el proyecto.
Hitos del proyecto ¶
Se dan la mano con los objetivos, los que tenemos planteados ahora mismo son estos:
- Hito 1. Definir el proyecto a ejecutar.
- Hito 2. Entender el funcionamiento básico de Pyhton y primer scrapping de una página sencilla.
- Hito 3. Comprender el funcionamiento de lo que queremos capturar y hacer el scrapping inicial de una de las páginas.
- Hito 4. Replicar el comportamiento del hito 3 para capturar varias páginas y almacenarlas de forma sencilla.
- Hito 5. Mostrar la información almacenada de forma sencilla
- Hito 6. Publicarlo en internet.
Puedes ver los detalles de este desafío con todos los problemas resueltos y la aplicación real funcionando en el curso en vídeo (9 horas)
¿Qué información queremos capturar? ¶
Queremos capturar la información publicada en una web. Es el primer paso a dar: ¿qué queremos scrapear?
Una pequeña lista en papel arrojó unos cuantos resultados, que fuimos analizando brevemente para ver si encajaban en el tipo de proyecto a realizar.
Extraer información de tablas o páginas de la Wikipedia.
- Ventaja: Múltiples ejemplos de los que tomar referencias.
- Inconveniente: Es un ejemplo muy típico y de contenido estático, no parece suficientemente motivador.
Precios más bajos de vuelos
- Ventaja: De alto interés comercial, ¿quién no quiere saber cómo volar más barato?
- Inconvenientes: Dificil extraer la información de varias páginas y hay que interactuar con varios recursos de cada una de ellas hasta obtener el resultado a scrapear. Aparte me surgen dudas sobre la legalidad de hacerlo.
Comparador de precios
- Ventaja: Alto interés comercial.
- Inconvenientes: Nos obliga a crear perfiles diferentes de scrapping para cada web de donde queremos extraer la información y seguramente tendríamos limitaciones de acceso por repetición de peticiones.
Evolución de precios en Amazon
- Ventajas: Interés real y múltiples ejemplos
- Inconvenientes: Es sabido que Amazon limita este tipo de consumo de información y podríamos resolver mucha parte de esto también con la API.
El ranking de podcast por temática en ivoox
- Ventajas: No es un dato que se pueda obtener de otra forma que no sea a través de la visita a la web y es algo que nunca sé como consultar.
- Inconvenientes: No tiene tanto valor comercial.
El elegido es el último: capturar el ranking de podcast de ivoox y mostrarlo de forma clara. Iremos afinando en siguientes pasos del desafío.
¿Cuándo habremos completado los hito 1 y 2 del desafío? ¶
Podemos utilizarlo en forma de checklist, para ir tachando cuando tengamos claro el concepto.
- Instalar la última versión o por lo menos python versión 3.
- Manejar la consola o shell de pyhton para ejecutar los comandos o lanzar los programas realizados.
- Utilizar el editor de código con facilidad.
- Conceptos claves de la programación con este lenguaje como son la definición de variables, expresiones, estructuras de control.
- Tipos de datos como lista o tubla.
- Crear nuestra primera función.
- Ver como la información de python se estructura mediante la identación.
- Utilizar pip como gestor de paquetes.
- Aprender a importar una libreria.
- Crear un primer scrapping sencillo con la librería Beautiful Soup.
Recursos para lograrlo ¶
El listado de recursos que te propongo es el que he utilizado yo. Puedes encontrar muchísimas opciones para conseguir el resultado final, pero quiero ceñirme al máximo para ayudar a que te concentres en el objetivo y que no te disperses. Es muy fácil cuando estas aprendiendo ir hacia lecciones más complejas o resultados de copiar y pegar. Usa estos enlaces como mejor te convenga :)
Software
- Instalar Python.
- El terminal o consola de tu sistema operativo. En mi caso utilizo iTerm2.
- Un editor de código. Vale cualquiera con el que te sientas cómodo. Para esta práctica utilizaré Visual Studio Code. Échale un ojo a la configuración recomendada para Python.
- Aunque desconozco su facilidad de uso si quieres también se puede utilizar Pyhton en tablet.
Conocimientos básicos de Python
- Lecciones de 0 a 4 de Automate Boring Stuff
- Curso básico de Python de Women in Django. Lee los requisitos previos para instalar python, pip y jupyter.
- Aprendiendo Python. Concretamente las primeras lecciones del tutorial en castellano.
- Python Course. Utiliza el menú lateral de la izquierda para ir en orden de aprendizaje.
Primeros pasos con el scrapping
- Lección 11 de Automate Boring Stuff.
- Los básicos de web scrapping con Beatiful Soup
¿Hasta dónde has llegado? ¶
Cuéntanos que tal te ha ido a través de los comentarios o en twitter con el hastag #desafíoPython.
Continúa a la segunda, tercera o cuarta parte del desafío.
Recuerda que tienes todo el desafío resuelto en el curso en vídeo (9 horas)
:)
Escrito por:
Daniel Primo
12 recursos para developers cada domingo en tu bandeja de entrada
Además de una skill práctica bien explicada, trucos para mejorar tu futuro profesional y una pizquita de humor útil para el resto de la semana. Gratis.