Analyseur HTML sur Node.js [fermé]

198

Y a-t-il quelque chose comme le nokogiri de Ruby sur nodejs? Je veux dire un analyseur HTML convivial.

J'avais vu sur la page des modules Node.js quelques analyseurs, mais je ne trouve pas quelque chose de joli et de frais.

asci
la source
3
Qu'entendez-vous par «amical»? Pratique pour travailler et sélectionner des nœuds, comme le support XPog et CSS Selector de Nokogiri? Convient à l'analyse HTML non valide de "soupe de tag"?
Phrogz
Si vous êtes à l'aise avec jQuery, pensez à cette réponse .
Lucio Paiva

Réponses:

446

Si vous voulez construire DOM, vous pouvez utiliser jsdom .

Il y a aussi cheerio , il a l' interface jQuery et il est beaucoup plus rapide que les anciennes versions de jsdom, bien que ces jours-ci, leurs performances soient similaires.

Vous voudrez peut-être jeter un œil à htmlparser2 , qui est un analyseur de streaming, et selon son benchmark, il semble être plus rapide que les autres, et pas de DOM par défaut. Il peut également produire un DOM, car il est également fourni avec un gestionnaire qui crée un DOM. C'est l'analyseur utilisé par cheerio.

parse5 ressemble également à une bonne solution. Il est assez actif (11 jours depuis le dernier commit à partir de cette mise à jour), conforme à WHATWG, et est utilisé dans jsdom , Angular et Polymer .

Et si vous souhaitez analyser HTML pour le scraping Web , vous pouvez utiliser YQL 1 . Il existe un module de nœud pour cela. YQL, je pense que ce serait la meilleure solution si votre code HTML provient d'un site Web statique , car vous comptez sur un service, pas sur votre propre code et votre propre puissance de traitement. Notez que cela ne fonctionnera pas si la page n'est pas autorisée par le robot.txt du site Web, YQL ne fonctionnera pas avec.

Si le site Web que vous essayez de gratter est dynamique, vous devez utiliser un navigateur sans tête comme phantomjs . Jetez également un œil aux casperjs , si vous envisagez des phantomjs. Et vous pouvez contrôler les casperjs à partir du nœud avec SpookyJS .

À côté des fantômes, il y a des zombies . Contrairement aux phantomjs qui ne peuvent pas être intégrés dans nodejs, zombiejs n'est qu'un module de noeud.

Il y a un nettuts + toturial pour ces dernières solutions.


1 Depuis août 2014, la bibliothèque YUI, qui est une exigence pour YQL, n'est plus activement gérée, source

Farid Nouri Neshat
la source
1
Vous pouvez obtenir DOM à partir de htmlparser2 en utilisant le module DomHandler (fourni avec htmlparser2). Ils sont séparés exprès pour permettre d'autres types de traitement HTML sans surcharge de création de DOM.
particulier le
@esp Merci, Avant de penser qu'il s'agissait d'un DOM non standard, j'ai modifié cette section en conséquence.
Farid Nouri Neshat
Je ne sais pas comment vous YQL pour l'exploration - c'est plus pour rejoindre les résultats du service Web que pour ne pas traiter le balisage.
dardenfall
@dardenfall Vous avez raison, ramper n'est pas le bon terme. Je l'ai changé avec le grattage :)
Farid Nouri Neshat
@Farid - (je vous aurais juste envoyé un message si je le pouvais) au risque de débattre dans les commentaires (désolé!) Je ne vois toujours pas comment vous l'utilisez pour gratter. Cela fonctionne avec des services Web et non avec des sites, et avec wservices, vous analysez rarement le HTML. Peut-être xml, mais pas html.
dardenfall