Extracción de datos específicos con Beautiful Soup en Python
Clase 5 de 15 • Curso de Web Scraping con Python
Resumen
¿Alguna vez has querido extraer fácilmente datos específicos de un sitio web? Aprenderás cómo hacerlo usando Beautiful Soup en Python. Podrás obtener información esencial como títulos, precios e imágenes desde páginas web estructuradas rápidamente y guardarlas en formato CSV.
¿Cómo identificar elementos específicos en una página web?
Antes de extraer información con Python, necesitas identificar la estructura HTML donde se encuentra la información clave. Utilizando herramientas de desarrollo del navegador, puedes explorar las etiquetas HTML y clases de los elementos para encontrar exactamente las partes importantes del contenido.
Por ejemplo, en este proyecto se identifica que cada libro del sitio web está encerrado en un elemento llamado artículo: etiqueta article con clase product-pot. Dentro de cada artículo hay detalles como título, imagen, precio y otros.
¿Cómo extraer nombres, precios e imágenes con Beautiful Soup?
Primero obtendrás todos los artículos de productos usando Beautiful Soup con la función select:
products = soup.select('.product-pot')
Luego recorres cada artículo para extraer información concreta:
- Para el título: localizarás la etiqueta h3 dentro del artículo, luego la etiqueta a contenida en ella.
nombre = producto.find('h3').find('a')['title']
- Para el precio: buscas la etiqueta p que tenga la clase price_color y obtienes el texto de dicha etiqueta.
precio = producto.find('p', class_='price_color').get_text()
- Para la imagen: necesitas primero localizar el div con clase image_container, encontrar la etiqueta img y extraer su atributo src.
imagen = producto.find('div', class_='image_container').find('img')['src']
Sin embargo, este atributo es una URL relativa, así que debes añadir la base del URL para obtener la dirección completa:
imagen_url = 'http://BooksToScrape.com/' + imagen
¿Cómo guardar los datos obtenidos en un archivo CSV?
Para guardar los datos recolectados de forma sistemática en CSV, defines una ruta y creas columnas específicas para cada información extraída:
with open("resultados/productos.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(['nombre', 'precio', 'imagen_url'])
writer.writerows(productos)
Esto generará un archivo CSV dentro de la carpeta resultados, estructurado por columnas que contienen cada aspecto esencial del producto que seleccionaste previamente.
¡Te invito a participar en el desafío propuesto: intenta obtener también el número de estrellas de cada libro y si está en stock! Deja tu solución en los comentarios.