Python BeautifulSoup Navegando el árbol de lado

En este artículo, veremos cómo navegar lateralmente por el árbol de análisis de beautifulsoup. Navegar de lado significa que las etiquetas están en el mismo nivel. Vea el siguiente ejemplo para tener una mejor idea.

<a>
<b></b>
<c></c>
</a>

En el ejemplo anterior, las etiquetas <b> y <c> están al mismo nivel.

Instalación de Módulos Requeridos:

bs4: Necesitamos instalar manualmente la biblioteca BeautifulSoup en nuestras máquinas, ya que no se proporciona de forma predeterminada en la configuración del lenguaje Python. Así que vamos a instalarlo ejecutando el siguiente comando en nuestros sistemas:

pip install bs4

lxml: lxml es un vínculo maduro entre las bibliotecas libxml2 y libxlst de Python, con la ayuda de la API de ElementTree, proporciona un acceso seguro y conveniente a esas bibliotecas.

pip install lxml 

Entendamos con la implementación:

Prettify(): la función Prettify() en BeautifulSoup nos permite observar cómo se anidan las etiquetas en el documento.

Sintaxis: (Variable BeautifulSoup).prettify()

Ejemplo :

Python3

import bs4
  
  
sibling_soup = bs4.BeautifulSoup("<a><b>Welcome to Geekforgeeks</b>\
<c>Hello geeks</c></b></a>", 'html.parser')
print(sibling_soup.prettify())

Producción:

<a>
 <b>
  Welcome to Geekforgeeks
 </b>
 <c>
  Hello geeks
 </c>
</a>

Navegando de lado

Podemos navegar lateralmente en un documento usando .next_sibling y .previous_sibling de BeautifulSoup en Python, estas dos funciones en python nos permiten navegar entre etiquetas que están en el mismo nivel del árbol.

Veamos mejor el concepto a través de un ejemplo probado:

Considere un documento de muestra:

Python3

# For importing BeautifulSoup
import bs4
  
  
# initiating variable of BeautifulSoup
sibling_of_soup = bs4.BeautifulSoup("<a><b>CPPSecrets</b><c><strong>\
C++ Python Professional HandBook Guide</strong></b></a>", 'lxml')  
  
# To print contents in the initiated BeautifulSoup
print(sibling_of_soup.prettify())

Producción:

En el código anterior, podemos notar claramente que las etiquetas <b> y <c> están en el mismo nivel y también son elementos secundarios de la misma etiqueta, por lo tanto, podemos clasificarlos como hermanos.

Ahora, podemos navegar entre las etiquetas hermanas <b> y <c> ya que ambas son hermanas usando:

  • .proximo hermano()
  • .anterior_hermano:

1. Navegando usando .next_sibling:

Python3

import bs4
  
  
sibling_of_soup = bs4.BeautifulSoup("<a><b>CPPSecrets</b><c><strong>\
C++ Python Professional HandBook Guide</strong></b></a>",'lxml')
  
# printing contents in BeautifulSoup Variable
print(sibling_of_soup.b.next_sibling)

Producción:

En el código anterior, nos da el siguiente resultado, es decir, el elemento en la etiqueta c como el siguiente hermano de la etiqueta b es c, por lo tanto, el elemento en la etiqueta c será navegado e impreso.

Si escribimos una declaración de impresión para la etiqueta c como:

Python3

import bs4
  
  
sibling_of_soup = bs4.BeautifulSoup("<a><b>CPPSecrets</b><c><strong>\
C++ Python Professional HandBook Guide</strong></b></a>",'lxml')
  
# Implementing Navigation on sibling
print(sibling_of_soup.c.next_sibling)

Producción:

En el código anterior, el resultado generado es «Ninguno» ya que no hay una etiqueta presente después de c.

2. Navegación usando .previous_sibling:

Python3

import bs4
  
  
sibling_of_soup = bs4.BeautifulSoup("<a><b>CPPSecrets</b><c><strong>\
C++ Python Professional
                                      
print(sibling_of_soup.c.previous_sibling)
print(sibling_of_soup.b.previous_sibling)

Producción:

En el código, .previous_sibling en la etiqueta c, genera un elemento en la etiqueta b ya que la etiqueta del hermano anterior es b, pero si implementamos .previous_sibling en la etiqueta b, genera el resultado «Ninguno» ya que no hay ningún hermano que haya ocurrido anterior a la etiqueta b.

Publicación traducida automáticamente

Artículo escrito por ravi.geek24 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *