网站自动采集发布 理解Java编程语言、XML和XSL变换将对您理解

优采云 发布时间: 2021-02-21 10:04

  网站自动采集发布 理解Java编程语言、XML和XSL变换将对您理解

  标签是隔离的。这允许提取过程仅在文档的一小部分内执行。在没有客户端脚本的情况下,只有一种方法可以定义下拉菜单和其他数据列表。 HTML的这些方面使我们可以在拥有可用格式的数据后专注于数据提取。

  背景技术

  这里描述的数据挖掘技术的关键是将现有的Web页面转换为XML或XHTML,这可能更合适,并使用许多工具中的一小部分来处理XML结构化数据以检索适当的XML。数据。

  幸运的是,有一种解决方案可以纠正HTML页面设计的弱点。 Tidy(某些编程语言提供的库)是一种免费使用的产品,可用于纠正HTML文档中的常见错误并生成格式正确的等效文档。您还可以使用Tidy以XHTML(XML的子集)格式生成这些文档。 (请参阅)。

  本文中的代码示例是用Java编写的,并且在编译和运行它们时,Tidy jar文件必须位于系统的类路径中。他们还需要使XML库可通过Apache项目,Xerces和Xalan使用。这两个库基于IBM提供的代码,分别控制XML解析和XSL转换。这三个库中的每一个都可以从Web上免费获得,要找到它们,可以单击上面的链接,或参考本文后面的参考。了解Java编程语言,XML和XSL转换将帮助您理解以下示例。有关这些技术的参考资料可以在本文后面找到。

  方法概述和示例介绍

  我们使用示例介绍数据提取方法。假设我们对跟踪华盛顿州西雅图市的温度和湿度水平感兴趣,该水平在几个月中的每天不同时间进行测量。如果没有现成的软件来报告此类信息以满足我们的需求,我们仍然有机会从许多公众手中采集此类信息网站。

  整个提取过程的示例。仅在创建可以合并到现有数据集中的数据集之后,才能检索和处理网页。

  图1.概述了提取过程

  

  仅需几个步骤,我们就可以拥有一个合适且可靠的系统来采集我们的信息。此处列出了这些步骤,以简要概述该过程。图1显示了此过程的更高版本。

  标识数据源并将其映射到XHTML。在数据中找到参考点。将数据映射到XML。合并结果并处理数据。

  将详细解释每个步骤,并将提供执行这些步骤所需的代码。

  获取XHTML格式的源信息

  为了提取数据,您当然需要知道可以在哪里找到它。在大多数情况下,源信息是显而易见的。如果我们想从developerWorks采集文章的标题和URL,我们将以此为目标。在天气示例中,我们有多种信息来源可供选择。我们将使用Yahoo!在我们的例子中!天气,但使用其他信息源具有相同的效果。我们将专门跟踪URL:上的数据。显示此页面的屏幕截图。

  图2. Yahoo!华盛顿西雅图的天气网页

  

  在考虑信息来源时,请牢记以下要素:

  在寻找可以在动态环境中工作的强大解决方案时,我们的工作将是最容易提取可用的最可靠和稳定的信息源。

  确定了信息源之后,提取过程中的第一步就是将数据从HTML转换为XML。我们将通过构造一个称为XMLHelper的Java类(由静态辅助函数组成)来完成此任务以及与XML有关的其他任务。可以通过以下指向XMLHelper.java和XMLHelperException.java的链接找到此类的完整信息源。随着本文的继续,我们将构建此类的方法。

  我们使用Tidy库提供的函数在XMLHelper.tidyHTML()方法中执行转换。此方法接受URL作为参数,并返回“ XML文档”作为结果。调用此方法或任何其他与XML相关的方法时,请仔细检查是否存在异常。清单1显示了执行这些操作的代码。将显示代码结果,并且Microsoft的Internet Explorer XML查看器使用“天气”页面中的XML。

  图3. Yahoo!天气网页转换为XHTML

  

  找到数据的参考点

  请注意,网页或源XHTML视图中的大多数信息与我们完全无关。我们的下一个任务之一是在XML树中找到特定区域,我们可以从中提取数据而无需担心外部信息。对于更复杂的提取,我们可能需要在单个页面上找到这些区域的多个实例。

  完成此任务的最简单方法通常是先检查Web页,然后使用XML。只需查看页面即可知道我们正在寻找的信息位于页面的上部中间区域。即使对HTML的熟悉程度非常有限,也很容易推断出我们要查找的数据可能全部收录在同一元素下,并且该表可能始终收录“ Appar Temp”和“ Dewpoint”之类的词,无论当天的数据可能是什么。

  记下我们观察到的内容,现在我们需要考虑页面生成的XHTML。搜索“ Appar Temp”的文本(如图所示)表明该文本确实在收录我们需要的所有数据的表中。我们将使用此表作为参考点或锚点。

  图4:通过查找收录文本“ Appar Temp”的表来查找锚点

  

  现在,我们需要找到该锚点的方法。因为我们准备使用XSL转换XML,所以我们可以使用XPath表达式来完成此任务。我们将使用以下普通表达式:

  /html/body/center/table[6]/tr[2]/td[2]/table[2]/tr/td/table[6]

  此表达式指定从根元素到锚点的路径。这种通用方法会使我们对页面布局的更改容易被破坏。更好的方法是根据周围的内容指定锚点。通过使用此方法,我们将XPath表达式重构为:

  //table[starts-with(tr/td/font/b,'Appar Temp')]

  ...更好的是,您可以使用XSL将XML树转换为字符串:

  //table[starts-with(normalize-space(.), 'Appar Temp')]

  将数据映射到XML

  使用此定位点,我们可以创建实际提取数据的代码。该代码将以XSL文件的形式出现。 XSL文件的目的是识别锚点,指定如何从锚点(短时跳转)获取我们要查找的数据,并以所需的格式构造XML输出文件。这个过程实际上比想象的要简单得多。清单2显示了将执行此过程的XSL代码,也可以将其作为XSL文本文件获得。

  The

  element仅告诉处理器我们想要的转换结果是XML。首先,创建一个名为搜索锚点的根元素。其次,让我们只匹配需要匹配的内容。最后一个,在match属性中定义锚点,然后告诉处理器跳转到我们尝试挖掘的温度和湿度数据。

  当然,只需编写XSL,作业就不会完成。我们还需要一个工具来执行转换。因此,我们使用XMLHelper类方法来解析XSL并执行此转换。执行这些任务的方法称为parseXMLFromURL()和transformXML()。清单3显示了使用这些方法的代码。

  清单3

  /**

* Retrieve the XHTML file written to disk in the Listing 1

* and apply our XSL Transformation to it. Write the result

* to disk as XML.

*/

public static void main(String args[]) {

try {

Document xhtml = XMLHelper.parseXMLFromURLString("file://weather.xml");

Document xsl = XMLHelper.parseXMLFromURLString("file://XSL/weather.xsl");

Document xml = XMLHelper.transformXML(xhtml, xsl);

XMLHelper.outputXMLToFile("XML" + File.separator + "result.xml");

} catch (XMLHelperException xmle) {

// ... Do Something ...

}

}

  合并和处理结果

  如果我们仅执行一次数据提取,那么现在完成。但是,我们不只是想知道某个时刻的温度,还想知道几个不同时刻的温度。现在,我们需要做的是重复提取过程并将结果合并到单个XML数据文件中。我们可以再次使用XSL执行,但是最终将创建一个方法来将XSL文件合并到XMLHelper类中。 mergeXML()方法允许我们将当前提取中获得的数据合并到收录先前提取数据的存档文件中。

  用于运行整个过程的代码在WeatherExtractor.java文件中给出。我将程序执行计划任务留给读者,因为执行这些任务的系统相关方法通常比简单的编程方法先进。每天四天显示一次运行WeatherExtractor的结果。

  图5. Web提取结果

  

  结论

  在本文中,我们描述并证明了从当前存在的最大信息源(万维网)中提取信息的可靠方法的基本原理。我们还讨论了使任何Java开发人员能够以最少的工作量和最少的提取经验开始自己的提取工作所必需的编码工具。尽管本文中的示例仅侧重于提取有关华盛顿和西雅图天气的信息,但此处介绍的几乎所有代码都可以在任何数据提取中重复使用。实际上,除了对WeatherExtractor类进行一些更改外,其他数据挖掘项目唯一需要更改的代码是XSL转换代码(顺便说一下,它永远不需要编译)。

  此方法非常简单。通过明智地选择可靠的数据源并从这些与内容相关但与格式无关的数据源中选择锚点,您可以拥有一个维护成本低且可靠的数据提取系统。而且,根据经验水平和要提取的数据量,您可以在一小时内安装并运行它。

  参考资料

  转载:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线