Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100071
  • 博文数量: 41
  • 博客积分: 2016
  • 博客等级: 大尉
  • 技术积分: 560
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-30 17:40
文章分类
文章存档

2011年(7)

2010年(5)

2009年(19)

2008年(10)

我的朋友
最近访客

分类: Java

2009-09-07 15:00:19

网站内容抓取和网页数据抽取几乎是每一个网站建设者都要使用的技术,网站的网页都是HTML或者XHTML文档,数据抽取/信息提取方法分成两类:

1,通过正则表达式提取内容,(X)HTML文件就是一个文本文件,直接使用正则表达式在指定地方提取内容即可,"指定地方"不一定是绝对定位,例如,可以参照HTML的标签定位,更准确

2,利用DOM、XML、XPath、XSLT提取内容,(X)HTML文件先转成DOM数据结构,再使用XPath遍历这个结构提取内容或者使用XSLT成片地抽取数据。

HTML文件本身是一个有结构的文件,文档中的文本内容用众多标签(tag, HTML element)括起来,这些标签形成了HTML文档的结构,在浏览器上显示时,首先将这个有结构的文本文件转换成DOM数据结构,期间还要进行一些必要 的纠错,例如,有些HTML文件中的标签没有闭合,只有开始标签,没有结尾标签,需要在产生DOM结构之前将这些错误进行修正。因此,如果单纯使用正则表 达式的方法,这些结构化信息没有很好的被利用,相反第二种数据抽取方法充分利用了这些结构信息,而且可以采用模块化的编程方法,大大提高编程效率和减少程 序的bug,例如,使用XSLT的xsl:template,编写模块话的数据格式转换和提取。但是,XSL语言也是比较复杂的,本文仅仅讲解一个 XSLT使用技巧:将HTML页面中的某个片段的内容提取出来,但是过滤掉某些不需要的块。形象地说,就是将一个页面的某一大块剪下来,但是,将其中的一 些小块挖掉。

使用xsl:copy-of可以将HTML的一个片段整个拷贝下来,但是,如果要将这个片段中的某些内容挖掉,需要一些技巧。可以使用xsl:copy, xsl:copy只提取当前节点,而xsl:copy-of提取当前节点及其子节点并递归调用。用xsl:copy能够定制一个类似xsl:copy- of的递归调用的过程,并且在递归调用过程中可以任意控制筛选哪些节点。

即将发布的最新版本将提取规则定义方法扩展到3种:
1,完全由软件自动生成;
2,用户可以使用XPath表达式指定特定信息属性的定位规则;
3,用户可以定义自己的XSLT提取片段。

要实现上述需求,需要使用第三种方法,定义一个xsl:template,例如,如下template


















用于从一个freelancer project(自由职业者招标和外包项目)网站上提取任务描述信息,只提取节点(node),例如,HTML元素和文本,不提取节点属性 (attribute),例如,@class等,需要过滤掉的节点用空template实现,后面四个就是其这种作用

将定义好的上述template片段放在网页抓取/数据抽取/信息提取软件工具包MetaSeeker中的的bucket edit工作台的输入框中保存,即可由系统自动嵌入到自动生成的信息提取指令文件中。
阅读(823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~