【问题标题】:Load HTML string into DOM tree with Javascript使用 Javascript 将 HTML 字符串加载到 DOM 树中
【发布时间】:2011-02-04 22:08:22
【问题描述】:

我目前正在使用一个自动化框架,该框架将网页拉下以进行分析,然后将其呈现为字符串以进行处理。 Rhino Javascript 引擎可用于协助解析返回的网页。

似乎如果字符串(这是一个完整的网页)可以加载到 DOM 表示中,它将为解析和分析内容提供一个非常好的接口。

仅使用 Javascript,这是一个可能和/或可行的概念吗?

编辑:

我将分解问题以澄清:假设我在 javascript 中有一个包含 html 的字符串,如下所示:

var $mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>';

以某种方式将其加载到 dom 对象中是否可能/现实?

【问题讨论】:

  • 如果我理解正确,您可以将 html 字符串附加到文档的正文 document.body.innerHTML="string"

标签: javascript dom web-crawler rhino web-scraping


【解决方案1】:

我接受 JonDavidJohn 的回答,因为它对解决我的问题很有用,我想包括这个额外的答案,以供将来可能会看到这个问题的其他人使用。

看起来,虽然 Javascript 允许将 html 字符串加载到 DOM 元素中,但 DOM 不是核心 ECMAScript 的一部分,因此在 Rhino 下运行的脚本不可用。

作为一个值得一提的旁注,在 Rhino 1.6 中实现的一个很好的替代方案是 E4X。虽然不是 DOM 实现,但它确实提供了概念上相似的功能。

【讨论】:

    【解决方案2】:

    如果文档是 XHTML,您可以使用任何 XML 解析器对其进行解析。 E4X 可能会很好地完成这项工作,内置的 Java XML 解析接口也是如此。

    env.js 库旨在模拟 Rhino 下的浏览器环境,但我相信您的文档也需要兼容 XHTML:

    http://ejohn.org/blog/bringing-the-browser-to-the-server/

    http://www.envjs.com/

    然而,如果它是 HTML,那就更难了,因为浏览器被设计成对如何解析标记非常宽松。请参阅此处以获取 Java 中的 HTML 解析器列表:

    http://java-source.net/open-source/html-parsers

    这不是一个容易解决的问题。人们甚至通过 JNI 将 Mozilla Gecko 引擎嵌入到 Java 中,以便使用其解析功能。

    我建议您研究以下纯 Java 项目:

    http://lobobrowser.org/cobra.jsp

    Lobo 项目的目标是开发纯 Java 网络浏览器。这是一个非常有趣的项目,其中有很多,但我相信您可以在自己的应用程序中非常轻松地独立使用解析器,如下面的链接所述:

    http://lobobrowser.org/cobra/java-html-parser.jsp

    【讨论】:

      【解决方案3】:

      如果你有这个包含 html 的变量,你可以将它加载到一个 DOM 对象中,例如,通过 id。

      var mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>';
      
      element = document.getElementById('dom-id');  //<-- element you are loading it into.
      
      element.innerHTML = mywebpage;
      

      【讨论】:

      • 这是朝着正确方向迈出的一步。由于我使用的是 Rhino,我不确定我是否可以实际访问或可能“创建”一个 dom 对象。当我了解更多信息时,我将继续查看并更新。
      • 好的,只要你有一个html字符串,它就会加载到你选择的任何DOM元素中。
      猜你喜欢
      • 2011-11-11
      • 2016-12-08
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2012-07-15
      相关资源
      最近更新 更多