Guía Completa de BeautifulSoup en Python: Procesamiento de HTML y XML

BeautifulSoup es una biblioteca en Python diseñada para analizar (parsear) y navegar en documentos HTML y XML. Esta herramienta es extremadamente útil para proyectos de web scraping, ya que te permite extraer información estructurada de sitios web de manera eficiente.


En este post, vamos a explorar qué es BeautifulSoup, cómo usarlo, y todos los parámetros que puedes utilizar para maximizar su funcionalidad.



¿Qué es BeautifulSoup?

BeautifulSoup es una biblioteca que facilita el análisis de documentos HTML y XML, permitiéndote extraer fácilmente datos, navegar por la estructura del documento, modificar elementos, y buscar información dentro de este.


Su mayor ventaja es que abstrae los detalles del análisis del documento, permitiendo a los desarrolladores enfocarse en la extracción de datos de manera más intuitiva.



Cómo Instalar e Importa BeautifulSoup

Para instalar la biblioteca, ejecuta el siguiente comando en tu terminal:


pip install beautifulsoup4


La línea necesaria para importar BeautifulSoup a tu código, es la siguiente:


from bs4 import BeautifulSoup



Creación de un Objeto BeautifulSoup

La forma básica de trabajar con BeautifulSoup es creando un objeto `BeautifulSoup` que representa el documento HTML o XML. Para hacerlo, debes pasar el contenido del documento (generalmente como cadena de texto) a BeautifulSoup junto con el tipo de parser que deseas usar.


Ejemplo básico:


url = "http://ejemplo.com/home/"

html = requests.get(url)


sopa = BeautifulSoup(html, 'html.parser')



Parámetros de `BeautifulSoup`

Cuando creas un objeto `BeautifulSoup`, puedes usar los siguientes parámetros:


1. `markup`: El primer parámetro es el contenido del documento HTML o XML, ya sea como una cadena o como un objeto de tipo `bytes`.


2. `features`: Este parámetro especifica el tipo de parser que deseas usar. BeautifulSoup soporta varios parsers como:

  - `html.parser`: Es el parser más rápido, pero puede tener limitaciones en la precisión de la interpretación de HTML.

  - `lxml`: Un parser más robusto para HTML y XML. Necesita instalar la biblioteca `lxml` (más rápido y exacto que `html.parser`).

  - `xml`: También soportado por `lxml` para XML.

  - `html5lib`: Un parser más lento pero muy preciso, que necesita instalar la biblioteca `html5lib`.


  Ejemplo:


  sopa = BeautifulSoup(html, 'lxml')



3. `builder`: Este parámetro te permite pasar un constructor de árboles personalizado si estás trabajando con un formato que no es HTML o XML. Es un caso avanzado que raramente se usa.


4. `parse_only`: Si solo quieres analizar una parte del documento, puedes usar este parámetro con un `SoupStrainer` para filtrar el análisis y ahorrar tiempo.


  Ejemplo:


  from bs4 import SoupStrainer


  solo_etiquetas_a = SoupStrainer("a")

  sopa = BeautifulSoup(html, 'html.parser', parse_only=solo_etiquetas_a)


  En este caso, BeautifulSoup solo analizará las etiquetas `<a>` y no el resto del documento.


5. `from_encoding`: Si el documento HTML tiene un problema de codificación y no lo detecta automáticamente, puedes especificar la codificación manualmente usando este parámetro.


  Ejemplo:


  sopa = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')


6. `exclude_encodings`: Te permite excluir ciertas codificaciones si sabes que ciertas codificaciones no deben ser utilizadas durante el análisis.


7. `element_classes`: Si necesitas trabajar con un tipo de elemento personalizado que extiende las clases nativas de BeautifulSoup, puedes pasar una lista de clases de elementos a este parámetro.



Navegación en BeautifulSoup

Una vez que tienes el objeto `BeautifulSoup`, puedes navegar en la estructura del documento de varias maneras.


Acceso a Elementos Básicos

1. Acceder a una Etiqueta:

  Puedes acceder a una etiqueta HTML directamente por su nombre.


  print(sopa.title) 

  print(sopa.title.string)



2. Buscar por Atributos:

  Puedes acceder a los atributos de una etiqueta como si fuera un diccionario.


  etiqueta_a = sopa.find('a')

  print(etiqueta_a['href'])



3. Acceder al Contenido de Texto:

  Puedes obtener el contenido de una etiqueta con `.text` o `.string`.


  print(sopa.p.text) 



Búsqueda de Elementos


`find()` y `find_all()` son las funciones principales para buscar elementos en el documento.


1. `find()`:

  Devuelve la primera etiqueta que coincide con los criterios de búsqueda.


  primer_enlace = sopa.find('a')

  print(primer_enlace) 



2. `find_all()`:

  Devuelve una lista de todas las etiquetas que coinciden con los criterios de búsqueda.


  todos_los_enlaces = sopa.find_all('a')

  for enlace in todos_los_enlaces:

    print(enlace['href'])



Parámetros en `find()` y `find_all()`

1. `name`: Especifica el nombre de la etiqueta HTML que quieres encontrar (como `a`, `p`, `div`).


2. `attrs`: Te permite buscar etiquetas que tengan ciertos atributos.


  enlace = sopa.find('a', attrs={'href': 'http://ejemplo.com/link2'})


3. `string`: Puedes buscar etiquetas que contengan un texto específico.


  etiqueta_con_string = sopa.find('p', string='Este es un párrafo de ejemplo')


4. `recursive`: Indica si la búsqueda debe ser recursiva a través de todas las subetiquetas. Por defecto, es `True`.


5. `limit`: Con `find_all()`, puedes limitar el número de resultados que se devuelven.


  primeros_dos_enlaces = sopa.find_all('a', limit=2)



Modificación del Árbol

Una vez que encuentras los elementos que necesitas, también puedes modificarlos. Puedes agregar, eliminar o cambiar el contenido de una etiqueta.


1. Modificar el Texto:

  sopa.title.string = "Nuevo título"

  print(sopa.title)


2. Agregar una Nueva Etiqueta:

  nueva_etiqueta = sopa.new_tag('p')

  nueva_etiqueta.string = "Nuevo párrafo"

  sopa.body.append(nueva_etiqueta)


3. Eliminar Etiquetas:

  for enlace in sopa.find_all('a'):

    enlace.decompose()



Extracción de Datos y Formateo

Puedes extraer el contenido del documento y formatearlo de manera que sea fácil de manejar en tu aplicación.


1. Extraer el Texto de una Etiqueta:

  print(sopa.get_text())


2. Formatear el HTML:

  Puedes formatear el HTML analizado con el método `prettify()` para hacerlo más legible.


  print(sopa.prettify())



Hay mucho más contenido sobre Python para ti

Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn

 

Puedes descargar GRATIS mi manual completo en pdf de Python Rápido


image


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.