9.2.3 Acceder al contenido
Simplificando, podríamos decir que cada elemento de la famosa «sopa» de Beautiful Soup puede ser un bs4.element.Tag o un «string».
Para el caso de los «tags» existe la posibilidad de acceder a su contenido, al nombre del elemento o a sus atributos.
Nombre de etiqueta
Podemos conocer el nombre de la etiqueta de un elemento usando el atributo name:
Truco: Es posible modificar el nombre de una etiqueta con una simple asignación.
Acceso a atributos
Los atributos de un elemento están disponibles como claves de un diccionario:
Exite una forma de acceder al diccionario completo de atributos:
Truco: Es posible modificar el valor de un atributo con una simple asignación.
Contenido textual
Es necesario aclarar las distintas opciones que proporciona Beautiful Soup para acceder al contenido textual de los elementos del DOM.
Ejemplos:
Mostrando elementos
Cualquier elemento del DOM que seleccionemos mediante este paquete se representa con el código HTML que contiene. Por ejemplo:
Existe la posibilidad de mostrar el código HTML en formato «mejorado» a través de la función prettify():
Además de localizar elementos, este paquete permite moverse por los elementos del DOM de manera muy sencilla.
Moverse hacia abajo
Para ir profundizando en el DOM podemos utilizar los nombres de los «tags» como atributos del objeto, teniendo en cuenta que si existen múltiples elementos sólo se accederá al primero de ellos:
Existe la opción de obtener el contenido (como lista) de un determinado elemento:
Si no se quiere explicitar el contenido de un elemento como lista, también es posible usar un generador para acceder al mismo de forma secuencial:
El atributo contents sólo tiene en cuenta descendientes directos. Si queremos acceder a cualquier elemento descendiente (de manera recursiva) tenemos que usar descendants:
Moverse hacia arriba
Para acceder al elemento superior de otro dado, podemos usar el atributo parent:
También podemos acceder a todos los elementos superiores (ascendientes) usando el generador parents:
Otros movimientos
En la siguiente tabla se recogen el resto de atributos que nos permiten movernos a partir de un elemento del DOM:
Advertencia: Con estos accesos también se devuelven los saltos de línea \n como elementos válidos. Si se quieren evitar, es preferible usar las funciones definidas aquí .
Ejercicio
Escriba un programa en Python que obtenga de https://pypi.org datos estructurados de los «Trending projects» y los muestre por pantalla utilizando el siguiente formato:
<nombre-del-paquete>,<versión>,<descripción>,<url>
Se recomienda usar el paquete requests para obtener el código fuente de la página. Hay que tener en cuenta que el listado de paquetes cambia cada pocos segundos, a efectos de comprobación.