Как мне разобрать HTML-страницу с Node.js - PullRequest
85 голосов
/ 10 сентября 2011

Мне нужно проанализировать (на стороне сервера) большое количество HTML-страниц.
Мы все согласны с тем, что regexp - это не тот путь, по которому мы сюда идем. Мне кажется, что javascript является родным способом парсинга HTML-страницы, но это предположение основано на коде серверной части, имеющем все возможности DOM, которые есть у javascript внутри браузера.

Имеет ли Node.js встроенную способность?
Есть ли лучший подход к этой проблеме, анализируя HTML на стороне сервера?

Ответы [ 5 ]

78 голосов
/ 10 сентября 2011

Вы можете использовать модули npm jsdom и htmlparser для создания и анализа DOM в Node.JS.

Другие опции включают в себя:

  • BeautifulSoup для питона
  • вы можете конвертировать html в xhtml и использовать XSLT
  • HTMLAgilityPack для .NET
  • CsQuery для .NET (мой новый фаворит)
  • Двигатели spidermonkey и Rhino JS имеют встроенную поддержку E4X. Это может быть полезно, только если вы конвертируете html в xhtml.

Из всех этих опций я предпочитаю использовать опцию Node.js, потому что она использует стандартные методы доступа W3C DOM, и я могу повторно использовать код как на клиенте, так и на сервере. Мне бы хотелось, чтобы методы BeautifulSoup были больше похожи на W3C dom, и я думаю, что преобразование вашего HTML в XHTML для написания XSLT просто садистично.

60 голосов
/ 12 ноября 2013

Использование Cheerio . Он не такой строгий, как jsdom, и оптимизирован для очистки. В качестве бонуса используются уже известные вам селекторы jQuery.

❤ Знакомый синтаксис: Cheerio реализует подмножество ядра jQuery. здор`ово удаляет все несоответствия DOM и браузерную шумиху из jQuery библиотека, раскрывающая его действительно великолепный API.

ϟ Слишком быстро: Cheerio работает с очень простым, последовательным DOM модель. В результате анализ, манипулирование и рендеринг невероятно эффективный. Предварительные сквозные тесты показывают, что примерно в 8 раз быстрее, чем JSDOM.

❁ Безумно гибкий: Cheerio обволакивает @ FB55 прощением HTMLparser. Cheerio может анализировать практически любой документ HTML или XML.

7 голосов
/ 28 ноября 2014

Используйте htmlparser2 , это быстрее и довольно просто. Обратитесь к этому примеру использования:

https://www.npmjs.org/package/htmlparser2#usage

И живая демонстрация здесь:

http://demos.forbeslindesay.co.uk/htmlparser2/

5 голосов
/ 20 апреля 2013

Htmlparser2 от FB55 представляется хорошей альтернативой.

1 голос
/ 24 августа 2013

jsdom слишком строг, чтобы делать какие-либо реальные действия по очистке экрана, но Beautifulsoup не задыхается от плохой разметки.

node-soupselect - это порт Beautifulsoup Python в nodejsи прекрасно работает

...