J'ai besoin d'analyser (côté serveur) de grandes quantités de pages HTML.
Nous convenons tous que l’expression rationnelle n’est pas la solution.
Il me semble que javascript est le moyen natif d’analyser une page HTML, mais cette hypothèse repose sur le code côté serveur ayant toutes les possibilités du DOM dans un navigateur.
Node.js a-t-il cette capacité intégrée?
Existe-t-il une meilleure approche de ce problème, en analysant le code HTML côté serveur?
Vous pouvez utiliser les npm modules jsdom et htmlparser pour créer et analyser un DOM dans Node.JS.
Les autres options incluent:
Parmi toutes ces options, je préfère utiliser l'option Node.js, car elle utilise les méthodes d'accesseur DOM standard du W3C et permet de réutiliser le code sur le client et le serveur. J'aimerais que les méthodes de BeautifulSoup ressemblent davantage à celles du W3C et je pense que convertir votre code HTML en XHTML pour écrire en XSLT est tout simplement sadique.
Utilisez Cheerio . Ce n'est pas aussi strict que jsdom et est optimisé pour le raclage. En prime, utilise les sélecteurs jQuery que vous connaissez déjà.
Synt Syntaxe familière: Cheerio implémente un sous-ensemble de noyau jQuery. Cheerio supprime toutes les incohérences dans le DOM et les fureteurs de la librairie jQuery, révélant ainsi sa superbe API.
fast Rapide: Cheerio fonctionne avec un modèle DOM très simple et cohérent. En conséquence, l'analyse, la manipulation et le rendu sont incroyablement efficaces. Les repères préliminaires de bout en bout suggèrent que cheerio est environ 8 fois plus rapide que JSDOM.
❁ Incroyablement flexible: Cheerio enveloppe le htmlparser pardonnant de @ FB55. Cheerio peut analyser presque tous les documents HTML ou XML.
Utilisez htmlparser2 , son chemin plus rapide et assez simple. Consultez cet exemple d'utilisation:
https://www.npmjs.org/package/htmlparser2#usage
Et la démonstration en direct ici:
Htmlparser2 by FB55 semble être une bonne alternative.
jsdom est trop strict pour tout écran réel, mais beautifulsoup ne s’étouffe pas avec un mauvais balisage.
node-soupselect est un portage de beautifulsoup de python en nodejs, et cela fonctionne à merveille