Cómo extraer datos específicos de páginas web con Beautiful Soup

Clase 4 de 15Curso de Web Scraping con Python

Resumen

El web scraping permite extraer información específica de páginas web, y aunque no es necesario ser un experto en desarrollo web, sí es fundamental conocer ciertos aspectos clave como el HTML. A través del lenguaje HTML podemos acceder al contenido web estructurado mediante etiquetas, utilizando el Document Object Model (DOM).

¿Qué es HTML y por qué es importante en el web scraping?

HTML es un lenguaje de etiquetas que define y estructura el contenido visible en una página web. Al realizar peticiones GET, recibimos todo el código HTML, que puede contener enorme cantidad de datos organizados por etiquetas. Algunas etiquetas comunes que veremos son:

  • h1: títulos principales.
  • h2: subtítulos.
  • p: párrafos.
  • div: contenedores genéricos que agrupan contenidos, frecuentemente con clases específicas.

Comprender estas etiquetas facilita encontrar con exactitud la información necesaria para nuestro proyecto.

¿Cómo ayuda Beautiful Soup al web scraping?

Beautiful Soup es una librería útil en Python para convertir código HTML recibido en nuestras peticiones en una estructura manipulable. Con este proceso, llamado parsing, es posible seleccionar fácilmente etiquetas específicas y extraer la información requerida.

Veamos cómo podemos configurar una estructura con Beautiful Soup a partir de una petición:

from bs4 import BeautifulSoup

# Supongamos que response contiene el texto HTML de la petición que hicimos
soup = BeautifulSoup(response.text, 'html.parser')

print(soup)

¿Cómo extraer específicamente el título de una página HTML con Beautiful Soup?

Para extraer información puntual, Beautiful Soup ofrece métodos que acceden directamente a las etiquetas. Por ejemplo, el nombre de la página se almacena típicamente en una etiqueta title. Podemos obtener así ese texto:

head = soup.find('title')
print(head.getText(strip=True))

Con strip=True eliminamos los espacios extra del texto obtenido.

¿Cómo obtener información puntual utilizando clases HTML?

Frecuentemente, necesitaremos acceder a un contenido específico que esté dentro de los contenedores div con determinadas clases. Supongamos que queremos obtener un título específico del contenido:

titulo = soup.find('div', class_='nombre-de-clase')
print(titulo.getText(strip=True))

Es importante especificar correctamente la clase y verificar manualmente el contenedor que contiene exactamente el dato que queremos para asegurar precisión.

¿Has realizado anteriormente web scraping o tienes alguna consulta sobre este método? ¡Compártela en los comentarios!