Parseo de HTML en JavaScript (Node.js): Guía completa
El parseo de HTML es una de las tareas clave al desarrollar parsers (web scrapers) y automatizar la recolección de datos. En el ecosistema de Node.js existen varias bibliotecas potentes que permiten extraer información de documentos HTML. En este artículo analizaremos tres herramientas principales: Cheerio, JSDOM y Puppeteer, compararemos sus capacidades y proporcionaremos ejemplos prácticos de código.
1. Cheerio — jQuery ligero para el servidor
Cheerio es la biblioteca más popular para el parseo de HTML en Node.js. Implementa la sintaxis de jQuery, pero funciona sin un entorno de navegador, lo que la hace rápida y eficiente en memoria. Cheerio es ideal para páginas HTML estáticas donde no se requiere la ejecución de JavaScript.
Instalación
npm install cheerioEjemplo de uso
const cheerio = require('cheerio');const axios = require('axios');
async function parsePage(url) { const response = await axios.get(url); const $ = cheerio.load(response.data);
// Extraemos el título de la página const title = $('h1').text().trim();
// Recopilamos todos los enlaces const links = []; $('a').each((i, el) => { const href = $(el).attr('href'); if (href) links.push(href); });
return { title, links };}
// UsoparsePage('https://example.com').then(data => console.log(data));Cuándo elegir Cheerio:
- Páginas estáticas sin contenido dinámico
- Altos requisitos de rendimiento
- Sintaxis simple de jQuery
- No es necesario el renderizado de JavaScript
2. JSDOM — implementación DOM completa
JSDOM emula un entorno de navegador, creando un modelo DOM completo. A diferencia de Cheerio, JSDOM admite la ejecución de JavaScript, lo que permite analizar páginas cuyo contenido es generado por scripts. Sin embargo, esto tiene un costo en funcionalidad: la biblioteca consume más recursos.
Instalación
npm install jsdomEjemplo de uso
const { JSDOM } = require('jsdom');
async function parseDynamicPage(html) { const dom = new JSDOM(html, { runScripts: 'dangerously', resources: 'usable' });
const document = dom.window.document;
// Esperamos la ejecución de los scripts await new Promise(resolve => setTimeout(resolve, 2000));
const items = []; document.querySelectorAll('.product-item').forEach(el => { items.push({ name: el.querySelector('.product-name')?.textContent, price: el.querySelector('.price')?.textContent }); });
return items;}
// Ejemplo con transmisión de HTMLconst html = `<html><body><div class="product-item">...</div></body></html>`;parseDynamicPage(html).then(data => console.log(data));Cuándo elegir JSDOM:
- Páginas con contenido dinámico (AJAX, React, Vue)
- Necesidad de trabajar con eventos del DOM
- Pruebas de aplicaciones web
- Extracción de datos de SPA (Single Page Application)
3. Puppeteer — navegador controlado por código
Puppeteer es un navegador headless completo (Chrome/Chromium) con control programático. Ejecuta JavaScript, carga recursos, maneja cookies y sesiones. Puppeteer es la herramienta más potente, pero también la más pesada en recursos.
Instalación
npm install puppeteerEjemplo de uso
const puppeteer = require('puppeteer');
async function parseWithBrowser(url) { const browser = await puppeteer.launch({ headless: true }); const page = a También en la biblioteca
Jackson para Java: guía completa con ejemplos
Event Bus y el patrón Observer en Swift (iOS/macOS)
Trabajo con Excel en Swift: Guía completa de bibliotecas y herramientas para iOS/macOS
Biblioteca estándar de Java: revisión completa y ejemplos de código