1. Introducción a los métodos de extracción de texto
Hoy vamos a aprender a extraer datos textuales valiosos y
atributos de elementos HTML. Guarda tu machete, porque con
BeautifulSoup
trabajar con código es como
caminar por un jardín en otoño, donde las manzanas parecen
pedir ser recogidas. ¿Listo para cosechar los frutos de tu aprendizaje?
¡Entonces empecemos!
Los métodos de extracción de texto de elementos HTML están en primer lugar en nuestra lista. Antes de comenzar a extraer texto, carguemos la página.
import requests
from bs4 import BeautifulSoup
# Cargamos el código HTML de la página
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
Ahora tenemos el objeto soup
, que contiene
la estructura jerárquica de nuestro documento HTML. Vamos a
extraer texto de algún elemento, por ejemplo, un encabezado.
El método .text
y get_text()
La propiedad .text
y su análogo - el método
get_text()
nos permiten obtener el contenido
textual de un elemento (y todos sus elementos anidados).
# Extraemos texto del primer encabezado h1 encontrado
h1_tag = soup.find('h1')
print(h1_tag.text) # o h1_tag.get_text()
Inténtalo tú mismo: encuentra otros elementos usando los métodos de búsqueda que estudiamos en lecciones anteriores y extrae texto de ellos. ¡Te sorprenderá cuánta información puedes obtener!
2. Extracción de valores de atributos
El texto está bien, pero a veces los datos importantes están ocultos en atributos, como pasaportes en bolsillos. Imagina que necesitas saber la dirección de un enlace o conseguir la URL de una imagen (y no me preguntes por qué podría necesitarse esto; quizás quieras recopilar una colección de fotos de gatitos).
Extrayendo valores de atributos
Supongamos que tenemos un elemento de enlace
<a
href="https://example.com">Example</a>
. ¿Cómo obtenemos el valor
de href
? Es sencillo.
# Extraemos el enlace
a_tag = soup.find('a')
link = a_tag['href']
print("Enlace:", link)
Este código extrajo el valor del atributo href
. Cualquier
otro atributo útil se puede extraer de manera similar.
Intentando extraer una imagen
Extraer la URL de una imagen puede ser igual de simple.
Consideremos el caso de
<img src="image.jpg" alt="Gatito">
.
# Extraemos la URL de la imagen
img_tag = soup.find('img')
image_url = img_tag['src']
print("URL de la imagen:", image_url)
La belleza del trabajo con BeautifulSoup
es
que facilita la búsqueda y extracción de datos sin
obligarnos a pensar demasiado en cómo funciona la estructura
de HTML.
3. Ejemplos de extracción de texto y atributos
Es hora de pasar a ejemplos. Veamos una tarea un poco más
compleja: extraer todos los enlaces de la página, junto con
el texto dentro de las etiquetas <a>
.
Ejemplo: extracción de todos los enlaces con texto
# Encontramos todas las etiquetas a
a_tags = soup.find_all('a')
# Mostramos el enlace y el texto
for a_tag in a_tags:
link = a_tag['href']
text = a_tag.get_text()
print(f"Texto: {text}, Enlace: {link}")
Como puedes ver, el método find_all
encuentra
cómodamente todos los elementos que cumplen con las
condiciones de búsqueda, y el bucle for
permite iterar sobre cada uno de ellos.
4. Manejo de errores
No olvides manejar los errores. A veces, la estructura HTML puede no ser como esperabas, o un elemento puede no tener el atributo esperado. Asegúrate de que tu código no "colapse" en estos casos.
# Ejemplo de manejo de errores al extraer un atributo
try:
link = a_tag['href']
except KeyError:
link = None
print("¡Atributo href no encontrado!")
Esto hará que el script sea más resistente y no se detenga debido a un error inesperado.
5. Aplicación real
En 2019, un emprendedor ruso compartió una historia sobre cómo su empresa, especializada en scraping de datos, alcanzó un volumen de negocios de 20 millones de rublos al año. Señaló que la recopilación automatizada de información no limita la competencia, sino que ayuda a las empresas a adaptarse al mercado.
Por ejemplo, uno de los clientes encargó un scraper para recolectar a diario el inventario de un proveedor, lo que permitió actualizar rápidamente el catálogo y los precios en su propia tienda en línea. El emprendedor también destacó que, a pesar de los intentos de algunos sitios de dificultar el scraping, las tecnologías modernas permiten sortear estos obstáculos de manera efectiva, brindando a las empresas acceso a los datos necesarios para tomar decisiones estratégicas.
GO TO FULL VERSION