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ó.
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.
Respostas:
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
fonte
Experimente https://github.com/tmpvar/jsdom - você fornece um pouco de HTML e um DOM.
fonte
Você também pode dar uma olhada no raio-x: https://github.com/lapwinglabs/x-ray
fonte