Parsing de HTML em JavaScript (Node.js): escolha da ferramenta para trabalhar com páginas web
O parsing de HTML é uma das tarefas principais no desenvolvimento de web scrapers, analisadores de conteúdo e testes automatizados. No ecossistema Node.js, existem várias bibliotecas poderosas, cada uma com seus pontos fortes. Neste artigo, vamos analisar três ferramentas principais: cheerio, jsdom e htmlparser2, e discutir quando e qual delas é melhor usar.
1. Cheerio — jQuery para o servidor
A biblioteca cheerio é a escolha mais popular para parsing de HTML em Node.js. Ela fornece uma sintaxe familiar semelhante ao jQuery para navegação e manipulação da árvore DOM. O Cheerio não cria um DOM completo do navegador, mas trabalha com uma abstração leve, o que a torna muito rápida.
Principais recursos:
- Suporte a seletores CSS (como no jQuery)
- Parsing rápido sem execução de JavaScript
- Métodos imutáveis (não alteram o HTML original)
- Trabalho com atributos, texto e estrutura HTML
Exemplo de uso:
const cheerio = require('cheerio');const html = '<div class="content"><h1>Olá, mundo!</h1><p>Texto do artigo</p></div>';
const $ = cheerio.load(html);const title = $('h1').text();const paragraphs = $('p').map((i, el) => $(el).text()).get();
console.log(title); // "Olá, mundo!"console.log(paragraphs); // ["Texto do artigo"]2. JSDOM — navegador completo no Node.js
Se você precisa não apenas fazer parsing de HTML estático, mas também executar scripts JavaScript, emular eventos ou trabalhar com APIs modernas (como fetch, localStorage), então jsdom é a sua escolha. Ele cria um ambiente completo de navegador, oferecendo máxima compatibilidade, mas exigindo mais recursos.
Quando usar jsdom:
- Sites com conteúdo dinâmico (SPA em React/Vue)
- Necessidade de executar scripts da página
- Testes de componentes web
- Trabalho com eventos e operações assíncronas
Exemplo de parsing:
const { JSDOM } = require('jsdom');const html = '<html><body><div id="app">Conteúdo</div></body></html>';
const dom = new JSDOM(html);const document = dom.window.document;const content = document.getElementById('app').textContent;
console.log(content); // "Conteúdo"3. Htmlparser2 — desempenho máximo
A biblioteca htmlparser2 é um parser de baixo nível que funciona com base em eventos (abordagem semelhante ao SAX). Ela não cria uma árvore DOM, mas gera eventos ao encontrar cada tag, atributo ou nó de texto. Isso a torna o parser mais rápido do Node.js.
Características:
- Processamento em fluxo (pode fazer parsing de arquivos de gigabytes)
- Consumo mínimo de memória
- Suporte a XML e HTML
- Não possui métodos embutidos para navegação (é necessário escrever sua própria lógica)
Exemplo de uso:
const htmlparser2 = require('htmlparser2');const html = '<div class="item">Produto 1</div><div class="item">Produto 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() Também na biblioteca
TypeStack/routing-controllers para TypeScript: guia completo com exemplos
CoreBluetooth para Swift: Guia completo com exemplos práticos
Cliente Elasticsearch C++: guia completo para trabalhar com o motor de busca
StoreKit para Swift: guia completo com exemplos