Como faço para analisar uma página HTML com o Node.js

Eu preciso analisar (lado do servidor) grandes quantidades de páginas HTML.
Todos concordamos que o regexp não é o caminho a seguir.
Parece-me que o javascript é a maneira nativa de analisar uma página HTML, mas essa suposição se baseia no código do lado do servidor com todas as habilidades do DOM que o javascript tem dentro de um navegador.

O Node.js tem essa habilidade embutida?
Existe uma abordagem melhor para esse problema, analisando HTML no lado do servidor?

Você pode usar os módulos npm jsdom e htmlparser para criar e analisar um DOM no Node.JS.

Outras opções incluem:

  • BeautifulSoup para python
  • você pode converter você em html para xhtml e usar XSLT
  • HTMLAgilityPack for .NET
  • CsQuery for .NET (meu novo favorito)
  • Os motores JS aranha e rinoceronte têm suporte nativo E4X. Isso pode ser útil somente se você converter seu html em xhtml.

De todas essas opções, eu prefiro usar a opção Node.js, porque ela usa os methods de access DOM padrão do W3C e posso reutilizar o código no cliente e no servidor. Eu gostaria que os methods do BeautifulSoup fossem mais parecidos com o W3C dom, e acho que converter seu HTML em XHTML para escrever XSLT é simplesmente sádico.

Use Cheerio . Não é tão rigoroso quanto jsdom e é otimizado para raspagem. Como bônus, usa os seletores do jQuery que você já conhece.

❤ Sintaxe familiar: o Cheerio implementa um subconjunto do núcleo jQuery. O Cheerio remove todas as inconsistências do DOM e arquivos de navegador da biblioteca do jQuery, revelando sua API verdadeiramente incrível.

ϟ Incrivelmente rápido: o Cheerio funciona com um modelo DOM muito simples e consistente. Como resultado, análise, manipulação e renderização são incrivelmente eficientes. Os benchmarks preliminares de ponta a ponta sugerem que o cheerio é cerca de 8x mais rápido que o JSDOM.

❁ Insanamente flexível: Cheerio envolve o @ htmlparser do FB55. Cheerio pode analisar quase qualquer documento HTML ou XML.

Use o htmlparser2 , é mais rápido e simples. Consulte este exemplo de uso:

https://www.npmjs.org/package/htmlparser2#usage

E a demonstração ao vivo aqui:

http://demos.forbeslindesay.co.uk/htmlparser2/

O Htmlparser2 do FB55 parece ser uma boa alternativa.

O jsdom é muito estrito para fazer qualquer tipo de canvas real, mas o beautifulsoup não engasga com a má marcação.

node-soupselect é uma porta do beautifulsoup do python para o nodejs, e funciona lindamente

No .NET, há o HTML Agility Pack , que é uma biblioteca de análise de HTML extremamente sólida.