[JAVA]自动抽取用 HTML、XML 和 Java 编写的信息

kettle案例4.2.1--抽取Web数据---HTML网页的数据抽取 抽取Web数据---HTML网页的数据抽取 阅读详情
不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源。但是,它的结构使它很难用系统的方法来利用信息。本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所需的以 Web 方式发布的信息。 在信息时代快速成长起来的万维网导致各种各样的公用信息被大量分发。 不幸的是,尽管作为信息主要载体的 HTML 提供了一种方便地向读者呈现信息的方法, 但它可能并不是一个很好的可以从中自动抽取与数据驱动的服务或应用程序相关的信息的结构。 已经尝试了多种方法来解决这个问题。大多数方法都采用一些专用查询语言的形式 把 HTML 页面的各个部分映射成代码,而这些代码将 Web 页面上的信息填入到数据库 中。尽管这些方法可能提供一些好处,但大部分会因为以下两个原因变得不切实际:首先,它们需要开发人员花时间去学习一种无法在其它情况下使用的查询语言,其次,它们还不够健壮到能处理不可避免的对目标 Web 页面的简单更改。 在本文中,将讨论使用标准 Web 技术―― HTML、XML 和 Java ――开发的一种 基于 Web 的数据挖掘方法。这种方法即使不比其它专用方法更强大,也和其 它方法不相上下,并且对于那些已经熟悉 Web 技术的人来说,只需要付出很少 的努力就可以收到很好的效果。另外,本文还附送了许多开始数据抽取所需的代码。 HTML:优点与缺点 HTML 通常是一个很难用程序手段处理的媒体。Web 页面中的大多数内容描述与数据驱动 的系统无关的格式编排,并且,由于要动态添加标题以及编写其它服务器端脚本,所以文档 结构可能在每次连接到页面时都需要进行更改。又因为所有 Web 页面主要部分的格式编排 不合理,所以使问题变得更为复杂,其结果是现在的 Web 浏览器在进行 HTML 语法分析 时非常不严谨。 尽管存在这些问题,但是 HTML 在数据挖掘方面仍然具有优势。您所 感兴趣的数据通常可以用 HTML 树中深度嵌套的单 个
或
标记隔离开来。 这使得抽取过程可以专门在文档的一小部分内执行。在缺少客户机端脚本 的情况下,只有一种定义下拉菜单和其它数据列表的方法。HTML 的这些方面允许 我们在一旦拥有可用格式的数据时能集中精力于数据抽取。 背景技术 这里描述的数据挖掘技术的关键是把现有的 Web 页面转换成 XML,或转 换成 XHTML 可能更适当,并使用众多工具中的一小部分来处理 XML 结构的数据, 以检索出适当的数据。 幸好有一个解决方案可以改正 HTML 页面设计的薄弱之处。Tidy(可以从一些编程语言中获取的库)是一个免费使用的产品,可用于改正 HTML 文档中的常见错误并生成格式编排良好的等价文档。还可以使用 Tidy 来 生成 XHTML(XML 的子集)格式的这些文档。(请参阅 参考资料)。 本文中的代码示例是用 Java 编写的,并且在编译和运行它们时,需要在您系统 的 classpath 中存在 Tidy jar 文 件。它们还需要通过 Apache 项目、Xerces 和 Xalan 使 XML 库可 用。这两个库都基于 IBM 提供的代码并分别控制 XML 语法分析 和 XSL 变换。这三种库中的每一个都可从 Web 上免费获取,要找到 它们,可以追随上述链接或参考本文后面的参考资料。理解 Java 编程 语言、XML 和 XSL 变换将对您理解以下示例有帮助。有关这些技术的 参考资料,可以在本文后面找到。 方法概述和示例简介 我们用示例的 方式来介绍数据抽取的方法。假设我们有兴趣跟踪几个月以来每天不同时间测得 的华盛顿州西雅图的温度和湿度级别。假如,没有现成的软件用于 报告此类信息以满足我们的需求,我们仍然拥有从众多公共网站收集此类信息的机会。 图 1举例说明了抽取的全过程。Web 页面 只有在创建了一个可合并到现有数据集的数据集后才会被检索和处理。 图 1. 概要说明抽取过程 只需要很少的几个步骤,我们就可以拥有一个收集我们信息的合适而可靠的系 统。这里列出这些步骤是为了提供该过程的简要概述,图 1 中显示的是这一过程 的较高形式。 标识数据源并把它映射成 XHTML。 查找数据内的引用点。 将数据映射成 XML。 合并结果并处理数据。 这些步骤中的每一步都将加以详细说明,并将提供执行它们所必需的代码。 获取信 XHTML 格式的源信息 为了抽取数据,当然需要知道可以在哪里找到它。在大多数情况下,源信息是 显而易见的。如果要从 developerWorks 收集文章的标题和 URL,我们 将使用 http://www.ibm.com/developerWorks作为我们的目标。在天气这个例子中,我们有若干可供选择的信息源。我们将 在示例中使用 Yahoo!Weather,但使用其它信息源也具有同等效果。 我们将特别跟踪 URL: http://weather.yahoo.com/forecast/Seattle_WA_US_f.html上 的数据。 图 2显示了这个页面的屏幕快照。 图 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 页面还是源 XHTML 视图中的绝大多数的信息都与我们完 全无关。我们接下来的一个任务是在 XML 树中找出一个特定区域,我们可从中 抽取我们的数据而无需关心外来信息。对于更复杂的抽取, 我们可能需要在单个页面上找出这些区域的若干实例。 完成这一任务的最简单的办法通常是,首先检查 Web 页面,然后使用 XML。只需 要看一下页面,就可以知道我们正在查找的信息位于页面的中上部区域中。即使对 HTML 的熟悉程度 非常有限,也很容易推断出我们正在查找的数据可能都包含在同一 个
元素下,并且这个表可能总是包含 象“Appar Temp”和“Dewpoint”这样的字,无论当天的数据可能是什么。 记下我们观察到的内容,现在要考虑页面所生成的 XHTML。搜 索“Appar Temp”的文本(如 图 4所示) 说明该文本确实在一个包含我们所需的所有数据的表中。我们将把 该表作为引用点或锚。 图 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 文本文件获取。 元素仅告诉处理器我们希望的的变换结果 是 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 文件 中给出了用于运行整个过程的代码。我把程序执行调度任务留给读者, 因为执行这些任务的与系统相关的方法通常比简单的编程方法高级。 图 5 显示 了每天运行一次 WeatherExtractor ,共运行四天的结果。 图 5. Web 抽取的结果 结束语 在本文中,我们已经描述并证明从目前存在的最大信息来源――万维网――抽取 信息的强壮方法的基本原则。我们还讨论了能够使任何 Java 开发人员花最少的精力和 具备最少的抽取经验就可以开始他们自己抽取工作所必需的编码工具。尽管本文中的示例仅 集中于抽取有关华盛顿,西雅图天气的信息,但是这里出现的所有代码几乎 都可以在任何数据抽取中重复使用。事实上,除 对 WeatherExtractor 类进行少许更改外, 需要为其它数据挖掘项目进行更改的代码只有 XSL 变换代码(顺便提一下,它从 不需要编译)。 这种方法与想象中的一样简单。通过明智地选择可靠的数据源以及在这些数据源中 选取与内容相关但与格式无关的锚,可以使您拥有一个维护成本低廉,可靠的数据抽取 系统。并且,根据经验级别和要抽取的数据量,您可以在一小时之内就能安装与运行它。 参考资料 您可以参阅本文在 developerWorks 全球站点上的 英文原文. Tidy for Java由 Sami Lempinen维护,并 可从 SourceForge下载。 XML 库、 Xerces和 Xalan可 以从 Apache Project网站获取。 有关 XML 的更详细信息,developerWorks 提供了一个与该技术相关的 专区。 有关 XSL 和 XPath 的教程有很 多,可以使用您喜爱的 Web 搜索引擎找到它们。 Jussi Myllymaki 著有一篇有关 ANDES 系统中 Web 搜寻与数据抽取之间关系的论文,刊登在香港的 WWW10 上。 这里有一些 使网站 个性化的技术,以及使站点性能最大化的提示。 “管理网 站性能”介绍了如何对网站性能从浏览器到数据库服务器以及旧系统,进行微调。
数据抽取(加图) TSV文件的抽取 CSV文件抽取 HTML网页的数据抽取 XML文件的数据抽取 ![在这里插入图片描述](https://img-blog.csdnimg.cn/55abc06ca4b1494ead44ec05721e2202.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s, ... 阅读详情

相关推荐

数据清洗 黑马程序员 第四章数据抽取——阅读笔记

4.1 抽取文本数据 在实际应用中,常用的文本文件类型有两种,分别是TSV文件和CSV文件。 4.1.1 TSV文件的抽取 1.打开Kettle工具,创建转换 使用Kettle工具创建一个转换tsv_extract,添加“文本文件输入”控件、“表输出”控件以及Hop跳连接线,用于实现TSV文件数据的抽取功能,具体如下图1所示: 图1 创建转换tsv_extract 2.1.2 CSV文件的抽取 ...

m0_53823329的博客 1596

数据挖掘各种算法JAVA的实现方法

数据挖掘-关联分析频繁模式挖掘Apriori、FP-Growth及Eclat算法的JAVA及C++实现: 网址:http://blog.youkuaiyun.com/yangliuy/article/details/7494983 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上) http://blog.youkuaiyun.com/yangliuy/ar

我们的家 2万+

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

ETL讲解(很详细!!!)

ETL讲解(很详细!!!)   ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计的好坏直接关接到BI项目的成败。          ETL的设计分三部分:数据抽取、数据的清洗转换、数据...

weixin_34220179的博客 1万+

高通9008模式隐藏技巧:不拆机用ADB命令+Diag协议进入EDL

本文深入解析高通EDL模式(紧急下载模式)的技术原理与实战应用,详细介绍了通过ADB命令和Diag协议无需拆机进入EDL的方法。涵盖硬件/软件触发方案、跨平台工具配置、Firehose协议解析及设备救砖流程,为开发者提供从基础到进阶的完整指南。

weixin_29191761的博客 1126

批量读取_MCGS触摸屏如何实现批量读取modbus数据的方法?

前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。一、工具1.modsim:仿真PLC或者第三方设备。2.MCGS组态软件3.串口软件:在电脑中生成两不...

weixin_32511509的博客 8160

ETL的基础知识,看完你就全明白了!

深度解析了ETL的基础概念以及实现方案,很值得一看~

飘渺Jam的博客 11万+

QGIS实用功能:加载天地图与下载指定区域遥感影像

本文聚焦 QGIS 软件实用功能,详细介绍在 QGIS 中加载天地图及其他常用底图(如 Google Maps、Bing Maps)的完整流程,涵盖天地图插件安装、密钥获取与配置、插件拓展使用等操作。同时,以 上海市瑞金二路街道为例,分步讲解下载指定区域遥感影像的方法,包括图层选择、坐标系设置、分辨率调整等关键参数配置。此外,还介绍了影像精准裁剪技巧,为 GIS 数据获取与处理提供实用指导,助力用户高效使用 QGIS 开展地理信息相关工作。

weixin_43679228的博客 7440

基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息

简介: 不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源。但是,它的结构使它很难用系统的方法来利用信息。本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所需的以 Web 方式发布的信息。 在信息时代快速成长起来的万维网导致各种各样的公用信息被大量分发。 不幸的是,尽管作为信息主要载体的 HTML 提供了一种方便地向读者呈现信息的方法, 但它可能并不是...

weixin_33816300的博客 117

Python 爬虫实战:爬取豆瓣电影 Top250 完整数据

本文基于Python技术实现了豆瓣电影Top250榜单数据的合规爬取与分析。针对豆瓣电影页面的分页结构、反爬机制等特点,采用requests库获取数据,结合BeautifulSoup解析HTML节点,并通过正则表达式提取电影名称、评分、导演等核心字段。爬虫实现了随机User-Agent、请求间隔控制等反爬规避策略,严格遵守豆瓣社区使用规范。最终数据经清洗后存储为结构化Excel文件,并提供了数据可视化与增量更新方案。该方案为影视研究提供了可靠的数据获取方法,同时确保符合非商业使用、适度爬取等合规要求。

2503_91057718的博客 3460

【AI面试】2026 AI Agent 应用开发|应届生简历模板 + 完整学习路线图(校招可直接复用)

很多同学学完 RAG、Agent 之后,不知道简历怎么写,项目写成 “调用大模型 API 实现聊天机器人”,投出去几乎没有面试。AI Agent 应用开发,本质还是软件开发岗位。简历要突出工程能力、踩坑优化、问题解决,不要只堆砌 AI 关键词。注意:本文针对【AI 应用开发 / Agent 应用工程师】本科校招;不适合大模型训练、微调算法岗。AI Agent 应用开发岗位,不是只会写提示词、调用 API 就可以拿到 offer。拥有传统软件工程基本功,同时懂大模型、RAG、Agent 工程落地的开发者。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 305

4.2HTML网页的数据抽取

数据提取

qq_52035534的博客 924

OpenCloudOS9操作系统搭建Confluence8.2.1+Jira企业级WIKI

Atlassian Confluence是一个专业的企业知识管理与协同软件,可用于构建企业wiki

背锅神童的博客 1022

基于GATE的信息抽取系统介绍

1 GATE介绍 GATE是一个应用广泛的信息抽取的开放型基础架构,为用户提供图形化的开发环境,被许多自然语言处理项目尤其是信息抽取研究项目所采用。该系统对语言处理的各个环节――从语料收集、标注、重用到系统评价均能提供很好的支持。 GATE设计的三个主要目的是: 1) 为语言处理软件提供基础架构,提供文本处理的总体组织结构。 2) 提供可重用的用于自然语言处理的组件和...

i'm thinking... 1021

dolphinscheduler集群服务一键安装启动实现流程剖析

通过以上分析我们基本梳理清楚了整个dolphinscheduler项目的一键安装启动逻辑, 我们现在在通过一张图正好理一下整个实现流程。关于一键停止集群服务及一件查询集群各个角色服务实例运行状态的实现也都在stop-all.sh/status-all.sh及dolphinscheduler-daemon.sh这三个脚本中, 有兴趣自行研究。写这篇文章的核心目的不仅在于给大家分享如何优秀的开源项目的一键安装部署的实现过程。

最爱嫣夜来 1207

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

第四章——数据抽取

本文主要实现的是文本文件数据抽取和web数据抽取,抽取的结果均保存到数据库中的数据表中。

m0_73539526的博客 3323

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第四章 数据抽取

利用kettle开发工具,实现一些简单的数据抽取案例。

qq_56907657的博客 1153

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

第4章 数据抽取

利用kettle工具进行数据抽取

qq_63450701的博客 326

Java解析xml文件和html文件

1.解析XML文件 public void getXml() { try { String nameT=""; File f = new File("C:\\Users\\dj\\Desktop\\test.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Doc

努力奋斗 1078

java htmlparser 代理_Java资源网 用HTMLParser从HTML中攫取你所需的信息

本文并非想通过分析HTML的语法然后从中解析出数据,这样做实现困难而且没有什么实际应用的意义,或者应该这样说:我们并不想自己去实现一个HTML语法的分析器。我们要做的仅仅是从HTML中提取我们所需的信息。不同于XML这种对格式要求非常严格的标志语言,HTML在推出时并没有对其格式进行严格的定义,比如HTML中标签并不一定要成对出现,但是又要求浏览器能尽量的正确显示其所要表达出来的内容。浏览器经过多...

weixin_32656107的博客 172
上一篇: [JAVA]example for jfreechart
下一篇: 如何在Solaris下让jfreechart显示中文
Three_H
博客等级 码龄22年 1粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值