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

5m1hhzi4  于 2023-05-06  发布在  Node.js
关注(0)|答案(7)|浏览(206)

我需要解析(服务器端)大量的HTML页面。
我们都同意regexp不是解决问题的方法。
在我看来,javascript是解析HTML页面的原生方式,但这一假设依赖于服务器端代码具有javascript在浏览器中具有的所有DOM能力。
Node.js是否内置了这种能力?
有没有更好的方法来解决这个问题,在服务器端解析HTML?

zd287kbt

zd287kbt1#

您可以使用npm模块jsdomhtmlparser在Node.JS中创建和解析DOM。
其他选项包括:

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

muk1a3rh

muk1a3rh2#

使用Cheerio。它不像jsdom那样严格,并且针对抓取进行了优化。作为奖励,使用了你已经知道的jQuery选择器。
❤熟悉的语法:Cheerio实现了核心jQuery的一个子集。Cheerio从jQuery库中删除了所有DOM不一致性和浏览器粗糙,揭示了它真正华丽的API。
极快:Cheerio使用一个非常简单、一致的DOM模型。因此,解析、操作和呈现都非常高效。初步的端到端基准测试表明,cheerio比JSDOM快8倍。
非常灵活:Cheerio包围了@FB55的宽容的htmlparser。Cheerio几乎可以解析任何HTML或XML文档。

ruyhziif

ruyhziif3#

2020年11月更新

我搜索了顶级的NodeJS HTML解析器库。
因为我的用例不需要具有很多特性的库,所以我可以专注于稳定性和性能。
我所说的稳定性是指,我希望社区使用这个库足够长的时间,以便发现bug,并且它仍然会被维护,开放的问题将被关闭。

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

我根据最后一次提交分为两组(每组的顺序是根据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个月及以上:

cheerio - Last commit: 1 year, Open issues: 174, Github stars: 22.9K
koa-bodyparser - Last commit: 6 months, Open issues: 9, Github stars: 1.1K
sax-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次提交),每周下载,每月提交,版本等。
(**)上表是根据特定时间和日期的快照-我会再次检查参考,作为第一步,检查最近的活动水平,然后深入到更小的细节。

snz8szmq

snz8szmq4#

使用htmlparser2,它的方式更快,非常简单。请参阅此用法示例:
https://www.npmjs.org/package/htmlparser2#usage
这里是Live Demo:
http://demos.forbeslindesay.co.uk/htmlparser2/

r7xajy2e

r7xajy2e5#

FB55的Htmlparser2似乎是一个很好的替代品。

idv4meu8

idv4meu86#

jsdom太严格了,不能做任何真实的的屏幕抓取之类的事情,但是beautifulsoup不会因为糟糕的标记而窒息。
node-soupselect是python的beautifulsoup到nodejs的一个移植,它工作得很好

rekjcdws

rekjcdws7#

开源对于应用程序开发人员至关重要。不幸的是,Open Base被关闭了。我发现了一个替代方案:来自Open Weaver的Kandi它帮助我作为一个开发人员找到代码片段,包,库和解决方案。可以在这里访问:https://kandi.openweaver.com。感谢这些支持开源社区的工具。编码快乐!

相关问题