Как проанализировать HTML-страницу с помощью Node.js

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

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

Ответ 1

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

Другие варианты:

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

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

Ответ 2

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

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

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

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

Ответ 4

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

Ответ 5

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

node-soupselect - это порт python beautifulsoup в nodejs, и он прекрасно работает

Ответ 6

В .NET есть HTML Agility Pack, который представляет собой чрезвычайно прочную библиотеку разбора HTML.