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 cheerioEjemplo 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 jsdomEjemplo 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 \
También en la biblioteca
Monitoreo de aplicaciones Kotlin: biblioteca Ktor Metrics y Micrometer
SQLDelight Kotlin: guía completa con ejemplos prácticos
bcrypt en Go: guía completa con ejemplos prácticos
ORM para PHP: comparación de Doctrine, Eloquent y Cycle — ejemplos de código