Recursos
Resumen
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 Request soup = 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 documento titulo = 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 curso courses_links = soup.select('.card_link') # Extraer el atributo href con una list comprehension courses = [c['href'] for c in courses_links] # Imprimir cada URL encontrada for 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.