scraping

  • Automatizacion y Build
  • Testing
  • Data Science
  • Scraping a sitios web
  • CICD
  • E2E - End to End Testing
  • Playwright
  • cookies y sesiones

    Herramientas y Librerías

  • Automatización y Build
    Tareas de scraping a menudo requieren integración con pipelines de automatización y herramientas de build para programar ejecuciones periódicas o integrarse con tests. Automatizacion y Build

  • Testing de Scraping
    Validar que los datos extraídos son correctos y que los selectores no se rompen con cambios en el sitio web. Testing
  • Data Science
    Los datos extraídos suelen procesarse y analizarse usando técnicas de data science para obtener insights. Data Science

  • Scraping a sitios web
    Extracción de información estructurada de páginas web, tanto estáticas como dinámicas. Scraping a sitios web
    • Manejo de cookies y sesiones para login.
    • Respeto a robots.txt y límites de requests.
  • Octoparse
    Herramienta de scraping visual con pricing según plan: Precio | Octoparse

  • Integraciones y librerías
    • Cheerio (npm): librería para manipulación de HTML tipo jQuery en Node.js. cherio - npm
    • Playwright / Puppeteer: control de navegadores para scraping dinámico y pruebas.
    • APIs para extracción directa cuando el sitio las ofrece.

Casos de uso

  • Extracción de listas de productos de e-commerce.
  • Monitoreo de precios y disponibilidad.
  • Obtención de datos de noticias o blogs para análisis de tendencias.
  • Descarga masiva de información pública de sitios educativos o gubernamentales.

Consideraciones técnicas

  • Manejo de cookies y autenticación
    Para sitios que requieren login, mantener sesiones activas mediante cookies o tokens.
  • Respeto a la ética y legalidad
    No sobrecargar servidores y respetar términos de uso del sitio web.
  • Optimización y escalabilidad
    • Uso de colas y tareas asíncronas.
    • Manejo de proxies y rotación de IP para scraping a gran escala.

Ejemplos de código

Node.js + Cheerio

const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeSite(url) {
	try {
		const { data } = await axios.get(url);
		const $ = cheerio.load(data);
		const items = [];
		$('selector').each((i, el) => {
			items.push($(el).text().trim());
		});
		return items;
	} catch (error) {
		console.error(error);
	}
}

scrapeSite('https://example.com').then(console.log);

`

Playwright - Login y extracción

const { chromium } = require('playwright');

(async () => {
	const browser = await chromium.launch();
	const page = await browser.newPage();

	await page.goto('https://example.com/login');
	await page.fill('#username', 'usuario');
	await page.fill('#password', 'contraseña');
	await page.click('#loginButton');
	await page.waitForSelector('#dashboard');

	const data = await page.$$eval('.item', elements => elements.map(el => el.textContent.trim()));
	console.log(data);

	await browser.close();
})();

Cookies e Integraciones en Web Scraping

Cookies y Manejo de Sesiones

  • Qué son las cookies
    Archivos pequeños que los sitios web almacenan en el navegador del usuario para mantener información de sesión, preferencias, tracking y autenticación.

  • Importancia en Web Scraping
    Cookies permiten que el scraper acceda a contenido que requiere login o sesiones persistentes:
    • Mantener una sesión activa entre múltiples requests.
    • Evitar bloqueos por autenticación al acceder a páginas privadas.
    • Gestionar preferencias de usuario, idioma o región.
  • Tipos de cookies relevantes
    • Session Cookies: expiran al cerrar el navegador; necesarias para mantener sesiones de login temporales.
    • Persistent Cookies: duran más tiempo y se usan para recordar preferencias o autenticación prolongada.
    • Secure / HttpOnly Cookies: requieren manejo cuidadoso, especialmente al usar requests programáticos.
  • Manejo técnico en scraping
    • Librerías HTTP como axios o requests permiten enviar cookies manualmente.
    • Automatización con Playwright o Puppeteer captura cookies directamente del navegador y las reutiliza.
    • Ejemplo con Node.js + Axios:
const axios = require('axios');

const cookies = 'sessionid=abc123; othercookie=value';
axios.get('https://example.com/private', {
	headers: { Cookie: cookies }
}).then(res => console.log(res.data));

`

Integraciones y su Relación con Web Scraping

  • Qué son integraciones
    Conexión de sistemas externos, APIs o herramientas de terceros para automatizar flujos de trabajo, análisis o almacenamiento de datos.
  • Tipos de integraciones frecuentes en scraping
    • Bases de datos: guardar datos extraídos directamente en MySQL, PostgreSQL, MongoDB.
    • ETL y pipelines: integración con Airflow, Prefect o n8n para programar y procesar datos automáticamente.
    • Servicios de análisis: enviar datos a plataformas de BI o Data Science para análisis en tiempo real.
    • Herramientas de testing y CI/CD: como Playwright o E2E - End to End Testing para validar que scraping funciona tras cambios en el sitio.
  • Relación entre cookies y integraciones
    • Integraciones permiten que los scrapers reutilicen cookies y sesiones en distintos entornos o pipelines.
    • Ejemplo: un scraper extrae datos de un portal privado usando cookies y los envía automáticamente a un dashboard de BI.
    • Manejo centralizado de cookies en pipelines facilita escalabilidad y evita problemas de expiración de sesión.

Casos de Uso Combinados

  • Scraper que accede a un sitio de e-commerce con login, usando cookies de sesión, y almacena productos y precios en una base de datos.
  • Automatización de scraping de reportes privados, integrando extracción de datos, limpieza y envío a un servicio de análisis.
  • Validación periódica de contenidos de portales internos corporativos mediante scrapers con cookies persistentes y pipelines de notificación.

Ejemplo con Playwright y Pipeline

const { chromium } = require('playwright');
const { saveToDatabase } = require('./db');

(async () => {
	const browser = await chromium.launch();
	const page = await browser.newPage();

	await page.goto('https://example.com/login');
	await page.fill('#username', 'usuario');
	await page.fill('#password', 'contraseña');
	await page.click('#loginButton');
	await page.waitForSelector('#dashboard');

	// Obtener cookies
	const cookies = await page.context().cookies();
	// Reutilizar cookies en otros requests o scrapers
	await saveToDatabase(cookies);

	const data = await page.$$eval('.item', els => els.map(el => el.textContent.trim()));
	await saveToDatabase(data);

	await browser.close();
})();