摘  要 文章提出一种基于DOM的Web信息提取方法,通过归纳学习获得被提取信息的定位路径,利用XPath和XSLT在数据定位和数据转换方面的特点编写提取模式,根据网页元素与DOM节点对应关系,判断所获得信息源是否适用于已有提取模式。
关键词 Web信息提取;DOM;XPath;XSLT;基于DOM的网页结构判断
1 引言
Web信息的爆炸性增长,给我们带来了获取更多信息的机会,同时,也增加了在纷繁复杂的Web信息库中准确地获取信息的困难。例如,使用搜索引擎搜
索信息时,返回信息成千上万,其中包含大量无用甚至是错误的信息,进行人工挑选要耗费时间和精力。另外,由于网页的编写方式,编写风格各种各样,使得所搜集的信息也不适于结构化存储。本文提出了一种基于DOM[1]的Web信息提取方法,利用DOM提取信息,并进行相关信息源的搜索,实现信息的精确定位。
2 基本思想
本文的基本思想是:将不够规范的HTML文档整理成格式良好的XHTML[2]文档,再将XHTML文档解析成一个树模型——DOM树,然后围绕DOM树进行信息的提取以及相似结构网页的搜索,提取的结果以XML文档表示,并进行结构化存储。如图1所示:
图1 设计思想
以下是对各个处理步骤的分析说明:
2.1 整理
HTML用一对预定义的标记来描述包含在其间文本的表现方式,要求标记成对出现。事实上,有许多HTML文档中的标记不符合HTML语法要求,比如缺乏结束标记等。这些错误影响对 HTML文档的正确解析,因此,为便于解析,首先要对HTML文档进行整理,将其转换成XHTML文档,XHTML严格建立在XML基础之上,并且明确定 义了格式良好的文档规则。这样就可以像对待一般XML文档一样对待XHTML文档,可以利用各种XML标准技术来操纵XHTML文档。
对HTML文档的整理主要是以下三个方面:
(1)为不成对的标记加上结束符“/”,例如<br>加上结束符为<br />;
(2)为所有属性值加上引号,例如,<a href=http://www.w3c.org>加上引号变为<a href=”http://www.w3c.org”>;
(3)将URL中所有的“"”换成“/”。
2.2 解析
解析,就是将经过转换得到的XHTML文档构造成DOM树,将文档中的元素映射成DOM树中的节点。
DOM全称是文档对象模型(Document Object Model, DOM),它根据文档中标记之间的嵌套关系,将文档表示为一个树形结构,文档中的元素、属性、以分析的字符数据、注释以及处理指令等都是节点。 Document是文档根,是操作整个DOM树的句柄。
DOM树是面向对象的文档模型,树中的节点都是接口,它们派生于Node接口,每个节点都有各自的特性和操作,处理节点比较方便。
当解析生成DOM树之后,对HTML文档中信息的提取,就转换成为对DOM树中相应节点的查找,节点位置由定位规则指出,提取模式中的模板按照定位规则的指示提取出相应位置的信息。
解析的处理过程如下,首先找出网页中所有的开始标记,将其名称存入标记表。接着逐次找出网页中每个标记,并检查其是不是一个有开始 标记与其对应的结束标记或者是注释标记,如果是没有对应开始标记的结束标记或者是注释标记,就删除该标记;否则,如果是有对应开始标记的结束标记,就将这 个结束标记与其开始标记之间的内容存储到标记表中,这个内容就是叶节点,重复操作,直到网页中每个标记都处理完之后,就建立了一个由标记及其所包含内容构成的表,整棵树被分解成n棵子树存入表中。然后,将<html>标记设置为根节点,将表中n棵子树顺次添加到根节点下,形成一棵n叉树。
2.3 信息提取
提取信息分两步,现生成提取模式,然后利用提取模式提取信息。
2.3.1 提取模式生成
生成提取模式分三个步骤,归纳单个样本网页信息块定位路径,归纳样本网页集合信息块定位路径,定位信息块内信息点路径。
(1) 归纳单个样本网页信息块定位路径
根据用户提供的样本网页的结构特点,将样本网页按相似结构分块,本文所感兴趣的信息就位于这些相似结构的信息块中,这也是本文学习提取算法的一个限制条件,即,被提取信息点位于结构相似的信息块内,各信息点之间没有其他信息。
单个样本学习算法如下:
IBPATHi=NULL;
先序遍历解析树DOMi;
得到的路径表达式记入treePath;
依次扫描treePath;
while(treePath未结束){
比较两条路径中的相应路径结点;
if(两路径结点的索引值和孩子结点的索引值相同){
将该路径写入IBPATHi;
比较下一组路径表达式;
else(结点的索引值相同,而孩子结点的索引值不同){
截取该路径表达式中该节点及该节点之前的路径,将该路径写入IBPATHi;
进入下一组路径比较;
}
}
return IBPATHi;
(2) 归纳样本网页集合信息块定位路径
算法描述如下:
LocationIBs=null;
for(i=1;i<=m;i++){
Path[i]=null;
LocationIB[i]=null;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
扫描第j个样本页面的DOM树;
把第j个样本页面中的第i项内容的路径表达式写入path[i]中,即path[i]=path[i]+{path[i][j]};
}
for(i=1;i<=m;i++){
while(path[i]!=null){
随机提取一条path[i][j]令其等于apath;
apath与path[i]中其它路径表达式与其它进行比较,获得被apath覆盖的正例集合S;
path[i]=path[i]-S;//删除被覆盖的正例
LocationIB [i]= LocationIB [i]+apath;
}
}
LocationIBs={ LocationIB [1], LocationIB [2],……, LocationIB [m]};
return LocationIBs;

(3) 信息块内信息点定位
确定了样本集合中信息块的定位路径之后,可以通过在信息块内先序遍历得到具体信息点的定位路径,这个定位路径用XPath[3]表示。
2.3.2 提取信息
利用归纳学习得到的XPath,编写XSLT[4]文档,就可以根据该文档转换DOM中的节点,生成一个XML文档,这个XML文档中只保留XPath指定的节点,从而完成信息提取。
2.4 相似网页搜索
生成的提取模式可以重用于结构相似的网页,因此,需要判断所搜集的网页是否适用于已有提取模式。本文提出利用DOM判断所搜集网页是否与样本结构相似,进而确定是否可利用已有模式提取所搜集网页中的信息。
2.4.1 判断相似网页
从一个网页到DOM的转换来看,网页中的元素都是以嵌套关系转换成为DOM树中的节点,每个元素在DOM树中都有固定位置的节点对应,可以将这个转换过程抽象成一个函数:
设网页标记E和DOM树节点N是两个集合,一个从E到N的函数f记为:E—>N,是一个满足以下条件的关系:
对每一个eE,都存在唯一的nN,使<e,n>f,记作f(e)=n,E是函数f的前域,N是函数f的陪域。在表达式f(e)=n中,e是函数的自变元,n是对应于自变元e的函数值。
从函数的定义可以看出,如果f(e)=n­1,f(e)=n2,那么n1=n2。也就是说,一个自变元在一个特定函数下,有唯一的函数值与之对应。利用这种关系可以推断出一个网页标记集合按照嵌套关系只能影射为一个DOM树,这样,判断两个网页结构是否相似可以转换为判断两个网页解析得到的DOM树是否相似。
算法描述如下:
先序遍历测试网页的节点列表NodeList1;
获得NodeList1的长度Length1;
先序遍历样本网页的节点列表NodeList2;
获得NodeList2的长度Length2;
if(Length1=Length2){
for(i=1;i<=Length1;i++){
取得NodeList1的第i个节点Node1i;
取得Node1i的节点名NodeName1i;
取得NodeList2的第i个节点Node2i;
取得Node2i的节点名NodeName2i;
if(NodeName1i不同于NodeName2i){
return false;
break;
}
}
retuen true;
}
else{
return false;
}
2.4.2 搜集相似网页
本文设计了结合判断网页结构的爬虫算法,来完成相关信息源的搜集。
算法描述如下:
/*****初始化****/
设定搜索深度Depath;
设定当前搜索深度currentDepath;
从初始URL取回种子网页;
从种子网页中取出所有URL,存入URL列表urlList;
取得样本网页DOM树的结点列表nodeList1;
/*****搜索网页*****/
for(currentDepath<=Depath;currentDepath++){
if(urlList!=NULL){
以先进先出方法从URL列表中取出一个URL;
从该URL取回测试网页存入网页库;
解析该网页生成测试DOM树;
获得该DOM树的节点列表nodeList2;
if(nodeList1 与nodeList2相同){
从该测试网页取出所有URL存入urlList;
}
else{
从该测试网页取出所有URL存入urlList;
将该测试网页URL从URL列表清除;
将测试网页从网页库中删除;
}
}
2.5 格式输出
提取结果最终要结构化存储,本文采用XML作为提取结果,它具有以下两个便于进行结构化存储的特点:
(1) XML数据容易被其他应用程序访问和使用,方便与其它系统整合。
XML数据结构性强,可以直接被其它应用程序访问,或者通过XML的查询语言来访问也比较方便。这样,信息提取系统可以方便地为信息集成、信息过滤等其它需要信息提取结果的系统服务。
(2) 提取结果可以容易地表示和转换为不同格式,满足不同用户的需要。
通过使用不同的XSLT文件,同一内容的提取结果可以用不同风格展示,应用在不同的场合,使数据能够更合理地、有针对性地表现出来。这在推动信息数据表现个人化、风格化的同时,也提高了数据的可重用性。另外通过使用XSLT处理器和XSL样式表,可以容易地将XML的提取结果转换为另一种格式,满足不同需要。
3 方法评价与结论
信息提取技术主要采用以下三个评价指标,即查全率(Recall)和查准率(Precision) 以及F值。查全率是测量被正确提取的信息的比例,而查准率用来测量提取出的信息中有多少是正确的。计算公式如下(P是查准率,R是查全率):

两者取值在0和1之间,数值越接近1,查全率或查准率就越高。
下面是查全率和查准率的加权几何平均值,F值评价方法:

其中b 是一个预设值,是P和R的相对权重,b大于1时表示    P更重要,b小于1时表示R更重要。通常设定为1,表示二者同等重要。这样用F一个数值就可看出系统的好坏,F值也是越接近1越好。
本文对http://www.oreilly.com/网站的10张网页样本和www.amazon.com网站的13张网页样本进行测试,测试结果如表1所示:
表1  系统测试效果表
网站地址
样本网页数目
查全率%
查准率%
F值%
www.amazon.com
13
96.1
91.1
93.5
www.oreilly.com
10
93.7
88.7
91.1
从表1.1看出,对于结构比较规范的网站,该方法不用太多的学习样本,就能获得比较高的查全率和查准率。

转载于:https://www.cnblogs.com/robertfang/articles/1398592.html

基于DOM的Web信息提取方法相关推荐

  1. 掌握 Ajax,第 6 部分: 建立基于 DOM 的 Web 应用程序

    在不刷新页面的情况下使用 DOM 改变网页界面 文档选项 将此页作为电子邮件发送 未显示需要 JavaScript 的文档选项 样例代码 级别: 中级 Brett McLaughlin (mailto ...

  2. 基于Python web信息旅游管理系统

    分享一个基于Python web信息旅游管理系统的文档,方便毕业学子参考,Word版在文末的CSDN链接上. 1.1项目简介 近几年来,随着互联网以及信息化时代的不断普及,越来越多的人进入了互联网时代 ...

  3. java中document解析jsp,JSP基于dom解析xml实例详解

    本文实例讲述了JSP基于dom解析xml的方法.分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩) ...

  4. Thinking in AJAX(二) —— 基于AJAX的WEB设计

    Thinking in AJAX(二) -- 基于AJAX的WEB设计 一.AJAX最值得称赞的是异步交互,而不是无刷新 很多人都看好AJAX无刷新的技术,以至于认同AJAX就是用来做无刷新的.这个认 ...

  5. 使用jQuery的基于DOM的数据存储和检索

    jQuery库是轻量级的(缩小/压缩后约为25KB),符合CSS3和跨浏览器. 它提供了丰富的API集,包括遍历和操作HTML文档对象模型(DOM),处理事件,并提供了使用异步JavaScript和X ...

  6. java vips 算法_VIPS:基于视觉的Web页面分页算法[转]

    VIPS:基于视觉的Web页面分页算法 1.问题的提出 目前,随着互联网的高速发展,Web已经成为这个世界上最大的信息来源.Web 作为信息技术的载体已成为人们重要的工作.学习.生活.娱乐工具.Web ...

  7. VIPS:基于视觉的Web页面分页算法

     本文转自:http://blog.csdn.net/tingya/article/details/601836 1.问题的提出 目前,随着互联网的高速发展,Web已经成为这个世界上最大的信息来源 ...

  8. VIPS:基于视觉的Web页面分页算法(转载)

    VIPS:基于视觉的Web页面分页算法 1.问题的提出 目 前,随着互联网的高速发展,Web已经成为这个世界上最大的信息来源.Web 作为信息技术的载体已成为人们重要的工作.学习.生活.娱乐工具.We ...

  9. [转载]VIPS:基于视觉的Web页面分页算法

    VIPS:基于视觉的Web页面分页算法 目前,随着互联网的高速发展,Web已经成为这个世界上最大的信息来源.Web 作为信息技术的载体已成为人们重要的工作.学习.生活.娱乐工具.Web的发展给人类生活 ...

最新文章

  1. 可伸缩系统的设计模式(译)
  2. 恕我直言,IDEA 的 Debug 调试,你可能只用了 10%
  3. angularjs-ngModel 控制页面的宽度
  4. java随机整数_java如何产生1-8的整数随机数?
  5. windows分屏_windows内到底藏了多少好东西?
  6. 《x86汇编语言:从实模式到保护模式》课后答案
  7. 如何改变WINDOWS服务的启动顺序(Win2000)
  8. 【整理】牛客网编程题-前端篇(简单难度)
  9. node重命名文件名_node文件批量重命名
  10. GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
  11. 2020大一下暑期实习--funcode游戏设计
  12. 量子计算机怎么编程,如何在量子计算机上编程——QPU编程
  13. word 目录 有一部分无无虚线,解决办法
  14. 排查到解决问题的过程:浏览器突然无法访问网页,错误代码:0x80004005,最终定位:“电脑打开热点,电脑就不能上网了”
  15. BUUCTF [GXYCTF2019] 禁止套娃
  16. java中系统托盘的实现
  17. CSS去除免费虚拟主机的广告心得分享
  18. 卢沟桥对于古代北京的作用
  19. Forrester DPA报告认可,捷得Joget被评为低代码自动化平台
  20. leakcanary1.5源码分析

热门文章

  1. 【linux】kill命令模板
  2. c 语言名称的作用域,C 作用域规则
  3. Java finalize()的使用
  4. 隐藏html表格边框显示,table显示所有边框 table的边框怎么显示不出来
  5. 中如何直接使用方法返回的值_java基础-2-方法、面向对象
  6. 北邮计算机学不学单片机,北邮小学期PC单片机.docx
  7. foxmail收件不及时_临近双11,多地快递网点却不送货、欠薪、倒闭?啥原因→
  8. 计算机网络-基本概念(3)【网络层】-路由选择协议
  9. 细思恐极,插上U盘就开始执行Python代码的程序
  10. 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手