CAPSOLVER
Blog
Web Scraping con Puppeteer: Detectar cambios en sitios web y tomar capturas de pantalla

Web Scraping con Puppeteer: Detección de cambios en el sitio web y captura de pantallas

Logo of CapSolver

Anh Tuan

Data Science Expert

07-Oct-2024

El raspado web se ha convertido en una herramienta esencial para automatizar la recopilación de datos y monitorear los sitios web en busca de cambios. En esta publicación de blog, exploraremos cómo usar Puppeteer, una biblioteca de Node.js, para el raspado web, detectar cambios en un sitio web y tomar capturas de pantalla de estos cambios.

¿Qué es Puppeteer?

Puppeteer es una biblioteca de Node.js que proporciona una API de alto nivel para controlar Chrome o Chromium sin cabeza a través del protocolo DevTools. Se puede utilizar para raspar la web, pruebas automatizadas o incluso generar capturas de pantalla y archivos PDF de páginas web.

Prerrequisitos

Antes de comenzar, asegúrese de tener instalado lo siguiente:

Puede instalar Puppeteer ejecutando el siguiente comando en su terminal:

bash Copy
npm install puppeteer

Raspado web básico con Puppeteer

Para comenzar, creemos un raspador web básico que navegue a un sitio web y extraiga el contenido de texto.

javascript Copy
const puppeteer = require('puppeteer');

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

    // Navegar al sitio web
    await page.goto('https://example.com');

    // Extraer el contenido de texto
    const content = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    console.log('Contenido de la página:', content);

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

Este script abre un navegador sin cabeza, navega a example.com y extrae el texto del elemento <h1>. Puede reemplazar la URL con el sitio web que desea raspar y ajustar el selector para que coincida con el elemento que le interesa.

Tomar capturas de pantalla con Puppeteer

Puppeteer le permite tomar capturas de pantalla de páginas web fácilmente. Puede capturar capturas de pantalla de página completa o áreas específicas de la página.

Aquí se muestra cómo tomar una captura de pantalla de página completa:

javascript Copy
const puppeteer = require('puppeteer');

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

    // Navegar al sitio web
    await page.goto('https://example.com');

    // Tomar una captura de pantalla de página completa
    await page.screenshot({ path: 'screenshot.png', fullPage: true });

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

Este script guarda una captura de pantalla de toda la página como screenshot.png. Puede modificar la ruta para especificar un nombre de archivo o ubicación diferente.

Detectar cambios en el sitio web

Monitorear un sitio web en busca de cambios es una característica útil en el raspado web. Puede lograr esto revisando repetidamente el contenido del sitio web y comparándolo con una versión guardada previamente.

Aquí hay un ejemplo de detección de cambios de texto y tomar una captura de pantalla si el contenido cambia:

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');

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

    // Navegar al sitio web
    await page.goto('https://example.com');

    // Extraer el contenido de texto
    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    // Verificar si existe el contenido anterior
    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    // Comparar el contenido actual con el contenido anterior
    if (currentContent !== previousContent) {
        console.log('¡El contenido ha cambiado!');

        // Guardar el nuevo contenido
        fs.writeFileSync(previousContentPath, currentContent);

        // Tomar una captura de pantalla del cambio
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('¡Captura de pantalla guardada!');
    } else {
        console.log('No se detectaron cambios.');
    }

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

En este ejemplo:

  • El script extrae el contenido del elemento <h1>.
  • Compara el contenido actual con una versión guardada previamente (previous-content.txt).
  • Si se detecta un cambio, toma una captura de pantalla y la guarda con una marca de tiempo en el nombre del archivo, asegurando que cada captura de pantalla sea única.
  • El nuevo contenido se guarda en previous-content.txt para futuras comparaciones.

Programar el raspador para que se ejecute periódicamente

Puede usar Node.js para programar este script para que se ejecute a intervalos usando el paquete node-cron.

Primero, instala node-cron:

bash Copy
npm install node-cron

Ahora, modifique su script para que se ejecute a un intervalo establecido (por ejemplo, cada 5 minutos):

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');
const cron = require('node-cron');

cron.schedule('*/5 * * * *', async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto('https://example.com');

    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    if (currentContent !== previousContent) {
        console.log('¡El contenido ha cambiado!');
        fs.writeFileSync(previousContentPath, currentContent);
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('¡Captura de pantalla guardada!');
    } else {
        console.log('No se detectaron cambios.');
    }

    await browser.close();
});

Este script se ejecutará cada 5 minutos (*/5 * * * *) y verificará si hay cambios en el sitio web. Si detecta un cambio, tomará una captura de pantalla y registrará la actualización.

Código de bonificación

Reclame su Código de bonificación para las mejores soluciones de captcha en CapSolver: scrape. Después de canjearlo, obtendrá un bono adicional del 5% después de cada recarga, ilimitadas veces.

Conclusión

Puppeteer es una herramienta poderosa para el raspado web y la automatización de tareas del navegador. En esta publicación, demostramos cómo usar Puppeteer para raspado web básico, detección de cambios en el sitio web y captura de capturas de pantalla de estos cambios. Con estas técnicas, puede monitorear sitios web y realizar un seguimiento de las actualizaciones automáticamente. Asegúrese de consultar las políticas de raspado web para evitar violar los términos de servicio.

Copy

Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse