Parsing de HTML em JavaScript (Node.js): Guia Completo
Parsing de HTML é uma das tarefas principais no desenvolvimento de parsers (web scrapers) e automação de coleta de dados. No ecossistema Node.js, existem várias bibliotecas poderosas que permitem extrair informações de documentos HTML. Neste artigo, analisaremos três ferramentas principais: Cheerio, JSDOM e Puppeteer, compararemos suas capacidades e forneceremos exemplos práticos de código.
1. Cheerio — jQuery leve para servidor
Cheerio é a biblioteca mais popular para parsing de HTML em Node.js. Ela implementa a sintaxe do jQuery, mas funciona sem ambiente de navegador, tornando-a rápida e econômica em memória. Cheerio é ideal para páginas HTML estáticas, onde não é necessária a execução de JavaScript.
Instalação
npm install cheerioExemplo 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);
// Extrai o título da página const title = $('h1').text().trim();
// Coleta todos os links 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));Quando escolher Cheerio:
- Páginas estáticas sem conteúdo dinâmico
- Altos requisitos de desempenho
- Sintaxe simples do jQuery
- Não há necessidade de renderização de JavaScript
2. JSDOM — implementação completa do DOM
JSDOM emula um ambiente de navegador, criando um modelo DOM completo. Ao contrário do Cheerio, o JSDOM suporta a execução de JavaScript, permitindo analisar páginas cujo conteúdo é gerado por scripts. No entanto, isso tem um custo em funcionalidade — a biblioteca consome mais recursos.
Instalação
npm install jsdomExemplo de uso
const { JSDOM } = require('jsdom');
async function parseDynamicPage(html) { const dom = new JSDOM(html, { runScripts: 'dangerously', resources: 'usable' });
const document = dom.window.document;
// Aguarda a execução dos 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;}
// Exemplo com passagem de HTMLconst html = `<html><body><div class="product-item">...</div></body></html>`;parseDynamicPage(html).then(data => console.log(data));Quando escolher JSDOM:
- Páginas com conteúdo dinâmico (AJAX, React, Vue)
- Necessidade de trabalhar com eventos DOM
- Testes de aplicações web
- Extração de dados de SPAs (Single Page Application)
3. Puppeteer — navegador controlado por código
Puppeteer é um navegador headless completo (Chrome/Chromium) com controle programático. Ele executa JavaScript, carrega recursos, gerencia cookies e sessões. Puppeteer é a ferramenta mais poderosa, mas também a mais pesada em termos de recursos.
Instalação
npm install puppeteerExemplo de uso
const puppeteer = require('puppeteer');
async function parseWithBrowser(url) { const browser = await puppeteer.launch({ headless: true }); const page = a