如何使用Node.js解析HTML页面

Ita*_*vka 88 server-side html-parsing node.js

我需要解析(服务器端)大量的HTML页面.
我们都同意regexp不是这里的方式.
在我看来,javascript是解析HTML页面的本地方式,但该假设依赖于具有javascript在浏览器中具有的所有DOM能力的服务器端代码.

Node.js内置了这种能力吗?
有没有更好的方法解决这个问题,解析服务器端的HTML?

kzh*_*kzh 80

您可以使用npm模块jsdomhtmlparserNode.JS中创建和解析DOM.

其他选择包括:

在所有这些选项中,我更喜欢使用Node.js选项,因为它使用标准的W3C DOM访问器方法,我可以在客户端和服务器上重用代码.我希望BeautifulSoup的方法更类似于W3C dom,我认为将HTML转换为XHTML来编写XSLT只是简单的虐待狂.

  • 这是使用node.js解析HTML的好方法吗? (3认同)
  • 你好,什么意思?可靠,快速,简单?嗯这两个,它足够强大,所以你可以[如果你想使用jQuery服务器端](http://stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js). (3认同)

Mee*_*ohi 60

使用Cheerio.它不像jsdom那样严格,并且针对刮擦进行了优化.作为奖励,使用您已经知道的jQuery选择器.

❤熟悉的语法:Cheerio实现了核心jQuery的一个子集.Cheerio从jQuery库中删除了所有DOM不一致和浏览器残骸,揭示了它真正华丽的API.

ϟ超快速:Cheerio使用非常简单,一致的DOM模型.因此,解析,操作和渲染非常有效.初步的端到端基准测试表明,cheerio比JSDOM快约8倍.

❁疯狂灵活:Cheerio环绕@ FB55宽容的htmlparser.Cheerio几乎可以解析任何HTML或XML文档.

  • 但是不构建DOM并且不允许XPath.jQuery语法肯定是该库的缺点. (7认同)
  • 以我的经验,@ polkovnikov.ph很少有应用程序需要完整的DOM解析,并且与jQuery / Cheerio中的快速“懒惰”评估相比,构建DOM的成本非常高。从这个意义上讲,jQuery样式的解析是一个好处,但是如果您的应用程序需要操纵DOM服务器端,则您可能更喜欢尝试jsdom。 (2认同)
  • @MohamedMansour值得我们在生产中使用Cheerio并在几秒钟内抓取数千页.当然,"快"和"慢"都与你的应用和带宽有关. (2认同)

Rtm*_*tmY 21

2020 年 11 月更新

我搜索了顶级 NodeJS html 解析器库。

因为我的用例不需要具有许多功能的库,所以我可以专注于稳定性和性能。

我所说的稳定性是指我希望社区能够使用该库足够长的时间,以便发现错误,并且仍将对其进行维护,并且将解决未解决的问题。

很难理解一个开源库的未来,但我根据openbase中排名前 10 的库做了一个小小的总结。

我根据最后一次提交分为 2 组(每组的顺序按照 Github 开始):

最后一次提交是在过去 6 个月内:

jsdom- . Last commit: 3 Months, Open issues: 331, Github stars: 14.9K

htmlparser2 - Last commit: 8 days, Open issues: 2, Github stars: 2.7K.

解析5 - Last commit: 2 Months, Open issues: 21, Github stars: 2.5K.

swagger 解析器- Last commit: 2 Months, Open issues: 48, Github stars: 663.

html-parse-stringify - Last commit: 4 Months, Open issues: 3, Github stars: 215.

节点 html 解析器- Last commit: 7 days, Open issues: 15, Github stars: 205.

最后一次提交是 6 个月及以上:

欢呼- Last commit: 1 year, Open issues: 174, Github stars: 22.9K.

koa-bodyparser - Last commit: 6 months, Open issues: 9, Github stars: 1.1K.

萨克斯-js - Last commit: 3 Years, Open issues: 65, Github stars: 941.

Draftjs-to-html - Last commit: 1 Year, Open issues: 27, Github stars: 233.


我选择 Node-html-parser 是因为它此时看起来安静快速且非常活跃。

(*) Openbase 添加了有关每个库的更多信息,例如贡献者数量(+3 次提交)、每周下载量、每月提交量、版本等。

(**) 上表是根据具体时间和日期的快照 - 我会再次检查参考,并作为第一步检查最近的活动水平,然后深入研究较小的细节。

  • 我喜欢这个答案,因为它强调了流程节点开发人员必须经历的不可避免的过程,以审查大量可用的几乎重复的模块。[此处](https://gitlab.com/moodboom/reusable/-/blob/master/JavaScript/scrap/node/htmlParse/htmlParse.js)是我做的 2023 年调查。唯一不变的是变化。 (2认同)

And*_*ira 8

使用htmlparser2,它的方式更快,更简单.请参考此用法示例:

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

这里的现场演示:

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


esp*_*esp 6

FB55的Htmlparser2似乎是一个不错的选择.

  • 什么应该用[这种返回格式](http://demos.forbeslindesay.co.uk/htmlparser2/)?写一堆for循环和树遍历? (3认同)