Parseo de HTML en Node.js: bibliotecas Cheerio, JSDOM y Puppeteer

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): guía completa



El parseo de HTML es una de las habilidades clave del desarrollador web moderno. En el ecosistema de Node.js existen varias herramientas potentes para extraer datos de documentos HTML. En este artículo analizaremos en detalle tres bibliotecas principales: Cheerio, JSDOM y Puppeteer, y aprenderemos a elegir la herramienta adecuada para cada tarea específica.



1. Cheerio — un analizador ligero y rápido



Cheerio es una biblioteca rápida, flexible y ligera que implementa un subconjunto de jQuery para el lado del servidor. Es ideal para el parseo de HTML estático cuando no se requiere la ejecución de JavaScript en la página.



Instalación

npm install cheerio


Ejemplo de uso

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

async function parseHTML() { const response = await axios.get('https://example.com'); const $ = cheerio.load(response.data); // Extraer el título de la página const title = $('title').text(); console.log('Título:', title); // Obtener todos los enlaces const links = []; $('a').each((i, el) => { links.push($(el).attr('href')); }); console.log('Enlaces:', links); // Parseo de una tabla const tableData = []; $('table tr').each((i, row) => { const cells = []; $(row).find('td, th').each((j, cell) => { cells.push($(cell).text().trim()); }); tableData.push(cells); }); console.log('Datos de la tabla:', tableData);}

parseHTML().catch(console.error);


Ventajas de Cheerio

  • Alto rendimiento: funciona hasta 8 veces más rápido que alternativas similares
  • Sintaxis familiar de jQuery
  • Bajo consumo de memoria
  • Instalación y configuración sencillas


Desventajas

  • No admite contenido dinámico
  • No puede ejecutar JavaScript
  • No es adecuado para aplicaciones SPA


2. JSDOM — implementación completa del DOM



JSDOM emula el entorno del navegador en Node.js, proporcionando una implementación completa del DOM y un analizador de HTML. A diferencia de Cheerio, JSDOM puede ejecutar JavaScript, lo que lo hace adecuado para el parseo de páginas con contenido dinámico.



Instalación

npm install jsdom


Ejemplo de uso

const { JSDOM } = require('jsdom');const axios = require('axios');

async function parseWithJSDOM() { const response = await axios.get('https://example.com'); const dom = new JSDOM(response.data); const document = dom.window.document; // Obtener todos los párrafos const paragraphs = Array.from(document.querySelectorAll('p')) .map(p => p.textContent); console.log('Párrafos:', paragraphs); // Trabajar con atributos const images = Array.from(document.querySelectorAll('img')) .map(img => ({ src: img.getAttribute('src'), alt: img.getAttribute('alt') })); console.log('Imágenes:', images); // Ejecución de scripts (¡con cuidado!) const { window } = new JSDOM(`<body> <script> document.body.innerHTML += '<p>Contenido dinámico</p>'; </script> </body>`, { runScripts: 'dangerously' }); console.log(window.document.body.innerHTML);}

parseWithJSDOM().catch(console.error);


Ventajas de JSDOM

  • Soporte completo de la API del DOM
  • Capacidad de ejecutar JavaScript
  • Soporte de estándares web modernos
  • Compatibilidad con bibliotecas de navegador


Desventajas

  • Más lento en comparación con Cheerio
  • \

Recommendations