HTML-парсер на Node.js [закрыт]


198

Есть ли что-то вроде нокогири Руби на nodejs? Я имею в виду удобный HTML-парсер.

Я видел на странице модулей Node.js некоторые парсеры, но не могу найти что-то красивое и свежее.


3
Что вы подразумеваете под "дружелюбным"? Удобно работать и выбирать узлы, как, например, поддержка XPath и CSS-селекторов в Nokogiri? Подходит для анализа недопустимого "тега супа" HTML?
Phrogz

Если вы знакомы с jQuery, подумайте над этим ответом .
Лусио Пайва

Ответы:


446

Если вы хотите построить DOM, вы можете использовать jsdom .

Также есть cheerio , он имеет интерфейс jQuery и работает намного быстрее, чем старые версии jsdom, хотя в наши дни они похожи по производительности.

Возможно, вы захотите взглянуть на htmlparser2 , который является потоковым парсером, и в соответствии с его эталоном он кажется быстрее, чем другие, и по умолчанию DOM отсутствует. Он также может создавать DOM, поскольку он также связан с обработчиком, который создает DOM. Это парсер, который используется cheerio.

parse5 также выглядит как хорошее решение. Он довольно активен (11 дней с момента последнего коммита на момент обновления), соответствует WHATWG и используется в jsdom , Angular и Polymer .

И если вы хотите проанализировать HTML для просмотра веб-страниц , вы можете использовать YQL 1 . Для этого есть модуль узла . YQL, я думаю, будет лучшим решением, если ваш HTML-код взят со статического веб-сайта, поскольку вы полагаетесь на сервис, а не на собственный код и вычислительную мощность. Обратите внимание, что это не будет работать, если страница запрещена robot.txt сайта, YQL не будет работать с ним.

Если веб-сайт, который вы пытаетесь обработать, является динамическим, то вам следует использовать браузер без заголовка, такой как phantomjs . Также взгляните на casperjs , если вы рассматриваете фантомы. И вы можете управлять casperjs из узла с помощью SpookyJS .

Рядом с фантомами есть зомби . В отличие от фантомов, которые не могут быть встроены в nodejs, zombiejs является просто модулем узла.

Для последних решений есть nettuts + toturial .


1 С августа 2014 года библиотека YUI, которая является обязательной для YQL, больше не поддерживается, источник


1
Вы можете получить DOM из htmlparser2 с помощью модуля DomHandler (в комплекте с htmlparser2). Они специально разделены, чтобы разрешить другие виды обработки HTML без затрат на создание DOM.
esp

@esp Спасибо, прежде чем я подумал, что это нестандартный DOM, я соответственно изменил этот раздел.
Фарид Нури Нешат

Я не уверен, как вы YQL для сканирования - это больше для присоединения результатов веб-службы, а не обработки разметки.
dardenfall

@dardenfall Вы правы, ползание - не правильный термин. Я изменил это со соскобом :)
Фарид Нури Нешат

@Farid - (я бы просто отправил вам сообщение, если бы мог), рискуя спорить в комментариях (извините!) Я до сих пор не понимаю, как вы используете это для очистки. Он работает с веб- сервисами , а не с сайтами, а с wservices вы редко анализируете html. Может быть, XML, но не HTML.
dardenfall


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.