Page Object Pattern para web scrapers

Clase 15 de 38Curso de Ingeniería de Datos con Python

Contenido del curso

Web scraping

Pandas

Resumen

Construir un web scraper robusto exige pensar como data engineer: más que scripts, aplicar conceptos de ingeniería de software. La clave está en ocultar las manipulaciones de la web detrás de un objeto que representa la página, usando el page object pattern para aislar selectores y mantener el código estable ante cambios constantes.

¿Qué resuelve el page object pattern en scraping web?

Un sitio web es dinámico y no tienes control sobre su código. Cualquier cambio puede romper tu scraper. Por eso conviene encapsular interacciones en objetos que representan páginas.

  • Aísla los selectores de la lógica de negocio.
  • Reduce el impacto cuando el HTML cambie.
  • Facilita mantener cientos de archivos en producción.
  • Permite hacer el programa más estable y escalable.

¿Por qué la web cambia y tu código no debe romperse?

No tienes acceso al código fuente del sitio (por ejemplo, Platzi). El HTML puede modificarse sin aviso. Si mezclas lógica y selectores, terminas corrigiendo múltiples partes del programa cada vez que algo cambia. Al separar, solo actualizas los selectores en un lugar y sigues trabajando.

¿Qué beneficios obtienes al centralizar queries?

Centralizar todos tus queries en un objeto por página te permite:

  • Localizar errores rápido.
  • Actualizar selectores una sola vez.
  • Reutilizar componentes en múltiples flujos.
  • Evitar código frágil y disperso.

¿Cómo separar selectores y lógica para un scraper mantenible?

La idea es representar cada página con una clase y esconder las manipulaciones específicas detrás de sus métodos y propiedades.

  • Crea una clase por página, por ejemplo, webpage.
  • Define propiedades que calculen valores al accederse, usando @property en Python.
  • Dentro, coloca el sub select y el query para extraer elementos.
  • Mantén la lógica de proceso fuera de estas clases.

¿Cómo usar una clase webpage y @property en Python?

La clase webpage representa una página genérica. Con @property, una propiedad se computa cada vez que se accede a ella. Así, tu clase expone datos listos para usar mientras los selectores viven encapsulados.

  • Propiedades legibles, sin paréntesis al acceder.
  • Cálculo perezoso cuando se necesitan datos.
  • Cambios de selectores sin tocar la lógica externa.

¿Qué pasa si no lo haces así?

El código se vuelve difícil de mantener. Pequeños cambios del sitio te obligan a modificar muchas partes. En producción puedes tener cientos de archivos: el esfuerzo se multiplica.

¿Qué habilidades y keywords clave debes aplicar desde hoy?

Este enfoque combina prácticas de ingeniería de software con tareas de data engineering para scraping.

  • Data engineer: piensa en diseño, no en scripts sueltos.
  • Page object pattern: patrón del mundo de pruebas automatizadas aplicado a scraping.
  • Selectores y queries: separa y centraliza para resiliencia.
  • @property en Python: propiedades computadas al acceder, código limpio.
  • Web dinámica: asume cambio constante y diseña para no romperte.
  • Ciencia de datos e ingeniería de datos: extrae noticias de múltiples sitios y analiza después.

Listo para el siguiente paso: escribir el scraper que obtenga noticias de diferentes sitios y, después, analizarlas con herramientas de datos. ¿Qué dudas tienes sobre separar selectores y lógica en tu scraper? Comparte tus preguntas y experiencias en los comentarios.