Как проанализировать 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-документ.
Ответ 3
Используйте htmlparser2, его способ быстрее и довольно просто. Обратитесь к этому примеру использования:
https://www.npmjs.org/package/htmlparser2#usage
И живая демонстрация здесь:
http://demos.forbeslindesay.co.uk/htmlparser2/
Ответ 4
Htmlparser2 от FB55 кажется хорошей альтернативой.
Ответ 5
jsdom слишком строг, чтобы делать какие-либо реальные скребки экрана, но beautifulsoup не задыхается от плохой разметки.
node-soupselect - это порт python beautifulsoup в nodejs, и он прекрасно работает
Ответ 6
В .NET есть HTML Agility Pack, который представляет собой чрезвычайно прочную библиотеку разбора HTML.