Contenido del curso

Web scraping

Pandas

¿Cómo trabajar con un documento HTML?

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.