第3章Web数据抽取
本章学习目标
 了解数据抽取的概念
 了解Web数据抽取的原理
 掌握使用Kettle实现Web数据抽取的应用
3.1Web数据抽取基础
1. 数据抽取概述

数据抽取是指把数据从数据源读出来,一般用于从源文件和源数据库中获取相关的数据,也可以从Web数据库中获取相关数据。
数据抽取的两个常用方式是全量抽取和增量抽取。全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据原封不动地从数据库中抽取出来,并转换成自己的ETL 工具可以识别的格式,全量抽取通常比较简单。增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据。在ETL 使用过程中,增量抽取较全量抽取应用更广。
图31显示了从数据库中抽取数据的过程。一般来说,在进行数据抽取的时候,需要根据不同情况制定不同的抽取规则,再将抽取规则转换为对应的查询语句实现。


图31从数据库中抽取数据的过程


目前增量数据抽取中常用的捕获变化数据的方法主要有以下5种。
1) 触发器方式
触发器方式是指在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除3个触发器,每当源表中的数据发生变化,变化的数据就被相应的触发器写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。
优点: 数据抽取的性能高,ETL加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
缺点: 要求业务表建立触发器,对业务系统有一定的影响。




2) 时间戳方式
时间戳方式是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。当进行数据抽取时,通过比较系统时间与时间戳字段的值决定抽取哪些数据。有的数据库的时间戳支持自动更新,即表的其他字段的数据发生改变时,自动更新时间戳字段的值。有的数据库不支持时间戳的自动更新,这就要求业务系统在更新业务数据时手工更新时间戳字段。
优点: 与触发器方式一样,时间戳方式的性能也比较好,ETL系统设计清晰,源数据抽取相对清楚简单,可以实现数据的递增加载。
缺点: 时间戳维护需要由业务系统完成,对业务系统也有很大的倾入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间戳操作,工作量大,改动大,风险大; 另外,无法捕获对时间戳以前数据的删除和更新操作,在数据准确性上受到了一定的限制。
3) 全表删除插入方式
全表删除插入方式是指每次ETL操作均删除目标表数据,由ETL全新加载数据。
优点: ETL加载规则简单,速度快。
缺点: 对于数据的管理不方便,当业务系统产生删除数据操作时,综合数据库不会记录到所删除的历史数据,不可以实现数据的递增加载; 同时对于目标表所建立的关联关系,需要重新进行创建。
4) 全表比对方式
全表比对方式是采用MD5校验码,ETL工具事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表主键以及根据所有字段的数据计算出来的MD5校验码,每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,如有不同,进行更新操作,如目标表中没有该主键值,表示还没有该记录,即进行插入操作。
优点: 对已有系统表结构不产生影响,不需要修改业务操作程序,所有抽取规则由ETL完成,管理维护统一,可以实现数据的递增加载,没有风险。
缺点: ETL比对较复杂,设计较复杂,速度较慢。与触发器和时间戳方式中的主动通知不同,全表比对方式是被动地进行全表数据的比对,性能较差。当表中没有主键或唯一列且含有重复记录时,全表比对方式的准确性较差。
5) 日志表方式
日志表方式是指在业务系统中添加系统日志表,当业务数据发生变化时,更新维护日志表内容,当进行ETL加载时,通过读日志表数据决定加载哪些数据及如何加载。
优点: 不需要修改业务系统表结构,源数据抽取清楚,速度较快,可以实现数据的递增加载。
缺点: 日志表维护需要由业务系统完成,需要对业务系统的业务操作程序进行修改,记录日志信息。日志表维护较为麻烦,对原有系统有较大影响,工作量较大,改动较大,有一定风险。
2. Web数据抽取
随着信息技术的不断发展,Web上的信息内容和数据呈现出爆炸式的增长,从而使Web逐渐成为一个巨大、丰富、分布广泛的数据源。因此,有效地在Web上实现数据的抽取技术为进一步分析和挖掘提供了数据支持,具有十分重要的应用价值和现实意义。通过Web数据集成可以实现对Web数据的有效整合,为大数据分析提供信息源支持。Web数据抽取技术随着互联网技术的发展、网页信息的扩充而产生,从手工到半自动,再到全自动的技术完善,Web数据抽取技术成为大数据分析的主要技术,并在此基础上形成Web数据集成系统。Web数据集成系统中的数据,不仅可以为各类大数据分析提供信息支持,还可以为Web数据集成系统自身集成提供帮助。
Web数据抽取技术的作用和意义主要体现在: 首先,Web数据抽取是实现Web数据集成的基础和保证,Web数据抽取可以完成对Web页面中广泛存在的结构化数据和半结构化数据的抽取工作,为Web数据集成奠定数据基础; 其次,Web数据抽取可以实现对Web数据的理解,Web网页中的数据大部分是半结构化数据,通过Web数据抽取技术的实现,可以对抽取到的Web数据元素进行语言标注; 最后,Web数据抽取为Web数据集成中的其他环节提供数据服务,Web数据抽取可以利用已抽取的Web数据对象间的联系,发现Web实体间的潜在联系。例如,在Web数据集成系统中,利用Web实体间的联系,可以形成一个基于这些联系的实施知识库,为进一步实施Web数据集成的数据整合、数据分析等服务提供数据支持。
一般来讲,目前Web数据抽取的实现有以下几步。
(1) 确立采集目标,即由用户选择目标网站。
(2) 提取特征信息,即根据目标网站的网页格式,提取出采集目标数据的共性。
(3) 网络信息获取,即利用工具自动地把页面数据存到数据库。
值得注意的是,由于Web上的信息大多以HTML文档的形式出现,且HTML文档主要是用于浏览,而不是用于数据操作和应用的。因此,Web信息抽取在传统的信息提取研究的基础上,将重点放在如何将分布在Internet上的半结构化HTML页面中的某些特定信息抽取出来,转化为结构化的形式保存在数据库中供用户查询、分析使用。
所谓半结构化数据,其实是结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层。因此,它也称为自描述的结构。这种灵活性可能使查询处理更加困难,但它也具有显著的优势。
图32所示为JSON在Web中的存储形式。


图32JSON在Web中的存储形式


3.2Web数据抽取的实现
3.2.1Kettle数据抽取原理

Web数据抽取可以依靠各种编程或开源软件实现。例如,可以通过Kettle抽取Web数据。通过Kettle获取的网页数据以结构化数据和半结构化数据为主,

图33查询组件

如人们熟悉的XML格式、JSON格式等。本节主要讲解使用Kettle实现Web页面中的数据抽取。
在Kettle中要实现Web数据抽取,可以在“查询”列表中利用HTTP client、HTTP post、REST client以及Web 服务查询等多个步骤完成,如图33所示。

1. HTTP client
Kettle抽取网页数据的原理主要在于Kettle使用了Apache VFS系统,VFS系统可以像处理文本文件一样处理HTTP文件,所以用户可以在Kettle 中使用文本文件输入等步骤并直接将统一资源定位符(Uniform Resource Locator,URL)作为文件名使用。
HTTP client是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的、支持HTTP协议的客户端编程工具包,并且支持HTTP最新的版本和建议。HTTP client相比传统jdk自带的URLConnection,增强了易用性和灵活性,它不仅使客户端发送HTTP请求变得容易,而且也方便开发人员测试接口(基于HTTP),既提高了开发的效率,也方便提高代码的健壮性。现在,HTTP client已经应用在很多项目中,如Apache Jakarta上很著名的两个开源项目Cactus和HTML Unit,都使用了HTTP client。
HTTP client有以下几个主要特点。
(1) 基于标准、纯净的Java语言,实现了HTTP 1.0和HTTP 1.1。
(2) 以可扩展的面向对象的结构实现了HTTP全部的方法(GET、POST、PUT、DELETE、HEAD、OPTIONS以及TRACE)。
(3) 支持HTTPS协议。
(4) 通过HTTP代理建立透明的连接。
(5) 便携可靠的套接字工厂使它更容易使用第三方解决方案。
(6) 直接获取服务器发送的Response Code和 Headers。
(7) 在HTTP 1.0和HTTP 1.1中利用Keep Alive保持持久连接。
(8) 设置连接超时的能力。
2. Web服务查询
Web服务查询也称为Web Service,它是一个平台独立的、低耦合的、自包含的、基于可编程的Web应用程序,同时也是一种跨编程语言和跨操作系统平台的远程调用技术。Web Service以HTTP为基础,通过XML进行客户端和服务器端的通信。通过Web Service可以使运行在不同机器上的不同应用程序不借助附加的、专门的第三方软件或硬件,就可相互交换数据。
其实可以从多个角度理解Web Service。从表面上看,Web Service就是一个应用程序向外界暴露出一个能通过Web进行调用的API(属于一种操作系统或程序接口),也就是说,能用编程的方法通过Web调用这个应用程序。我们把调用这个Web Service的应用程序叫作客户端,把提供这个Web Service的应用程序叫作服务端。从深层次看,Web Service是建立可互操作的分布式应用程序的新平台,是一套标准,它定义了应用程序如何在Web上实现互操作性。
Web Service关键技术与协议如下。
(1) 可扩展标记语言(eXtensible Markup Language,XML): XML是在Web上传输结构化数据的伟大方式,Web Service要以一种可靠的、自动的方式操作数据,HTML满足不了其要求,而XML可以使Web Service以十分方便的方式处理数据。
(2)  简易对象访问协议(Simple Object Access Protocol,SOAP): 用来描述传递信息的格式,是一种简单的基于 XML 的协议,它被设计成在Web上交换结构化和固化的信息。SOAP采用了已经广泛使用的两个协议: HTTP和XML,其中HTTP用于实现SOAP的远程过程调用(Remote Procedure Call,RPC)风格的传输,而XML是它的编码模式。
(3)  Web服务描述语言(Web Service Description Language,WSDL): 用来描述Web Service以及如何访问Web Service。同时,WSDL文档是一个遵循WSDLXML模式的XML文档,WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用。
(4) UDDI (Universal Description Discovery and Integration): 一种用于描述、发现、集成Web Service的技术,它是Web Service协议栈的一个重要部分。通过UDDI,企业可以根据自己的需要动态查找并使用Web服务,也可以将自己的Web服务动态地发布到UDDI注册中心,供其他用户使用。



图34Web Service原理

在具体实现中,SOAP用来描述传递信息的格式; WSDL用来描述如何访问具体的接口; UDDI用来管理、分发、查询Web Service。
Web Service原理如图34所示。


Web Service常见的开发实例如下。
(1) 利用Web Service实现数据添加。
(2) 利用Web Service实现数据删除。
(3) 利用Web Service实现给手机发短信。
3.2.2Kettle数据抽取实现
1. HTTP client数据抽取



视频讲解



【例31】从生成记录中抽取数据。

(1) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“查询”列表中选择HTTP client步骤,拖动至右侧工作区并建立节点连接,如图35所示。

图35HTTP client数据

抽取工作流程





(2) 双击“生成记录”图标,在“限制”输入框中输入1; 设置字段名称为string,类型为String,值为http://services.odata.org/V3/Northwind/Northwind.svc/Products/,如图36所示。



图36设置生成记录(1)


该网址中存储的数据格式为XML类型,网站部分数据如图37所示。



图37网站部分数据


(3) 双击HTTP client图标,在General选项卡中勾选“从字段中获取URL?”,并输入URL字段名为string,结果字段名为result,并在Fields选项卡中获取字段,如图38和图39所示。


图38设置General选项卡





图39获取字段



(4) 保存该文件,运行转换,执行结果如图310所示。


图310运行转换


(5) 可以清楚地看到,已经完成了数据的抽取,如图311所示。






图311数据抽取结果





视频讲解


【例32】抽取XML数据并显示。
(1) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“查询”列表中选择HTTP client步骤,在“输入”列表中选择Get data from XML步骤,在“转换”列表中选择“字段选择”步骤,将其一一拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图312所示。



图312Kettle抽取XML数据工作流程


(2) 双击“生成记录”图标,设置字段名称为url,类型为String,值为http://services.odata.org/V3/Northwind/Northwind.svc/Products/,如图313所示。



图313设置生成记录(2)


(3) 单击“预览”按钮,可查看生成记录的数据,如图314所示。



图314预览生成记录数据


(4) 双击HTTP client图标,勾选“从字段中获取URL?”,在“URL字段名”下拉列表中选择url,在“结果字段名”输入框中输入result,如图315所示。



图315设置HTTP client


(5) 双击Get data from XML图标,在“文件”选项卡中勾选“XML源定义在一个字段里?”,在“XML源字段名”下拉列表中选择result,如图316所示。



图316设置XML文件输入


(6) 在“内容”选项卡中的“循环读取路径”中输入/feed/entry/content/m:properties。该路径是XML语法中的Xpath查询,用于读取网页数据中的节点内容,如图317所示。



图317设置循环读取路径


(7) 在“字段”选项卡中输入以下字段内容,如图318所示。


图318输入字段内容


(8) 双击“字段选择”图标,在“选择和修改”选项卡中输入字段内容,如图319所示。


图319设置“选择和修改”选项卡


(9) 保存该文件,运行转换,可以在执行结果区域的“步骤度量”选项卡中查看该程序的执行状况,如图320所示。



图320查看程序的执行状况


(10) 在执行结果区域的Preview data选项卡中查看该程序抽取网页的数据内容,这里选择前20条数据显示。在结果中显示了产品ID、产品名称以及产品价格,如图321所示。


图321显示抽取的网页数据


【课堂练习】从生成记录中抽取数据并用文本文件输出显示。
制作如图322所示的流程,在HTTP client后用文本文件输出结果。



图322Kettle流程


其中URL为http://sports.sina.com.cn/global/。
生成的文本文件如图323所示。



图323生成的文本文件内容


2. Web Service数据抽取
Kettle可通过两种方式获取Web Service结果,一种是Web服务查询,另一种是利用HTTP POST。下面介绍使用Web服务查询的方式获取Web Service结果。


视频讲解


【例33】使用Web Service抽取天气数据并显示。
(1) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“查询”列表中选择“Web 服务查询”步骤,在“输出”列表中选择“文本文件输出”步骤,将其一一拖动到右侧工作区中,并建立彼此之间的节点连接关系,如图324所示。



图324Web Service数据抽取工作流程


(2) 双击“生成记录”图标,在“限制”输入框中输入1,设置字段名称为localcity,类型为String,值为重庆,如图325所示。


图325生成记录设置


(3) 双击“Web 服务查询”图标,在Web Services选项卡中的URL框中输入http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL,在“操作”中选择getWeatherbyCityName,注意“v2.x/3.0兼容模式”要取消勾选,最后单击“加载”按钮,如图326所示。


图326Web Services设置


该网址为http://www.webxml.com.cn/WebServices/WeatherWebService.asmx,其页面内容如图327所示。


图327网站内容


在该网站中,我们调用了一个接口——getWeatherbyCityName,得到城市的天气情况,如图328所示。


图328网站接口


由于调用了Web服务,因此在前面的URL框中网址最后要加上“?WSDL”。
(4) 在in选项卡中输入名称、WS名称和WS类型分别为localcity、theCityName和string,如图329所示。


图329in选项卡设置


(5) 在getWeatherbyCityNameResult选项卡中输入名称、WS名称和WS类型分别为WeatherbyCityNameResult、getWeatherbyCityNameResult和ArrayOfstring,如图330所示。




图330getWeatherbyCityNameResult选项卡设置


(6) 在“文本文件输出”步骤中设置要保存的文件名为file6.txt。
(7) 保存该文件,运行转换,执行该程序,如图331所示。



图331运行转换


(8) 在保存的文本文件中查看结果,如图332所示。


图332查看保存的文本文件


3.3本章小结
(1) 数据抽取是指把数据从数据源读出来,一般用于从源文件和源数据库中获取相关的数据,也可以从Web数据库中获取相关数据。
(2) 有效地在Web上实现数据抽取技术为进一步分析和挖掘提供了数据支持,具有十分重要的应用价值和现实意义。
(3) Web数据抽取可以依靠各种编程或开源软件实现。例如,可以通过Kettle抽取Web数据。通过Kettle获取的网页数据以结构化数据和半结构化数据为主,如人们熟悉的XML格式、JSON格式等。
(4) 在Kettle中要实现Web数据抽取,可以利用HTTP client、HTTP post、REST client以及Web 服务查询等多个组件完成。
3.4实训
1. 实训目的

通过本章实训了解Web抽取数据的特点,能进行简单的与Web抽取有关的操作。
2. 实训内容
1) 使用Web Service抽取汇率数据并显示
(1) 页面网址为http://webservices.gamasystem.com/exchangerates.asmx,内容如图333所示。该网站通过Web Service提供汇率和货币换算信息。


图333访问的网页页面


在该网站中我们调用了一个接口——GetCurrentExchangeRate,得到货币的汇率情况,如图334所示。



图334抽取的页面


(2) 启动Kettle后,新建转换,在“输入”列表中选择“生成记录”步骤,在“查询”列表中选择“Web 服务查询”步骤,在“输出”列表中选择XML output步骤,并将其分别拖动到右侧工作区中建立节点连接,如图335所示。



图335抽取汇率数据工作流程


(3) 双击“生成记录”图标,在“限制”输入框中输入1,字段内容设置如图336所示。其中,GBP表示英镑; USD表示美元。



图336设置生成记录


(4) 双击“Web 服务查询”图标,在Web Services选项卡中的URL框中输入http://webservices.gamasystem.com/exchangerates.asmx?WSDL,在“操作”下拉列表中选择GetCurrentExchangeRate,注意在本例中要将“v2.x/3.0兼容模式”勾选上,最后单击“加载”按钮,如图337所示。



图337Web Services设置


(5) 在in选项卡中输入名称、WS名称和WS类型,内容如图338所示。


图338in选项卡设置


(6) 在GetCurrentExchangeRateResult选项卡中输入名称、WS名称和WS类型分别为GetCurrentExchangeRateResult、GetCurrentExchangeRateResult和decimal,如图339所示。


图339GetCurrentExchangeRateResult选项卡设置


(7) 双击XML output图标,在“文件”选项卡中设置要保存的文件名称为20202.xml,在“字段”选项卡中单击“获取字段”按钮,如图340和图341所示。



图340保存输出文件





图341获取字段


(8) 保存该文件,运行转换,执行该程序,如图342所示。


图342运行转换


(9) 查看执行结果,如图343所示。



图343查看执行结果


(10) 在生成的XML文件中查看结果,如图344所示。



图344查看生成文件


2) 抽取Web中的图片
本例使用Kettle抽取Web中的图片,URL地址为https://pics3.baidu.com/feed/a1ec08fa513d26977ec9e1f4201608f34216d873.jpeg?token=ccfab3d1e2305a91be3a1100b46cbfc1。图片效果如图345所示。


图345Web中的图片


(1) 成功运行Kettle后,在菜单栏选择“文件”|“转换”命令,在“输入”选项中选择“自定义常量数据”,在“查询”选项中选择HTTP client,并将其拖动到右侧工作区中建立节点连接,如图346所示。


图346建立连接


(2) 双击“自定义常量数据”图标,在“元数据”选项中的“名称”中输入“url”,在“数据”选项中的url中输入图片的网址,如图347、图348所示。


图347设置元数据




图348设置数据


从图347、图348可以看出,自定义常量数据与生成记录不同,生成记录只有一个选项,字段的定义和值在同一个页签。而自定义常量有两个选项,分别是元数据和数据,其中,元数据用于设置字段的信息,若字段定义为date类型,则格式必须选择; 而数据用于为定义的字段填充数据,用法类似于数据库中的建表并插入数据,自定义常量数据用法相比于生成记录要灵活很多。值得注意的是: 在元数据中定义的字段,会在数据中自动生成供数据填充。
(3) 双击HTTP client图标,选中“从字段中获取URL”复选框,如图349所示。


图349设置HTTP client


(4) 保存该文件,选择“运行这个转换”选项,执行该程序,并查看运行结果,如图350所示。


图350运行程序


从图350可以看出,该抽取过程已经顺利完成,只是因为在Kettle中不能直接显示抽取的Web图片,因此在执行结果的result中显示的是乱码。一般在企业的实际操作中往往是将要抽取的图片URL地址保存在图片服务器中,然后在图片服务器中打开查看。

习题3
(1) 什么是数据抽取?
(2) 什么是Web数据抽取?
(3) 如何使用Kettle进行Web数据抽取?