精华内容
下载资源
问答
  • Web数据挖掘

    千次阅读 2007-08-28 12:54:00
    Web挖掘流程 与传统数据数据仓库相比,Web上的信息是非结构化或半结构化的、动态的、并且是容易造成混淆的,所以很难直接以Web网页上的数据进行数据挖掘,而必须经过必要的数据处理。典型Web挖掘的处理流程如下
    Web挖掘指使用数据挖掘技术在WWW数据中发现潜在的、有用的模式或信息。Web挖掘研究覆盖了多个研究领域,包括数据库技术、信息获取技术、统计学、人工智能中的机器学习和神经网络等。
    Web挖掘流程
    与传统数据和数据仓库相比,Web上的信息是非结构化或半结构化的、动态的、并且是容易造成混淆的,所以很难直接以Web网页上的数据进行数据挖掘,而必须经过必要的数据处理。典型Web挖掘的处理流程如下[3]:
    1.查找资源:任务是从目标Web文档中得到数据,值得注意的是有时信息资源不仅限于在线Web文档,还包括电子邮件、电子文档、新闻组,或者网站的日志数据甚至是通过Web形成的交易数据库中的数据。
    2.信息选择和预处理:任务是从取得的Web资源中剔除无用信息和将信息进行必要的整理。例如从Web文档中自动去除广告连接、去除多余格式标记、自动识别段落或者字段并将数据组织成规整的逻辑形式甚至是关系表。
    3.模式发现:自动进行模式发现。可以在同一个站点内部或在多个站点之间进行。
    4.模式分析:验证、解释上一步骤产生的模式。可以是机器自动完成,也可以是与分析人员进行交互来完成。

    Web挖掘作为一个完整的技术体系,在进行挖掘之前的信息获得IR(Information Retrieval)和信息抽取IE(Information Extraction)相当重要。信息获得(IR)的目的在于找到相关Web文档,它只是把文档中的数据看成未经排序的词组的集合,而信息抽取(IE)的 目的在于从文档中找到需要的数据项目,它对文档的结构合表达的含义感兴趣,它得一个重要任务就是对数据进行组织整理并适当建立索引。
    信 息获得(IR)和信息抽取(IE)技术的研究已近有很长时间,随着Web技术的发展,基于Web技术的IR、IE得到了更多的重视。由于Web 数据量非常大,而且可能动态变化,用原来手工方式进行信息收集早已经力不从心,目前的研究方向是用自动化、半自动化的方法在Web上进行IR和IE。在 Web环境下既要处理非结构化文档,又要处理半结构化的数据,最近几年在这两方面都有相应的研究成果和具体应用,特别是在大型搜索引擎中得到了很好的应 用。
    Web挖掘分类及各自的研究现状及发展
    根据对Web数据的感兴趣程度不同,Web挖掘一般可以分为三类:Web内容挖掘(Web Content mining)、 Web结构挖掘( Web structure mining)、 Web 用法挖掘(Web usage Mining)
    1、Web内容挖掘:
    指 从Web内容/数据/文档中发现有用信息,Web上的信息五花八门,传统的Internet由各种类型的服务和数据源组成,包括WWW、FTP、 Telnet等,现在有更多的数据和端口可以使用,比如政府信息服务、数字图书馆、电子商务数据,以及其他各种通过Web可以访问的数据库。Web内容挖 掘的对象包括文本、图象、音频、视频、多媒体和其他各种类型的数据。其中针对无结构化文本进行的Web挖掘被归类到基于文本的知识发现(KDT)领域,也 称文本数据挖掘或文本挖掘,是Web挖掘中比较重要的技术领域,也引起了许多研究者的关注。最近在Web多媒体数据挖掘方面的研究成为另一个热点。
    Web 内容挖掘一般从两个不同的观点来进行研究。从资源查找(IR)的观点来看,Web内容挖掘的任务是从用户的角度出发,怎样提高信息质量和帮助用户过滤信 息。而从DB的角度讲Web内容挖掘的任务主要是试图对Web上的数据进行集成、建模,以支持对Web数据的复杂查询。
    1.1从资源查找(Information Retrival)的观点挖掘非结构化文档:
    非 结构化文档主要指Web上的自由文本,包括小说、新闻等。在这方面的研究相对比较多一些,大部分研究都是建立在词汇袋(bag of words)或称向量表示法(vector representation)的基础上,这种方法将单个的词汇看成文档集合中的属性,只从统计的角度将词汇孤立地看待而忽略该词汇出现的位置和上下文环 境。属性可以是布尔型,根据词汇是否在文档中出现而定,也可以有频度,即该词汇在文档中的出现频率。这种方法可以扩展为选择终结符、标点符号、不常用词汇 的属性作为考察集合。词汇袋方法的一个弊端是自由文本中的数据丰富,词汇量非常大,处理起来很困难,为解决这个问题人们做了相应的研究,采取了不同技术, 如信息增益,交叉熵、差异比等,其目的都是为了减少属性。另外,一个比较有意义的方法是潜在语义索引(Latent Semantic Indexing),它通过分析不同文档中相同主题的共享词汇,找到他们共同的根,用这个公共的根代替所有词汇,以此来减少维空间。例如: “informing”、“information”、“informer”、“informed”可以用他们的根“inform”来表示,这样可以减少 属性集合的规模。
    其他的属性表示法还有词汇在文档中的出现位置、层次关系、使用短语、使用术语、命名实体等,目前还没有研究表明一种表示法明显优于另一种。
    用资源查找(Information Retrival)的观点挖掘半结构化文档:
    与非结构化数据相比,Web上的半结构化文档挖掘指在加入了HTML、超连接等附加结构的信息上进行挖掘,其应用包括超连接文本的分类、聚类、发现文档之间的关系、提出半结构化文档中的模式和规则等。
    1.2从数据库(Database)的观点挖掘非结构化文档:
    数据库技术应用于Web挖掘主要是为了解决Web信息的管理和查询问题。这些问题可以分为三类:Web信息的建模和查询;信息抽取与集成;Web站点建构和重构。
    从数据库的观点进行Web内容挖掘主要是试图建立Web站点的数据模型并加以集成,以支持复杂查询,而不止是简单的基于关键词的搜索。这要通过找到Web文档的模式、建立Web数据仓库或Web知识库或虚拟数据库来实现。相关研究主要是基于半结构化数据进行的。
    数 据库观点主要利用OEM(Object Exchange Model)模型将半结构化数据表示成标识图。OEM中的每个对象都有对象标识(OID)和值,值可以是原子类型,如整型、字符串型、gif、html 等,也可以是一个复合类型,以对象引用集合的形式表示。由于Web数据量非常庞大,从应用的角度考虑,很多研究只处理办结构化数据的一个常用自集。一些有 意义的应用是建立多层数据库(MLDB),每一层是它下面层次的概化,这样就可以进行一些特殊的查询和信息处理。对于在半结构化数据上的查询语言研究也得 到了人们的重视并做了专题研究。
    由于在数据库观点下数据的表示方法比较特殊,其中包含了关系层次和图形化的数据,所以大部分建立在扁平数据集合之上的数据挖掘方法不能直接使用,目前已经有人针对多层数据库挖掘算法进行研究。
    2、Web结构挖掘:
    Web结构挖掘的对象是Web本身的超连接,即对Web文档的结构进行挖掘。对于给定的Web文档集合,应该能够通过算法发现他们之间连接情况的有用信息,文档之间的超连接反映了文档之间的包含、引用或者从属关系,引用文档对被引用文档的说明往往更客观、更概括、更准确。
    Web 结构挖掘在一定程度上得益于社会网络和引用分析的研究。把网页之间的关系分为incoming连接和outgoing连接,运用引用分析方法找到同一网站 内部以及不同网站之间的连接关系。在Web结构挖掘领域最著名的算法是HITS算法和PageRank算法。他们的共同点是使用一定方法计算Web页面之 间超连接的质量,从而得到页面的权重。著名的Clever和Google搜索引擎就采用了该类算法。
    此 外,Web结构挖掘另一个尝试是在Web数据仓库环境下的挖掘,包括通过检查同一台服务器上的本地连接衡量Web结构挖掘Web站点的完全性,在不同的 Web数据仓库中检查副本以帮助定位镜像站点,通过发现针对某一特定领域超连接的层次属性去探索信息流动如何影响Web站点的设计。
    3、Web用法挖掘(Web usage Mining):
    即Web 使用记录挖掘,在新兴的电子商务领域有重要意义,它通过挖掘相关的Web日志记录,来发现用户访问Web页面的模式,通过分析日志记录中的规律,可以识别 用户的忠实度、喜好、满意度,可以发现潜在用户,增强站点的服务竞争力。Web使用记录数据除了服务器的日志记录外还包括代理服务器日志、浏览器端日志、 注册信息、用户会话信息、交易信息、Cookie中的信息、用户查询、鼠标点击流等一切用户与站点之间可能的交互记录。可见Web使用记录的数据量是非常 巨大的,而且数据类型也相当丰富。根据对数据源的不同处理方法,Web 用法挖掘可以分为两类,一类是将Web使用记录的数据转换并传递进传统的关系表里,再使用数据挖掘算法对关系表中的数据进行常规挖掘;另一类是将Web 使用记录的数据直接预处理再进行挖掘。Web 用法挖掘中的一个有趣的问题是在多个用户使用同一个代理服务器的环境下如何标识某个用户,如何识别属于该用户的会话和使用记录,这个问题看起来不大,但却 在很大程度上影响着挖掘质量,所以有人专门在这方面进行了研究。通常来讲,经典的数据挖掘算法都可以直接用到Web 用法挖掘上来,但为了提高挖掘质量,研究人员在扩展算法上进行了努力,包括复合关联规则算法、改进的序列发现算法等。

    根据数据来源、数据类型、数据集合中的用户数量、数据集合中的服务器数量等将Web 用法挖掘分为五类:
    ●个性挖掘:针对单个用户的使用记录对该用户进行建模,结合该用户基本信息分析他的使用习惯、个人喜好,目的是在电子商务环境下为该用户提供与众不同的个性化服务。
    ● 系统改进:Web服务(数据库、网络等)的性能和其他服务质量是衡量用户满意度的关键指标,Web 用法挖掘可以通过用户的拥塞记录发现站点的性能瓶颈,以提示站点管理者改进Web缓存策略、网络传输策略、流量负载平衡机制和数据的分布策略。此外,可以 通过分析网络的非法入侵数据找到系统弱点,提高站点安全性,这在电子商务环境下尤为重要。
    ●站点修改:站点的结构和内容是吸引用户的关键。Web 用法挖掘通过挖掘用户的行为记录和反馈情况为站点设计者提供改进的依,比如页面连接情况应如何组织、那些页面应能够直接访问等。
    ●智能商务:用户怎样使用Web站点的信息无疑是电子商务销售商关心的重点,用户一次访问的周期可分为被吸引、驻留、购买和离开四个步骤,Web用法挖掘可以通过分析用户点击流等Web日志信息挖掘用户行为的动机,以帮助销售商合理安排销售策略。
    ●Web特征描述:这类研究跟关注这样通过用户对站点的访问情况统计各个用户在页面上的交互情况,对用户访问情况进行特征描述。
     
    展开全文
  • 手把手教你Web数据可视化平台搭建

    万次阅读 2017-03-07 18:27:00
    手把手教你Web数据可视化平台搭建

    原文链接:http://www.jianshu.com/p/ad1a49375da4 ,源代码请访问原文


    PS.想获取全部源代码或者有不懂的问题的感兴趣的同学,请访问原文~


    一、项目展示

    这个Web数据可视化平台的效果如下(没加样式,主要侧重功能)


    效果演示

    这个数据可视化Demo能够实现如下功能:

    1.csv文件上传(其他格式文件也可以)

    2.自定义想要显示的数据

    2.nodejs搭建服务器,解析csv文件数据

    3.使用Highcharts进行数据可视化

    4.关键参数计算并展示

    二、实现思路和过程

    1.实现csv文件上传

    (1)前台部分

    在这个demo中,使用了formData和ajax来完成前端文件的上传。formData是一种组件表单的方式,下面的例子就是用formData来初始化了一个用来提交文件的表单。


    html代码

    js代码

    通过上面的代码,我们就可以初始化一个包含两个字段的表单,分别是要上传的文件和要解析的属性。这里使用FormData()构造一个formData对象,传入一个表单初始化。这样,这个生成的formData对象中,就包含了要上传的字段。同时要注意,指定form标签的enctype属性为multipart/form-data,表单才能处理文件类型的字段。

    (2)服务器端处理上传文件

    服务器端使用nodejs搭建,这里使用一个叫做multer的nodejs模块进行文件处理。multer可以处理文件上传,它获取前端上传的文件,并将文件保存到服务器端指定目录。下面是使用multer处理文件的代码示例。


    multer处理数据代码

    上面的代码中,upload使用multer指定了上传文件后保存的路径,这里会将所有上传的文件保存在uploads目录下。multer会为req对象添加file属性,这个file属性就包括了文件的各种信息,包括上传路径、文件名、文件类型等。而表单中的其他字段,汇报存在req.body中(使用bodyParser)。

    2.csv文件解析

    对于csv的文件解析,我们使用nodejs中的csvtojson模块,这个模块非常方便使用。如果想解析电子表格类型的文件,也可以使用nodejs中的xlsx模块实现。调用csvtojson模块中的方法,对上传的文件req.file.path进行解析(req.file.path,是通过multer上传的文件路径,可以直接访问到上传的文件)即可。

    另外,我们还想显示指定属性的数据(即展现csv文件中特定的列)。这种功能,可以通过req.body获取前台的对应字段,然后使用csvtojson模块中的方法实现。在我制作的demo中,对应属性的获取原理是,用户可输入多个列名,用逗号分隔开;服务器端使用js的split方法对传入内容进行解析,形成一个目标列名组成的数组,再使用csvtojson模块读取对应数组。

    3.使用Highcharts展示数据

    Highcharts是一个非常实用的Web数据可视化框架。当我们对文件完成解析,获取完对应的数据后,就可以使用Highcharts进行图标绘制了。一个基本的Highcharts图标绘制代码如下。


    Highcharts基本配置

    通过上面的代码可以了解Highcharts框架的基本使用方法。这里使用Highcharts.Chart()方法初始化一个图标,这个方法需要传入一些配置项。配置项配置包括渲染目标、标题等,还可以配置坐标轴、图例、提示框等许多内容,这是Highcharts的灵活之处。

    其中,series配置数据内容,这是一个对象数组,每一个对象对应一个数据列。如上面的例子中,定义了一个名为test的数据列,并指定了数据内容。

    在这个demo中,我们可以在ajax中的success回调函数中获取到返回的数据,然后通过修改配置项中的series属性,来为Highcharts图表动态注入数据。

    4.数据分析

    可以为我们的demo中添加一些数据分析功能,例如动态显示所有每一个数据列的方差、平均值等。

    展开全文
  • web前端数据类型详解

    千次阅读 2019-04-11 14:50:33
    数据类型 数据类型 JavaScript 拥有动态类型:字符串、数字、布尔、数组、对象、Null、Undefined ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。 typeof typeof ...

    数据类型

    数据类型

    JavaScript 拥有动态类型:字符串、数字、布尔、数组、对象、Null、Undefined

    ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。

    typeof

    typeof 运算符有一个参数,即要检查的变量或值。例如:

    ```
    	var sTemp = "test string";
    	alert (typeof sTemp);    //输出 "string"
    	alert (typeof 86);    //输出 "number"
    	对变量或值调用 typeof 运算符将返回下列值之一:
    
    ```
    
    • undefined - 如果变量是 Undefined 类型的
    • boolean - 如果变量是 Boolean 类型的
    • number - 如果变量是 Number 类型的
    • string - 如果变量是 String 类型的
    • object - 如果变量是一种引用类型或 Null 类型的

    注释:您也许会问,为什么 typeof 运算符对于 null 值会返回 “Object”。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

    Undefined 类型

    如前所述,Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。

    ```	
    	var oTemp;
    
    ```
    

    前面一行代码声明变量 oTemp,没有初始值。该变量将被赋予值 undefined,即 undefined 类型的字面量。可以用下面的代码段测试该变量的值是否等于 undefined:

    ```
    	var oTemp;
    	alert(oTemp == undefined);
    ```
    

    这段代码将显示 “true”,说明这两个值确实相等。还可以用 typeof 运算符显示该变量的值是 undefined:

    ```
    	var oTemp;
    	alert(typeof oTemp); //输出 "undefined"
    ```
    

    提示:值 undefined 并不同于未定义的值。但是,typeof 运算符并不真正区分这两种值。考虑下面的代码:

    ```
    	var oTemp;
    	
    	alert(typeof oTemp);  //输出 "undefined"
    	alert(typeof oTemp2);  //输出 "undefined"
    ```
    

    前面的代码对两个变量输出的都是 “undefined”,即使只有变量 oTemp2 从未被声明过。如果对 oTemp2 使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。

    例如,下面的代码将引发错误:

    ```
    	var oTemp;
    	alert(oTemp2 == undefined);
    ```
    

    当函数无明确返回值时,返回的也是值 “undefined”,如下所示:

    ```
    	function testFunc() {
    	}
    	
    	alert(testFunc() == undefined);  //输出 "true"
    
    ```
    

    Null 类型

    另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

    ```
    	alert(null == undefined);  //输出 "true"
    ```
    

    尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

    展开全文
  • 基于 Web数据挖掘

    千次阅读 2004-10-06 18:11:00
    基于 Web数据挖掘英文原文内容:HTML:优点与缺点背景技术方法概述获取 XHTML 格式的源信息查找数据的引用点将数据映射成 XML
    基于 Web 的数据挖掘英文原文
    内容:
    HTML:优点与缺点
    背景技术
    方法概述
    获取 XHTML 格式的源信息
    查找数据的引用点
    将数据映射成 XML
    合并与处理结果
    结束语
    参考资料
    关于作者
    对本文的评价
    自动抽取用 HTML、XML 和 Java 编写的信息

    Jared Jackson (jjared@almaden.ibm.com)
    Jussi Myllymaki (jussi@almaden.ibm.com)
    IBM 研究员
    2001 年 6 月

    不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源。但是,它的结构使它很难用系统的方法来利用信息。本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所需的以 Web 方式发 布的信息。

    在信息时代快速成长起来的万维网导致各种各样的公用信息被大量分发。不幸的是,尽管作为信息主要载体的 HTML 提供了一种方便地向读者呈现信息的方法,但它可能并不是一个很好的可以从中自动抽取与数据驱动的服务或应用程序相关的信息的结构。

    已经尝试了多种方法来解决这个问题。大多数方法都采用一些专用查询语言的形式把 HTML 页面的各个部分映射成代码,而这些代码将 Web 页面上的信息填入到数据库中。尽管这些方法可能提供一些好处,但大部分会因为以下两个原因变得不切实际:首先,它们需要开发人员花时间去学习一种无法在其它情况下使用的查询语言,其次,它们还不够健壮到能处理不可避免的对目标 Web 页面的简单更改。

    在本文中,将讨论使用标准 Web 技术—— HTML、XML 和 Java ——开发的一种 基于 Web 的数据挖掘方法。这种方法即使不比其它专用方法更强大,也和其它方法不相上下,并且对于那些已经熟悉 Web 技术的人来说,只需要付出很少的努力就可以收到很好的效果。另外,本文还附送了许多开始数据抽取所需的代码。

    HTML:优点与缺点
    HTML 通常是一个很难用程序手段处理的媒体。Web 页面中的大多数内容描述与数据驱动的系统无关的格式编排,并且,由于要动态添加标题以及编写其它服务器端脚本,所以文档结构可能在每次连接到页面时都需要进行更改。又因为所有 Web 页面主要部分的格式编排不合理,所以使问题变得更为复杂,其结果是现在的 Web 浏览器在进行 HTML 语法分析 时非常不严谨。

    尽管存在这些问题,但是 HTML 在数据挖掘方面仍然具有优势。您所感兴趣的数据通常可以用 HTML 树中深度嵌套的单 个 <table><div> 标记隔离开来。这使得抽取过程可以专门在文档的一小部分内执行。在缺少客户机端脚本的情况下,只有一种定义下拉菜单和其它数据列表的方法。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. 概要说明抽取过程

    只需要很少的几个步骤,我们就可以拥有一个收集我们信息的合适而可靠的系统。这里列出这些步骤是为了提供该过程的简要概述,图 1 中显示的是这一过程 的较高形式。

    1. 标识数据源并把它映射成 XHTML。
    2. 查找数据内的引用点。
    3. 将数据映射成 XML。
    4. 合并结果并处理数据。

    这些步骤中的每一步都将加以详细说明,并将提供执行它们所必需的代码。

    获取信 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 页面
    图 2. 华 盛顿州西雅图的 Yahoo! Weather Web 页面

    在考虑信息源时,牢记以下这些要素非常重要:

    • 信息源是否是在可靠的网络连接上生成可靠的数据?
    • 信息源从现在起将存在多久?一个星期、一个月或甚至一年?
    • 信息源的布局结构有多稳定?

    我们寻求能够在动态环境下工作的健壮的解决方案的过程中,在抽取可用的最可靠和最稳定的信息源时,我们的工作将是最简单的。

    一旦确定了信息源,我们在抽取过程中的第一步就是将数据 从 HTML 转换成 XML。我们将通过构造名为 XMLHelper(由 static helper 函数 组成)的 Java 类来完成这一任务以及其它与 XML 相关任务。这个类的全部信息源可以 通过以下到 XMLHelper.javaXMLHelperException.java 的 链接找到。随着本文的继续展开,我们将构建这个类的方法。

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

    图 3. 转换成 XHTML 的 Yahoo! Weather Web 页面
    图 3. 转 换成 XHTML 的 Yahoo! Weather Web 页面

    查找数据的引用点
    请注意,无论是在 Web 页面还是源 XHTML 视图中的绝大多数的信息都与我们完 全无关。我们接下来的一个任务是在 XML 树中找出一个特定区域,我们可从中抽取我们的数据而无需关心外来信息。对于更复杂的抽取,我们可能需要在单个页面上找出这些区域的若干实例。

    完成这一任务的最简单的办法通常是,首先检查 Web 页面,然后使用 XML。只需要看一下页面,就可以知道我们正在查找的信息位于页面的中上部区域中。即使对 HTML 的熟悉程度非常有限,也很容易推断出我们正在查找的数据可能都包含在同一 个 <table> 元素下,并且这个表可能总是包含 象“Appar Temp”和“Dewpoint”这样的字,无论当天的数据可能是什么。

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

    图 4:通过查找包含文本“Appar Temp”的表找到锚
    图 4:通 过查找包含文本“Appar Temp”的表找到锚

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

    /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 文件的形式 出现。XSL 文件的目的是标识锚,指定如何从锚获取我们正在查找的数据(以简短跳跃的方式),并且用我们所需的格式构造一个 XML 输出文件。这个过程实际上比想象的要简单得多。清单 2 给出 了将执行这个过程的 XSL 代码,这些代码还可 以作为一个 XSL 文本文件获取。

    <xsl:output> 元素仅告诉处理器我们希望的的变换结果 是 XML。第一个,<xsl:template> 建立名 为 <xsl:apply-templates> 的根元素以搜索锚。第二个,<xsl:template> 让我们只匹配需要匹配的内容。最后那个,<xsl:template>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 抽取的结果
    图 5. Web 抽取的结果

    结束语
    在本文中,我们已经描述并证明从目前存在的最大信息来源——万维网——抽取信息的强壮方法的基本原则。我们还讨论了能够使任何 Java 开发人员花最少的精力和具备最少的抽取经验就可以开始他们自己抽取工作所必需的编码工具。尽管本文中的示例仅集中于抽取有关华盛顿,西雅图天气的信息,但是这里出现的所有代码几乎都可以在任何数据抽取中重复使用。事实上,除 对 WeatherExtractor 类进行少许更改外,需要为其它数据挖掘项目进行更改的代码只有 XSL 变换代码(顺便提一下,它从 不需要编译)。

    这种方法与想象中的一样简单。通过明智地选择可靠的数据源以及在这些数据源中选取与内容相关但与格式无关的锚,可以使您拥有一个维护成本低廉,可靠的数据抽取系统。并且,根据经验级别和要抽取的数据量,您可以在一小时之内就能安装与运行它。

    参考资料




    关于作者
    Jared JacksonJared Jackson 自 2000 年 5 月 Harvey Mudd 大学毕业以来一直在 IBM Almaden Research Center 工 作。Jared 还是斯坦福大学“计算机科学”系的研究生。可通 过 jjared@almaden.ibm.com 与 Jared 联系。


    Jussi Myllymaki Jussi Myllymaki 于 1999 年作为“研究职员”加盟 IBM Almaden Research Center,并从麦迪逊的威斯康星大学获得博士学位。可通 过 jussi@almaden.ibm.com 与 Jussi 联

    展开全文
  • 在前一篇博文“Arcgis for js之WKT和geometry转换”中实现了wkt和geometry之间的相互转化,博文原文地址为:...在本节,接上文,简单讲述基于Arcgis for Js的web GIS数据在线采集。
  • 实现web数据同步的四种方式

    千次阅读 2016-07-23 00:42:58
    实现web数据同步的四种方式 ======================================= 1、nfs实现web数据共享 2、rsync +inotify实现web数据同步 3、rsync+sersync更快更节约资源实现web数据同步 4、unison+inotify实现web数据...
  • web前端读取串口数据

    万次阅读 2020-04-22 15:11:43
    1.使用服务端开发语言开发一个读取串口数据的本地服务模块,并实现websocket长连接支持,前端开启长连接到该服务,根据推送的数据进行操作。 2.针对IE浏览器,可以采用ActiveX插件读取串口数据,根据插件的API进行...
  • Web分布式数据交换(WDDX)

    千次阅读 2008-05-12 13:12:00
    尽管WDDX本身不是web服务(web service),但可以利用它来创建web服务。WDDX介绍WDDX 是一项允许在保持数据完整性的前提下在系统格式中立的系统间交换数据数据结构的XML技术。它定义了用来传送数据的XML结构,但它...
  • Python使用Web API数据可视化

    千次阅读 2018-03-19 19:42:53
    Web应用编程接口 (API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化。由于这样编写的程序始终使用最新的数据来生成可视化,因此即便数据瞬息万变,它呈现的信息也都是最新的。 Web API是网站的...
  • Oracle EBS 从Web界面进入责任提示不存在可用的有效责任 每次在Web界面,点击某一责任的功能,弹出Form,会提示错误:对不起,不存在可用的有效责任。 后来找到问题的原因是,创建责任,在责任关键字区域...
  • 今天使用vs2008开发web项目,发现按F5运行提示:无法启动程序"http://localhost:12346/Default.aspx".有更多数据可用。如下图 找了很多方法都没有解决,最后发现是因为在vs2008的默认浏览设置中,默认的...
  • Web数据挖掘的研究现状及发展

    千次阅读 2006-10-20 01:39:00
    杨庆跃 北京大学计算机系摘要: 随着Internet/Web技术的...本文概要介绍了Web数据挖掘在三个研究领域的研究现状及发展。关键词:数据挖掘;Web挖掘; 1.Web挖掘概述 随着以数据库、数据仓库等数据仓储技术为基础的
  • web开发网页数据分析工具

    千次阅读 2010-07-08 17:13:00
    1.FirebugFirebug ... 常方便,而且在各种浏览器下都能使用(IE,Firefox,Opera, Safari)。...总之就是一整套完整而强大的 ...WEB开发工具。再有就是其为开源的软件。  Firebug官网:http://getfirebug.com/
  • Web数据挖掘的研究现状及发展

    千次阅读 2006-03-08 14:26:00
    1.Web挖掘概述 随着以数据库、数据仓库等数据仓储技术为基础的信息系统在各行各业的应用,使海量数据不断产生。随之而来的问题是如此多的数据让人难以消化,无法从表面上看出他们所蕴涵的有用信息,更不用说有效地...
  • 在后台数据验证端.该字段并没有设置必填.而前台页面却提示必填.导致没法进行. input class="input-validation-error" data-val="true" data-val-number="字段 PlaProductId 必须是一个数字。" data-val-required=...
  • 在前面已经学习过弹出一个窗口来提示用户,达到一种警告的交互方式,现在来学习一个让用户输入数据的方法。比如让用户输入姓名,或者让用户输入计算的数字等等。在这里使用window.prompt()函数来获取用户的输入数据...
  • 获取表单提交的数据: JSP(Java Server Pages) 从浏览器到服务器是浏览器发送请求(request) 从服务器到浏览器是浏览器接收响应(response) 【通过JSP来实现】 request对象: 主要用于处理客户端请求 ...
  • 用 HTTP 压缩加快 Web 数据的发送

    千次阅读 2009-11-26 14:21:00
    虽然早在几年前,流行的浏览器大都能接收压缩数据,但 Web 服务器却不能发送压缩内容。服务器压缩模式出现之后,情况得到了改善。S.Radhakrishnan 博士剖析了 Web 压缩,考察了 HTTP 压缩的益处,提供了几个压缩工具...
  • Web 与 App 数据交互原理和实现

    千次阅读 2017-11-09 00:00:00
    作者 | 张小虎 杏仁前端开发工程师,前 iOS 开发工程师,关注前端技术栈。 ...点击图片查看大图已经成了用户浏览页面的一种习惯,原生 App ...但如果一个 Web 页面能在一些特定的原生 App 中打开,那完全可以让 A
  • web报表轻松实现数据异常预警功能

    千次阅读 2018-08-06 10:10:12
    经常会看到这样的数据显示需求:一些特殊数据有规定的标准范围,超出标准范围的数据我们要标红预警显示,告知客户此数据有异常,也就是我们说的数据预警,效果如下图所示,红色显示了当运货费大于100的预警。...
  • 概述 框架提供了excel数据驱动方式运行测试用例的工具,本文将针对数据驱动,进行详细演示。
  • Asp.net webAPI返回JSON格式数据

    千次阅读 2019-04-04 15:49:02
    ASP.NET Web API 是新一代的 HTTP 网络服务开发框架,除了可以透过 Visual Studio 2012 快速开发外 (内建于 ASP.NET MVC 4 的 Web API 项目模板内),也非常适合用于各种跨平台的...不过 ASP.NET Web API 内建支持 ...
  • 本示例实现easyui datagrid加载/查询数据时,如果没有相关记录,则在datagrid中显示没有相关记录的提示信息,效果如下图所示 本实例要实现如下图所示的效果: 本示例easyui版本为1.3.4,如果运行后没有效果,自己...
  • 数据分析-web图表展示-收集

    千次阅读 2015-03-27 11:01:34
    在大数据时代,数据具有以下特性:   实时性:必须快速的收集分析数据、并对...  多种数据集成支持方式:数据的来源不只是限于数据库,数据将支持团队协作数据数据仓库、文本等多种方式,并能够通过互联网进行展现
  • web3通过testrpc访问以太坊数据入门

    千次阅读 2017-07-10 09:39:01
    本文旨在记录作者在使用web3通过testrpc访问以太坊数据的工作整理。
  • 在一个客户现场的应用上, 客户的技术人员发现,Appeon Web应用运行一段时间后,程序就提示数据连接断了。重起Weblogic就好了。可是过一段时间程序又提示数据库连接断了。经过分析Weblogic和Appeon Server的日志...
  • Web端和移动端接入萤石云平台的视频数据

    万次阅读 热门讨论 2019-06-17 15:09:35
    因为项目需要在Web和App上展示实时视频流信息,所以之前做项目尝试了很多方法。有用vlc插件播放的(由于使用到了插件,所以安卓App、微信小程序都不能显示视频,最后也放弃了),也有使用海康威视Web开发包开发的。...
  • 提示 “在选定的数据源上未找到名为“Purchase Order ID”的字段或属性。”,而用WPS保存下,又可以。是什么原因造成的? ... Dim strConn As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;...
  • web渗透--49--常见的数据信息泄露

    千次阅读 2018-09-22 11:08:16
    备份文件泄露,在web服务中,常常不局限于网站的源代码泄露,网站的数据库备份文件,以及上传的敏感文件,或者一切正常备份,原则不允许访问的文件可被通过访问web路径进行下载得到,造成其信息泄露。有效的帮助攻击...
  • Python之web服务器-返回404页面数据(四) # 导入模块 import socket import re if __name__ = '__main__': # 1.创建tcp服务端套接字 tcp_server_socket = socket.socket(socket.AF_INET , socket.SOKE_STREAM) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 380,218
精华内容 152,087
关键字:

web无数据时如何提示