Aprende a construir un scraper robusto para sitios de noticias: valida y normaliza vínculos, extrae título y cuerpo de los artículos y prepara un dataset confiable. Verás cómo definir queries en la configuración, aplicar herencia y abstracción en Page Objects y usar programación defensiva con propiedades en Python para datos limpios y útiles.
¿Cómo preparar la configuración con keywords article body y article title?
La base está en el archivo de configuración: agrega las llaves necesarias para localizar el cuerpo y el título del artículo. Se definen como article body y article title y se replican también en el objeto del país. Para el sitio del Universal, se usan los queries ya identificados: para el cuerpo, la clase .Field Name Body; para el título, Pain Content seleccionando el primer elemento H1.
{"queries":{"article body":".Field Name Body","article title":"Pain Content h1"}}
Claves prácticas:
Validar que los vínculos estén en el formato correcto y convertirlos si no lo están.
Mantener los queries en la configuración para cambiar selectores sin tocar la lógica.
Tomar el primer H1 para el título cuando el selector apunte a un contenedor.
¿Cómo organizar el código con herencia en News Page?
Se crea una abstracción común: News Page. Tanto Home Page como Article Page son especializaciones que comparten lógica de navegación y selección. Así, se evita duplicación y se concentra la funcionalidad común en una sola clase.
¿Cómo inicializar con super en Python?
Se define __init__ en la clase base y se invoca con super desde las subclases: es claro y reutilizable.
¿Qué métodos auxiliares se comparten con Article Page?
Los métodos auxiliares select y visit se mueven a la clase base para que ambos tipos de página los utilicen. Home Page conserva solo su propiedad específica article_links.
classNewsPage:defvisit(self, url=None):# Lógica de visita a la URL.passdefselect(self, query):# Retorna una lista de nodos que cumplen el query.return[]classHomePage(NewsPage):@propertydefarticle_links(self):# Retorna los vínculos de artículos desde la portada.return[]
¿Cómo obtener body y title con programación defensiva?
La clase Article Page expone propiedades calculadas: body y title. Se reutiliza select para consultar los queries de la configuración. Se aplica programación defensiva: si no hay resultados, se devuelve un string vacío para mantener el flujo sin errores.
classArticlePage(NewsPage):@propertydefbody(self): result = self.select('article body')return result[0].text if result else''@propertydeftitle(self): result = self.select('article title')return result[0].text if result else''
Beneficios inmediatos:
Propiedades claras: acceso directo a título y cuerpo.
Queries centralizados: cambios rápidos cuando el HTML del sitio varía.
Código robusto: listas vacías y cambios de estructura no rompen el scraper.
¿Qué sigue en el flujo?
Recorrer cada vínculo del home page.
Instanciar Article Page con news_site_uid y url.
Extraer title y body para construir el dataset.
Si algo no quedó claro o quieres ver otro ejemplo de queries o herencia en Page Objects, cuéntalo en los comentarios y seguimos la conversación.