Domina cómo transformar un HTML en datos útiles con Beautiful Soup y selectores CSS. Con una base en la librería Request, verás cómo pasar de un string enorme a un árbol de nodos manipulable, ejecutar queries precisas y extraer título, meta description y enlaces de cursos en Jupyter Notebook.
¿Qué resuelve Beautiful Soup al parsear HTML?
El HTML crudo llega como un string grande. Difícil de manipular directamente.
Beautiful Soup lo convierte en un árbol de nodos para hacer queries claras.
Usa selectores CSS para localizar etiquetas y atributos con precisión.
Permite elegir el parser: aquí se usa HTML Parser. También puede manejar XML.
Ventaja: extracción rápida y legible. Desventaja: exige conocer la estructura del sitio para seleccionar bien.
¿Cómo importar bs4 y crear el parser en Jupyter Notebook?
Empezamos en Jupyter Notebook importando el paquete y construyendo el objeto principal con el namespace de bs4.
import bs4
# response_text proviene de la solicitud previa con Requestsoup = bs4.BeautifulSoup(response_text,'html.parser')
Se importa con: import bs4.
Se inicializa la clase BeautifulSoup con el HTML crudo y el tipo de parser.
Desde aquí, ya puedes ejecutar queries sobre el documento.
¿Cómo extraer título, meta description y enlaces con selectores CSS?
La clave es usar soup.select con selectores CSS, recordar que devuelve una lista, e indexar cuando se necesite el primer elemento.
¿Cómo obtener el título y la meta description?
# Título del documentotitulo = soup.title.text
# Meta description: seleccionar etiqueta y luego el atributo 'content'description = soup.select('meta[name="description"]')[0]['content']
soup.title.text devuelve el título: Platzi: cursos online profesionales de tecnología.
soup.select retorna una lista; por eso se usa [0] antes de acceder a ['content'].
¿Cómo listar enlaces de cursos con la clase adecuada?
Antes, se inspecciona la página con el inspector del navegador: botón secundario, opción Inspect. Se identifican clases como card_info para ubicar las URLs y se usan selectores de clase como .card_link para extraerlas.
# Seleccionar todos los nodos con la clase de enlace de cursocourses_links = soup.select('.card_link')# Extraer el atributo href con una list comprehensioncourses =[c['href']for c in courses_links]# Imprimir cada URL encontradafor curso in courses:print(curso)
Se usa .card_link como selector CSS de clase.
Con list comprehension se toma el atributo href de cada nodo.
Resultado: listado de todas las URLs de cursos encontradas.
¿Qué limitaciones debes considerar al hacer scraping?
Necesitas un conocimiento íntimo de la estructura del sitio para que los selectores sean correctos.
Un cambio en clases o etiquetas puede romper los queries existentes.
Próximo paso anunciado: uso de page objects para estructurar mejor el web scraper.
¿Tienes dudas o quieres compartir tus propios selectores CSS y resultados con Beautiful Soup? Escribe en los comentarios y cuéntanos qué lograste extraer.