Parseo de HTML en Node.js: revisión de las mejores bibliotecas y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Parseo de HTML en JavaScript (Node.js): selección de herramientas para trabajar con páginas web



El parseo de HTML es una de las tareas clave en el desarrollo de web scrapers, analizadores de contenido y pruebas automatizadas. En el ecosistema de Node.js existen varias bibliotecas potentes, cada una con sus fortalezas. En este artículo analizaremos tres herramientas principales: cheerio, jsdom y htmlparser2, y veremos cuándo y cuál es mejor usar.



1. Cheerio — jQuery para el servidor



La biblioteca cheerio es la opción más popular para el parseo de HTML en Node.js. Proporciona una sintaxis familiar similar a jQuery para la navegación y manipulación del árbol DOM. Cheerio no crea un DOM completo del navegador, sino que trabaja con una abstracción ligera, lo que la hace muy rápida.



Características principales:

  • Soporte de selectores CSS (como en jQuery)
  • Parseo rápido sin ejecutar JavaScript
  • Métodos inmutables (no modifican el HTML original)
  • Trabajo con atributos, texto y estructura HTML


Ejemplo de uso:

const cheerio = require('cheerio');const html = '<div class="content"><h1>¡Hola, mundo!</h1><p>Texto del artículo</p></div>';

const $ = cheerio.load(html);const title = $('h1').text();const paragraphs = $('p').map((i, el) => $(el).text()).get();

console.log(title); // "¡Hola, mundo!"console.log(paragraphs); // ["Texto del artículo"]


2. JSDOM — navegador completo en Node.js



Si necesita no solo parsear HTML estático, sino también ejecutar scripts de JavaScript, emular eventos o trabajar con APIs modernas (por ejemplo, fetch, localStorage), entonces jsdom es su opción. Crea un entorno completo de navegador, lo que brinda la máxima compatibilidad, pero requiere más recursos.



Cuándo usar jsdom:

  • Sitios con contenido dinámico (SPA en React/Vue)
  • Necesidad de ejecutar scripts de la página
  • Pruebas de componentes web
  • Trabajo con eventos y operaciones asíncronas


Ejemplo de parseo:

const { JSDOM } = require('jsdom');const html = '<html><body><div id="app">Contenido</div></body></html>';

const dom = new JSDOM(html);const document = dom.window.document;const content = document.getElementById('app').textContent;

console.log(content); // "Contenido"


3. Htmlparser2 — máximo rendimiento



La biblioteca htmlparser2 es un parser de bajo nivel que funciona basado en eventos (enfoque similar a SAX). No crea un árbol DOM, sino que genera eventos al encontrar cada etiqueta, atributo o nodo de texto. Esto la convierte en el parser más rápido de Node.js.



Características:

  • Procesamiento en flujo (se pueden parsear archivos de tamaño gigabyte)
  • Consumo mínimo de memoria
  • Soporte para XML y HTML
  • No tiene métodos integrados para navegación (hay que escribir su propia lógica)


Ejemplo de uso:

const htmlparser2 = require('htmlparser2');const html = '<div class="item">Producto 1</div><div class="item">Producto 2</div>';

const items = [];const parser = new htmlparser2.Parser({ onopentag(name, attribs) { if (name === 'div' && attribs.class === 'item') { this.currentItem = ''; } }, ontext(text) { if (this.currentItem !== undefined) { this.currentItem += text; } }, onclosetag(name) { if (name === 'div' && this.currentItem !== undefined) { items.push(this.currentItem.trim()

Recommendations