Analisador de HTML no Node.js [fechado]

198

Existe algo como nokogiri de Ruby no nodejs? Quero dizer um analisador de HTML fácil de usar.

Eu tinha visto na página de módulos do Node.js. alguns analisadores, mas não consigo encontrar algo bonito e novo.

asci
fonte
3
O que você quer dizer com "amigável"? É conveniente trabalhar e selecionar nós, como o suporte a XPath e CSS do Nokogiri? É possível analisar o HTML "tag soup" inválido?
Phrogz
Se você se sentir confortável com o jQuery, considere esta resposta .
Lucio Paiva

Respostas:

446

Se você deseja construir o DOM, pode usar o jsdom .

Também há elogios , ele possui a interface jQuery e é muito mais rápido que as versões mais antigas do jsdom, embora atualmente eles tenham desempenho semelhante.

Você pode querer dar uma olhada no htmlparser2 , que é um analisador de fluxo contínuo e, de acordo com sua referência, parece ser mais rápido do que outros, e nenhum DOM por padrão. Ele também pode produzir um DOM, pois também é fornecido com um manipulador que cria um DOM. Este é o analisador usado pelo cheerio.

parse5 também parece uma boa solução. Ele é bastante ativo (11 dias desde a última confirmação desta atualização), compatível com WHATWG e é usado em jsdom , Angular e Polymer .

E se você deseja analisar HTML para raspagem da Web , pode usar o YQL 1 . Existe um módulo de nó para ele. YQL, acho que seria a melhor solução se o seu HTML for de um site estático , já que você conta com um serviço, não com seu próprio código e poder de processamento. Embora observe que não funcionará se a página não for permitida pelo robot.txt do site, o YQL não funcionará com ela.

Se o site que você está tentando criar é dinâmico , você deve usar um navegador sem cabeça, como o phantomjs . Também dê uma olhada no casperjs , se você estiver pensando em phantomjs. E você pode controlar o casperjs a partir do nó com SpookyJS .

Ao lado de phantomjs, há zombiejs . Ao contrário dos phantomjs que não podem ser incorporados nos nodejs, o zombiejs é apenas um módulo do nó.

Há um nettuts + toturial para as últimas soluções.


1 Desde agosto de 2014, a biblioteca YUI, que é um requisito para o YQL, não é mais mantida ativamente, fonte

Farid Nouri Neshat
fonte
1
Você pode obter o DOM do htmlparser2 usando o módulo DomHandler (fornecido com o htmlparser2). Eles são separados de propósito para permitir outros tipos de processamento de HTML sem sobrecarga na criação do DOM.
esp
@esp Obrigado, Antes de pensar que não era um padrão DOM, mudei essa seção de acordo.
Farid Nouri Neshat
Não sei ao certo como você YQL está rastreando - é mais para ingressar nos resultados de serviços da Web que não processam a marcação.
dardenfall
@dardenfall Você está certo, engatinhar não é o termo certo. Mudei-lo com raspagem :)
Farid Nouri Neshat
@ Farid - (teria enviado uma mensagem para você se eu pudesse) correndo o risco de debater nos comentários (desculpe!) Ainda não vejo como você o usa para raspar. Funciona com serviços da Web , não sites, e com os wservices, você raramente está analisando html. Talvez xml, mas não html.
dardenfall