Cómo hacer scraping web de cualquier página con Node.js y Playwright
El scraping web es una técnica muy útil para obtener información de páginas web de manera automatizada. En este tutorial, te mostraré cómo hacer scraping de cualquier página web usando Node.js y Playwright, y guardar los datos en un archivo JSON para su posterior procesamiento.
¿Por qué usar Playwright?
Playwright es una herramienta potente y moderna para controlar navegadores como Chrome, Firefox, y Safari, entre otros. A diferencia de otras herramientas de scraping, Playwright permite interactuar con páginas web que dependen mucho de JavaScript, lo que la hace perfecta para sitios dinámicos.
Requisitos previos
Para este tutorial, necesitarás lo siguiente:
- Node.js y npm instalados en tu sistema.
- Instalar Playwright.
1. Configurar el entorno
Primero, necesitamos crear un proyecto en Node.js e instalar las dependencias necesarias:
mkdir scraping-web
cd scraping-web
npm init -y
npx playwright install
npm install @playwright/test fs
Esto inicializará un proyecto de Node.js y añadirá las dependencias de Playwright y el módulo fs para trabajar con archivos.
2. Escribir el script de scraping
El siguiente paso es escribir un script que realice el scraping de cualquier página web. Aquí tienes un ejemplo básico:
import { chromium } from '@playwright/test';
import fs from 'fs';
(async () => {
const url = 'https://ejemplo.com'; // Reemplaza con la URL que desees scrapear
// Iniciar navegador y página
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// Navegar a la página
await page.goto(url);
// Esperar a que los elementos de interés se carguen (modifica el selector)
await page.waitForSelector('selector-del-elemento');
// Extraer los datos
const data = await page.$$eval('selector-del-elemento', items =>
items.map(item => {
const title = item.querySelector('selector-titulo')?.innerText || 'Sin título';
const price = item.querySelector('selector-precio')?.innerText || 'Sin precio';
return { title, price };
})
);
// Guardar los datos en un archivo JSON
fs.writeFileSync('data.json', JSON.stringify(data, null, 2), 'utf-8');
console.log('Datos guardados en data.json');
// Cerrar el navegador
await browser.close();
})();
3. Personalizar los selectores
El script es genérico, lo que significa que puedes adaptarlo para cualquier página simplemente cambiando los selectores de los elementos que quieras scrapear. Por ejemplo, si estás scrapeando productos de una tienda online, es probable que los selectores de los títulos y precios sean algo como:
const data = await page.$$eval('.product-card', items =>
items.map(item => {
const title = item.querySelector('.product-title')?.innerText || 'Sin título';
const price = item.querySelector('.product-price')?.innerText || 'Sin precio';
return { title, price };
})
);
Modifica los selectores según la estructura HTML de la página objetivo.
4. Guardar los datos en un archivo JSON
El resultado de la extracción se guarda en un archivo JSON llamado data.json. Este archivo puede ser útil si quieres procesar los datos posteriormente o simplemente mantener un registro de la información scrapeada.
5. Ejecutar el script
Para ejecutar el script, simplemente corre el siguiente comando en la terminal:
node index.mjs
Esto ejecutará el script de scraping y guardará los datos en el archivo data.json.
6. Cuidado con los términos de uso
Es importante tener en cuenta que algunas páginas web prohíben el scraping en sus términos de uso. Asegúrate de revisar las políticas de cada sitio web antes de realizar scraping masivo.
Con este tutorial, has aprendido cómo hacer scraping de cualquier página web utilizando Node.js y Playwright, y cómo guardar los datos en un archivo JSON. Esto te permitirá obtener y analizar información de manera automatizada, abriendo las puertas a una gran cantidad de aplicaciones.