提问人:Itay Moav -Malimovka 提问时间:9/11/2011 最后编辑:Yves M.Itay Moav -Malimovka 更新时间:11/6/2023 访问量:166576
如何使用 Node.js 解析 HTML 页面
How do I parse a HTML page with Node.js
问:
我需要解析(服务器端)大量的HTML页面。
我们都同意正则表达式不是要走的路。
在我看来,javascript 是解析 HTML 页面的原生方式,但这种假设依赖于服务器端代码具有 javascript 在浏览器中具有的所有 DOM 功能。
Node.js 是否内置了这种能力?
有没有更好的方法来解决这个问题,在服务器端解析 HTML?
答:
您可以使用 npm 模块 jsdom 和 htmlparser 在 Node.JS 中创建和解析 DOM。
其他选项包括:
- 适用于 python 的 BeautifulSoup
- 你可以将html转换为xhtml并使用XSLT
- 适用于 .NET 的 HTMLAgilityPack
- CsQuery for .NET (我的新收藏夹)
- spidermonkey 和 rhino JS 引擎具有原生 E4X 支持。这可能很有用,仅当您将 html 转换为 xhtml 时。
在所有这些选项中,我更喜欢使用 Node.js 选项,因为它使用标准的 W3C DOM 访问器方法,并且我可以在客户端和服务器上重用代码。我希望 BeautifulSoup 的方法更类似于 W3C dom,我认为将您的 HTML 转换为 XHTML 来编写 XSLT 简直是虐待狂。
评论
FB55 的 Htmlparser2 似乎是一个不错的选择。
评论
JSDOM 太严格了,无法做任何真正的屏幕抓取之类的事情,但 BeautifulSoup 不会因为糟糕的标记而窒息。
node-soupselect 是 Python 的 beautifulsoup 移植到 nodejs 中,它运行得很漂亮
使用 Cheerio。它不像 jsdom 那样严格,并且针对抓取进行了优化。作为奖励,使用您已经知道的jQuery选择器。
❤ 熟悉的语法:Cheerio 实现了核心 jQuery 的子集。再见 从 jQuery 中删除所有 DOM 不一致和浏览器问题 库,揭示了其真正华丽的 API。
ϟ 极快的速度:Cheerio 使用非常简单、一致的 DOM 型。因此,解析、操作和渲染令人难以置信 有效。初步的端到端基准表明,cheerio 是 比 JSDOM 快 8 倍左右。
❁ 疯狂的灵活性:Cheerio 包裹着@FB55的宽容 html解析器。Cheerio 几乎可以解析任何 HTML 或 XML 文档。
评论
jsdom
太慢了:/
使用 htmlparser2,它的方式更快且非常简单。请参阅以下用法示例:
https://www.npmjs.org/package/htmlparser2#usage
现场演示在这里:
http://demos.forbeslindesay.co.uk/htmlparser2/
评论
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
parse5 - . Last commit: 2 Months, Open issues: 21, Github stars: 2.5K
swagger-parser - . Last commit: 2 Months, Open issues: 48, Github stars: 663
html-parse-stringify - .Last commit: 4 Months, Open issues: 3, Github stars: 215
node-html-parser - . 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 次提交)、每周下载量、每月提交量、版本等。
(**)上表是根据特定时间和日期的快照 - 我会再次检查参考,作为第一步,检查最近活动的水平,然后深入研究较小的细节。
评论