我需要解析(服务端)大量的HTML页面。
我们都认为正则表达式不是解决这个问题的方法。
在我看来,JavaScript 是解析 HTML 页面的本地方式,但这种假设依赖于服务器端代码具有浏览器内 JavaScript 的所有 DOM 能力。
Node.js 是否具备此能力?
是否有更好的方法来解决这个问题,即在服务器端解析 HTML?
我需要解析(服务端)大量的HTML页面。
我们都认为正则表达式不是解决这个问题的方法。
在我看来,JavaScript 是解析 HTML 页面的本地方式,但这种假设依赖于服务器端代码具有浏览器内 JavaScript 的所有 DOM 能力。
Node.js 是否具备此能力?
是否有更好的方法来解决这个问题,即在服务器端解析 HTML?
使用Cheerio。它不像jsdom那么严格,而是针对爬取进行了优化。作为奖励,使用您已经熟悉的jQuery选择器。
❤ 熟悉的语法:Cheerio实现了核心jQuery的子集。 Cheerio 从jQuery库中删除了所有DOM不一致性和浏览器垃圾,揭示了其真正华丽的API。
ϟ 极快速度:Cheerio使用非常简单、一致的DOM模型。因此解析、操作和渲染效率非常高。初步端到端基准测试表明,Cheerio比JSDOM快约8倍。
❁ 极度灵活:Cheerio包装@FB55的宽容htmlparser。Cheerio可以解析几乎任何HTML或XML文档。
jsdom
对此太慢了 :/ - polkovnikov.ph我搜索了顶级的NodeJS HTML解析库。
由于我的用例不需要拥有很多功能的库,所以我可以专注于稳定性和性能。
通过稳定性,我指的是希望这个库被社区长时间使用以发现错误,并且它仍然会得到维护,并且开放的问题将会被关闭。
很难理解一个开源库的未来,但基于在 openbase 上排名前十的库,我做了一个小结。
我根据最后一次提交将它们分成两组(每组的顺序都按照 Github 星数排序):
最近6个月内有提交记录:
jsdom - 最后一次提交:3 个月前, 开放的问题数目:331, Github 星数:14.9K
.
htmlparser2 - 最后一次提交:8 天前, 开放的问题数目:2, Github 星数:2.7K
.
parse5 - 最后一次提交:2 个月前, 开放的问题数目:21, Github 星数:2.5K
.
swagger-parser - 最近提交:2个月前,开放问题:48个,Github 星数:663
。
html-parse-stringify - 最近提交:4个月前,开放问题:3个,Github 星数:215
。
node-html-parser - 最近提交:7天前,开放问题:15个,Github 星数:205
。
最近提交时间为6个月或以上:
cheerio - 最近提交:1年前,开放问题:174个,Github 星数:22.9K
。
koa-bodyparser - 最近提交:6个月前,开放问题:9个,Github 星数:1.1K
。
sax-js - 最近提交:3年前,开放问题:65个,Github 星数:941
。
draftjs-to-html - 最近提交:1年前,开放问题:27个,Github 星数:233
。
我选择了 Node-html-parser,因为它似乎非常快速,并且此时非常活跃。
(*) Openbase增加了更多关于每个库的信息,比如贡献者数量(至少+3次提交)、每周下载量、每月提交次数、版本等。
(**) 上面的表格是根据特定时间和日期的快照 - 我会再次检查参考资料,并首先检查最近的活动水平,然后深入了解更细节的内容。
pip install beautifulsoup4
。 - Robert Rendell