【问题标题】:HTML-parser on Node.js [closed]Node.js 上的 HTML 解析器 [关闭]
【发布时间】:2011-12-20 03:32:07
【问题描述】:

nodejs 上是否有类似 Ruby 的 nokogiri 的东西? 我的意思是一个用户友好的 HTML 解析器。

我在 Node.js 模块页面上看到了一些解析器,但我找不到漂亮和新鲜的东西。

【问题讨论】:

  • “友好”是什么意思?方便工作和选择节点,比如 Nokogiri 的 XPath 和 CSS 选择器支持?可以解析无效的“标签汤”HTML?
  • 如果您对 jQuery 感到满意,请考虑使用 this answer

标签: html parsing node.js nokogiri


【解决方案1】:

试试https://github.com/tmpvar/jsdom - 你给它一些HTML,它给你一个DOM。

【讨论】:

    【解决方案2】:

    如果你想构建DOM,你可以使用jsdom

    还有cheerio,它有jQuery 接口,它比旧版本的jsdom 快很多,尽管现在它们的性能相似。

    你可能想看看htmlparser2,它是一个流式解析器,根据它的基准,它似乎比其他的更快,并且默认情况下没有 DOM。它还可以生成 DOM,因为它还与创建 DOM 的处理程序捆绑在一起。这是cheerio使用的解析器。

    parse5 看起来也是一个不错的解决方案。它相当活跃(自本次更新的最后一次提交起 11 天),符合 WHATWG,并在 jsdomAngularPolymer 中使用。

    如果你想为web scraping解析HTML,你可以使用YQL1。它有一个node module。如果您的 HTML 来自static 网站,我认为 YQL 将是最好的解决方案,因为您依赖的是服务,而不是您自己的代码和处理能力。虽然请注意,如果该页面被网站的 robots.txt 禁止,它将无法正常工作,但 YQL 将无法使用它。

    如果您尝试抓取的网站是dynamic,那么您应该使用headless browser,例如phantomjs。如果您正在考虑使用 phantomjs,还可以查看 casperjs。您可以使用SpookyJS 从节点控制 casperjs。

    在 phantomjs 旁边有 zombiejs。与不能嵌入nodejs的phantomjs不同,zombiejs只是一个node模块。

    后一种解决方案有一个nettuts+ toturial


    1 自 2014 年 8 月起,YQL 所需的 YUI 库不再积极维护,source

    【讨论】:

    • 您可以使用 DomHandler 模块(与 htmlparser2 捆绑)从 htmlparser2 获取 DOM。它们是有意分开的,以允许其他类型的 HTML 处理而无需创建 DOM 的开销。
    • @esp 谢谢,在我认为它是非标准 DOM 之前,我相应地更改了该部分。
    • 我不确定你的 YQL 是如何进行爬取的——更多的是加入 Web 服务结果而不是处理标记。
    • @dardenfall 你是对的,爬行不是正确的术语。我用刮擦改变了它:)
    • @Farid - (如果可以的话,我会发消息给你)冒着在 cmets 辩论的风险(对不起!)我仍然不明白你是如何使用它来抓取的。它适用于 web services 而不是站点,并且使用 wservices,您很少解析 html。也许是 xml,但不是 html。
    【解决方案3】:

    你也可以看一下X光片:https://github.com/lapwinglabs/x-ray

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 2010-10-25
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2010-09-19
      相关资源
      最近更新 更多