我需要解析(服务器端)大量 HTML 页面。
我们都同意正则表达式不是解决问题的方法。
在我看来,javascript 是解析 HTML 页面的本机方式,但这种假设依赖于服务器端代码具有 javascript 在浏览器中具有的所有 DOM 功能。
Node.js 内置有这种能力吗?
有没有更好的方法来解决这个问题,在服务器端解析 HTML?
您可以使用 npm 模块 jsdom 和 htmlparser 在 Node.JS 中创建和解析 DOM。
其他选项包括:
在所有这些选项中,我更喜欢使用 Node.js 选项,因为它使用标准的 W3C DOM 访问器方法,并且我可以在客户端和服务器上重用代码。我希望 BeautifulSoup 的方法更类似于 W3C dom,而且我认为将 HTML 转换为 XHTML 来编写 XSLT 简直就是虐待狂。
使用Cheerio。它不像 jsdom 那么严格,并且针对抓取进行了优化。作为奖励,使用您已经知道的 jQuery 选择器。
❤ 熟悉的语法:Cheerio 实现了核心 jQuery 的子集。凯里欧 从 jQuery 中删除所有 DOM 不一致和浏览器缺陷 库,揭示其真正华丽的 API。
ϟ 速度极快:Cheerio 使用非常简单、一致的 DOM 模型。因此,解析、操作和渲染是令人难以置信的 高效的。初步的端到端基准测试表明,cheerio 是 比 JSDOM 快大约 8 倍。
❁ 极其灵活:Cheerio 包裹着@FB55 的宽容 html解析器。 Cheerio 几乎可以解析任何 HTML 或 XML 文档。
我搜索了顶级 NodeJS html 解析器库。
因为我的用例不需要具有许多功能的库,所以我可以专注于稳定性和性能。
我所说的稳定性是指我希望社区能够使用该库足够长的时间,以便发现错误,并且仍将对其进行维护,并且将解决未解决的问题。
很难理解开源库的未来,但我根据openbase中排名前10的库做了一个小总结。
我根据最后一次提交分为 2 组(每组的顺序按照 Github 开始):
最后一次提交是在过去 6 个月内:
jsdom -
Last commit: 3 Months, Open issues: 331, Github stars: 14.9K
.
Last commit: 8 days, Open issues: 2, Github stars: 2.7K
。
parse5 -
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 个月及以上:
欢呼 -
Last commit: 1 year, Open issues: 174, Github stars: 22.9K
。
Last commit: 6 months, Open issues: 9, Github stars: 1.1K
。
sax-js -
Last commit: 3 Years, Open issues: 65, Github stars: 941
。
Last commit: 1 Year, Open issues: 27, Github stars: 233
。
我选择了 Node-html-parser,因为它此时看起来安静快速且非常活跃。
(*) Openbase 添加了有关每个库的更多信息,例如贡献者数量(+3 次提交)、每周下载量、每月提交量、版本等。
(**) 上表是根据具体时间和日期的快照 - 我会再次检查参考,并作为第一步检查最近的活动水平,然后深入了解较小的细节。
Htmlparser2 似乎是一个不错的选择。
jsdom 过于严格,无法进行任何真正的屏幕抓取之类的事情,但 beautifulsoup 不会因不良标记而窒息。
node-soupselect是python的beautifulsoup到nodejs的端口,它工作得非常漂亮
也尝试一下scrape-it,祝你好运!!