|
基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息广告 基于 Web 的数据挖掘
不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源。但是,它的结构使它很难用系统的方法来利用信息。本文描述的方法和工具将使那些熟悉 Web
最常用技术的开发人员能快速而便捷地获取他们所需的以 Web 方式发
布的信息。 已经尝试了多种方法来解决这个问题。大多数方法都采用一些专用查询语言的形式把 HTML 页面的各个部分映射成代码,而这些代码将 Web 页面上的信息填入到数据库中。尽管这些方法可能提供一些好处,但大部分会因为以下两个原因变得不切实际:首先,它们需要开发人员花时间去学习一种无法在其它情况下使用的查询语言,其次,它们还不够健壮到能处理不可避免的对目标 Web 页面的简单更改。 在本文中,将讨论使用标准 Web 技术—— HTML、XML 和 Java ——开发的一种 基于 Web 的数据挖掘方法。这种方法即使不比其它专用方法更强大,也和其它方法不相上下,并且对于那些已经熟悉 Web 技术的人来说,只需要付出很少的努力就可以收到很好的效果。另外,本文还附送了许多开始数据抽取所需的代码。 HTML:优点与缺点 尽管存在这些问题,但是 HTML 在数据挖掘方面仍然具有优势。您所感兴趣的数据通常可以用 HTML 树中深度嵌套的单 个 <table> 或 <div> 标记隔离开来。这使得抽取过程可以专门在文档的一小部分内执行。在缺少客户机端脚本的情况下,只有一种定义下拉菜单和其它数据列表的方法。HTML 的这些方面允许我们在一旦拥有可用格式的数据时能集中精力于数据抽取。 背景技术 幸好有一个解决方案可以改正 HTML 页面设计的薄弱之处。Tidy(可以从一些编程语言中获取的库)是一个免费使用的产品,可用于改正 HTML 文档中的常见错误并生成格式编排良好的等价文档。还可以使用 Tidy 来 生成 XHTML(XML 的子集)格式的这些文档。(请参阅参考资料)。 本文中的代码示例是用 Java 编写的,并且在编译和运行它们时,需要在您系统 的 classpath 中存在 Tidy jar 文 件。它们还需要通过 Apache 项目、Xerces 和 Xalan 使 XML 库可 用。这两个库都基于 IBM 提供的代码并分别控制 XML 语法分析 和 XSL 变换。这三种库中的每一个都可从 Web 上免费获取,要找到它们,可以追随上述链接或参考本文后面的参考资料。理解 Java 编程语言、XML 和 XSL 变换将对您理解以下示例有帮助。有关这些技术的参考资料,可以在本文后面找到。 方法概述和示例简介 图 1 举例说明了抽取的全过程。Web 页面只有在创建了一个可合并到现有数据集的数据集后才会被检索和处理。 图 1. 概要说明抽取过程
标识数据源并把它映射成 XHTML。 获取信 XHTML
格式的源信息 图 2. 华盛顿州西雅图的 Yahoo! Weather Web 页面
信息源是否是在可靠的网络连接上生成可靠的数据? 信息源从现在起将存在多久?一个星期、一个月或甚至一年? 一旦确定了信息源,我们在抽取过程中的第一步就是将数据 从 HTML 转换成 XML。我们将通过构造名为 XMLHelper(由 static helper 函数 组成)的 Java 类来完成这一任务以及其它与 XML 相关任务。这个类的全部信息源可以 通过以下到 XMLHelper.java 和 XMLHelperException.java 的 链接找到。随着本文的继续展开,我们将构建这个类的方法。 我们使用 Tidy 库提供的函数在 XMLHelper.tidyHTML() 方法中执行 转换。这个方法接受 URL 作为一个参数并返回一个“XML 文档”作 为结果。当调用此方法或任何其它与 XML 相关的方法时,请仔细检查是否有任何异 常。清单 1 中显示了执行这些操作的 代码。图 3 显示了代码结果,Microsoft 的 Internet Explorer XML 查看器使用 Weather 页面中的 XML。 图 3. 转换成 XHTML 的 Yahoo! Weather Web 页面
完成这一任务的最简单的办法通常是,首先检查 Web 页面,然后使用 XML。只需要看一下页面,就可以知道我们正在查找的信息位于页面的中上部区域中。即使对 HTML 的熟悉程度非常有限,也很容易推断出我们正在查找的数据可能都包含在同一 个 <table> 元素下,并且这个表可能总是包含 象“Appar Temp”和“Dewpoint”这样的字,无论当天的数据可能是什么。 记下我们观察到的内容,现在要考虑页面所生成的 XHTML。搜 索“Appar Temp”的文本(如图 4 所示)说明该文本确实在一个包含我们所需的所有数据的表中。我们将把该表作为引用点或锚。 图 4:通过查找包含文本“Appar Temp”的表找到锚
/html/body/center/table[6]/tr[2]/td[2]/table[2]/tr/td/table[6] 这个表达式指定了从根 <html> 元素到锚的路径。这个普通的方法将导致我们对页面布局的修改非常容易遭到破坏。较好的方法是根据周围的内容指定锚。通过使用这个方法,我们把 XPath 表达式重新 构造成: //table[starts-with(tr/td/font/b,'Appar Temp')] ...更好一些,可以利用 XSL 将 XML 树转换成字符串的方法: //table[starts-with(normalize-space(.), 'Appar Temp')] 将数据映射成 XML <xsl:output> 元素仅告诉处理器我们希望的的变换结果 是 XML。第一个,<xsl:template> 建立名 为 <xsl:apply-templates> 的根元素以搜索锚。第二个,<xsl:template> 让我们只匹配需要匹配的内容。最后那个,<xsl:template> 在 match 属性中定义锚,然后告诉处理器跳到我们尝试挖掘的温度与湿度数据。 当然,只编写 XSL,作业将不会完成。我们还需要一个执行转换的工具。因此, 我们利用 XMLHelper 类方法对 XSL 进行语法分析并执行这个转换。执行这些任务的方法分别名为 parseXMLFromURL() 和 transformXML()。清单 3 给出了使用这些方法的 代码。 清单 3 /** public static void main(String args[]) { 合并与处理结果 WeatherExtractor.java 文件中给出了用于运行整个过程的代码。我把程序执行调度任务留给读者,因为执行这些任务的与系统相关的方法通常比简单的编程方法高级。图 5 显示 了每天运行一次 WeatherExtractor,共运行四天的结果。 图 5. Web 抽取的结果
这种方法与想象中的一样简单。通过明智地选择可靠的数据源以及在这些数据源中选取与内容相关但与格式无关的锚,可以使您拥有一个维护成本低廉,可靠的数据抽取系统。并且,根据经验级别和要抽取的数据量,您可以在一小时之内就能安装与运行它。 参考资料 关于作者
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… |
|
|