Parsing de HTML em Node.js: visão geral das melhores bibliotecas e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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()

Recommendations