我需要解析(服务器端)大量的HTML页面。我们都同意regexp不是解决问题的方法。在我看来,javascript是解析HTML页面的原生方式,但这一假设依赖于服务器端代码具有javascript在浏览器中具有的所有DOM能力。Node.js是否内置了这种能力?有没有更好的方法来解决这个问题,在服务器端解析HTML?
zd287kbt1#
您可以使用npm模块jsdom和htmlparser在Node.JS中创建和解析DOM。其他选项包括:
在所有这些选项中,我更喜欢使用Node.js选项,因为它使用标准的W3C DOM访问器方法,并且我可以在客户端和服务器上重用代码。我希望BeautifulSoup的方法更类似于W3Cdom,我认为将HTML转换为XHTML来编写XSLT简直是虐待狂。
muk1a3rh2#
使用Cheerio。它不像jsdom那样严格,并且针对抓取进行了优化。作为奖励,使用了你已经知道的jQuery选择器。❤熟悉的语法:Cheerio实现了核心jQuery的一个子集。Cheerio从jQuery库中删除了所有DOM不一致性和浏览器粗糙,揭示了它真正华丽的API。极快:Cheerio使用一个非常简单、一致的DOM模型。因此,解析、操作和呈现都非常高效。初步的端到端基准测试表明,cheerio比JSDOM快8倍。非常灵活:Cheerio包围了@FB55的宽容的htmlparser。Cheerio几乎可以解析任何HTML或XML文档。
ruyhziif3#
我搜索了顶级的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。
Last commit: 3 Months, Open issues: 331, Github stars: 14.9K
Last commit: 8 days, Open issues: 2, Github stars: 2.7K
Last commit: 2 Months, Open issues: 21, Github stars: 2.5K
Last commit: 2 Months, Open issues: 48, Github stars: 663
Last commit: 4 Months, Open issues: 3, Github stars: 215
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次提交),每周下载,每月提交,版本等。(**)上表是根据特定时间和日期的快照-我会再次检查参考,作为第一步,检查最近的活动水平,然后深入到更小的细节。
Last commit: 1 year, Open issues: 174, Github stars: 22.9K
Last commit: 6 months, Open issues: 9, Github stars: 1.1K
Last commit: 3 Years, Open issues: 65, Github stars: 941
Last commit: 1 Year, Open issues: 27, Github stars: 233
snz8szmq4#
使用htmlparser2,它的方式更快,非常简单。请参阅此用法示例:https://www.npmjs.org/package/htmlparser2#usage这里是Live Demo:http://demos.forbeslindesay.co.uk/htmlparser2/
r7xajy2e5#
FB55的Htmlparser2似乎是一个很好的替代品。
idv4meu86#
jsdom太严格了,不能做任何真实的的屏幕抓取之类的事情,但是beautifulsoup不会因为糟糕的标记而窒息。node-soupselect是python的beautifulsoup到nodejs的一个移植,它工作得很好
rekjcdws7#
开源对于应用程序开发人员至关重要。不幸的是,Open Base被关闭了。我发现了一个替代方案:来自Open Weaver的Kandi它帮助我作为一个开发人员找到代码片段,包,库和解决方案。可以在这里访问:https://kandi.openweaver.com。感谢这些支持开源社区的工具。编码快乐!
7条答案
按热度按时间zd287kbt1#
您可以使用npm模块jsdom和htmlparser在Node.JS中创建和解析DOM。
其他选项包括:
在所有这些选项中,我更喜欢使用Node.js选项,因为它使用标准的W3C DOM访问器方法,并且我可以在客户端和服务器上重用代码。我希望BeautifulSoup的方法更类似于W3Cdom,我认为将HTML转换为XHTML来编写XSLT简直是虐待狂。
muk1a3rh2#
使用Cheerio。它不像jsdom那样严格,并且针对抓取进行了优化。作为奖励,使用了你已经知道的jQuery选择器。
❤熟悉的语法:Cheerio实现了核心jQuery的一个子集。Cheerio从jQuery库中删除了所有DOM不一致性和浏览器粗糙,揭示了它真正华丽的API。
极快:Cheerio使用一个非常简单、一致的DOM模型。因此,解析、操作和呈现都非常高效。初步的端到端基准测试表明,cheerio比JSDOM快8倍。
非常灵活:Cheerio包围了@FB55的宽容的htmlparser。Cheerio几乎可以解析任何HTML或XML文档。
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次提交),每周下载,每月提交,版本等。
(**)上表是根据特定时间和日期的快照-我会再次检查参考,作为第一步,检查最近的活动水平,然后深入到更小的细节。
snz8szmq4#
使用htmlparser2,它的方式更快,非常简单。请参阅此用法示例:
https://www.npmjs.org/package/htmlparser2#usage
这里是Live Demo:
http://demos.forbeslindesay.co.uk/htmlparser2/
r7xajy2e5#
FB55的Htmlparser2似乎是一个很好的替代品。
idv4meu86#
jsdom太严格了,不能做任何真实的的屏幕抓取之类的事情,但是beautifulsoup不会因为糟糕的标记而窒息。
node-soupselect是python的beautifulsoup到nodejs的一个移植,它工作得很好
rekjcdws7#
开源对于应用程序开发人员至关重要。不幸的是,Open Base被关闭了。我发现了一个替代方案:来自Open Weaver的Kandi它帮助我作为一个开发人员找到代码片段,包,库和解决方案。可以在这里访问:https://kandi.openweaver.com。感谢这些支持开源社区的工具。编码快乐!