Continuamos con nuestro #desafíoPython, ahora ya empezamos a observar como se comporta el ranking que queremos capturar y las herramientas de Python que tenemos para esta tarea.

¿Qué hemos conseguido hasta ahora?

Hemos cumplidos los hitos 1 y 2 de la primera entrega. Puedes ver como avanza en la tercera parte del desafío.

El código está disponible en este repositorio de GitHub, concretamente con la versión 0.1.

¿Qué dificultades nos hemos encontrado?

El requisito de conocer en profundidad muchos puntos de la sintaxis de Python puede provocar que nos quedemos algo atascados. Aconsejo practicar las cosas básicas en el intérprete en línea de Python (el que se ejecuta en el terminal) e intentar dejar lo más útil en una sandbox del proyecto.

Así lo hemos hecho en nuestro proyecto, concretamente en sandbox\basics.py con algunas referencias que nos parecieron interesantes:

# esto es una lista

[a,b]  =  (5,0)

print(type([a,b]))

# esto es una tupla

(x,y)  =  (5,0)

print(type((x,y)))

try:

  z = x/y

except  ZeroDivisionError:  # como no puede dividir por cero, este es el error que podemos capturar

  print("You can't divide by zero")

Eso sí, no te saltes cosas como los flujos de control o las expresiones porque crees que ya te las sabes. Practica al menos una vez.

Nos hemos centrado en conocer los tipos de datos de Python, con especial interés en listas, tuplas y diccionarios. Recuerda que en la entrega anterior recomendamos enlaces para comprender estos temas.

La librería BeautifulSoup es muy sencilla de manejar. Ahí aprendimos también que, según la Wikipedia, scraping se escribe con una sola “p” :)

Sobre el editor Visual Studio Code seguimos las recomendaciones para trabajar con Python, pero los linter me dieron algunos problemas de instalación y no nos paramos a repasar todas las opciones de configuración.

Análisis del HTML que queremos capturar

Como compartimos queremos construir un ranking en base a la clasificación ofrecida por ivoox. Esta sería la primera página para los programas de Internet y tecnología.

Si guardamos con el navegador esta página en nuestro proyecto, para que sea más rápido el acceso, podremos analizar el HTML con bastante facilidad.

Cada podcast está dentro de un bloque con la clase col-xs-12 col-sm-6 col-md-4 col-lg-3

A partir de ahi se nos ofrece un montón de información visible y, otra, dirigida a cumplir los microformatos, en concreto el de RadioSeries.

Esto es un gran descubrimiento, ya que este contenido ya está generado para que sea capturado por las arañas de internet. Para el caso del podcast “Daily” este es el HTML resultante de este microformato:

<meta  itemprop="name"  content="Daily"/>
<meta  itemprop="description"  content="Un podcast diario sobre tecnología en general, Apple en particular, redes sociales, productividad personal y, francamente, cualquier otra cosa que me interese. Presentado por Emilcar."/>
<meta  itemprop="url"  content="https://www.ivoox.com/podcast-daily_sq_f145026_1.html"/>

Así podremos extraer varias cosas de esta información:

  • Nombre del podcast
  • Descripción
  • Identificador (145026)
  • Posición en la lista (viene dada por lo que captura nuestro scrapper)

¿Cuando completaremos el hito 3 del proyecto?

Lo definimos así:

Hito 3. Comprender el funcionamiento de lo que queremos capturar y hacer el scrapping inicial de una de las páginas.

Así que lo tendríamos listo cuando:

  • Analicemos el HTML que podemos capturar.
  • “Scrapear” el contenido de cada página de una página estática y mostrarlo en pantalla.
  • El contenido sería título, descripción, posición… Podemos incluir otros elementos si nos es fácil conseguirlo.
  • Repetir el proceso utilizando la librería requests para capturar el contenido online.

Recursos para lograrlo

Los teníamos ya en la primera parte, añado algunos más:

¿Qué tal te ha ido?

Cuéntanos que tal te ha ido a través de los comentarios o en twitter con el hastag #desafioPython.

Escrito por Dani

Soy programador web freelance. Especialista en frameworks basados en PHP como Drupal, aunque también me gusta trabajar con microframeworks en varios lenguajes y, por supuesto, tengo a Javascript de gran aliado. aquí.
comments powered by Disqus