网页抽取技术浅谈

shiqi.cui<cuberub@gmail.com>
May 9, 2009

  这是一篇关于网页抽取技术的随笔。文中所述是笔者在实际开发过程中的一些感想,如有不当之处,敬请斧正。

1 引子

  网页抽取,即Web Extraction,指从网页中抽取出有意义的信息。这里所谓的有意义的信息,是根据应用而定的。如,对于BBS页面的抽取,真正有价值的内容有可能是论坛的主帖和非灌水的回帖;对于数码类产品页面的抽取,用户需要的是产品的各个参数字段;对于新闻类页面,有意义的内容是文章的标题和正文。由上可以看出,网页抽取所处理的页面类型是多样化的。而互联网上存在的海量网页,其结构的多样性更是超出一般人所能想象。大量不规范的页面、充斥广告没有内容的页面、Ajax技术产生的页面,给网页抽取提出了极大的挑战。

2 背景

  现阶段,互联网上的内容还是在WWW的框架下,遵循基本的HTML语法。许多热门的应用都会用到网页抽取技术。各大搜索引擎提供的网页搜索结果页,就用到了Title抽取和网页摘要抽取的技术;各种垂直搜索,一般是基于特定领域的Field数据抽取技术,如生活搜索中的餐馆搜索,就提供了对餐馆地址、特色菜等Field的自动抽取结果;在一些信息库的构建中,更是会用到深度的网页信息抽取和挖掘技术。 

3 困难

  网页抽取面临的一些实际问题,使得这项工作非常困难。 

  HTML的设计目标是用来表示网页的布局信息,基本不承载语义信息,这使得难以通过HTML来获取文本内在的语义关系。另外,HTML不是一门语法严格的语言,这使得网上充斥着很多不符合 HTML语法的网页。

  网页结构支持对外部资源的链接,如引入图片、JSCSSAjax技术支持通过用户的点击来获取特定数据。这使得对页面的解析变得复杂。

  由于网络营销和搜索引擎优化的普及,网页中可能加入大量的广告或者垃圾链接等。这使得获取网页的主题内容变得非常困难。

  HTML页面在浏览器中展现的效果可能跟源码本身大相径庭,这就提出了对基于浏览器技术的页面分析技术的需求。

4 层次划分

  从领域相关性来讲,网页抽取分为两个层次。

  一个是比较浅的层次,对网页的领域没有太多的知识,网页结构也是多样化,这属于通用抽取的范畴;

  一个是深度挖掘的层次,对特定领域的网页进行抽取,可以利用领域知识,网页结构也可能有特征。如资讯网页、火车票网页、淘宝网页抽取等。 

  一般来说,深度层次可以建立在浅层抽取的基础上。

5 基本方法

  网页抽取的一般思路是,利用网页的结构信息、文字信息或者领域信息,判断出哪一部分内容更重要。

  结构信息包括文字的前后关系、DOM树上节点间的层次关系、网页元素在视觉上的位置关系等。

  文字信息包括文本块的长度、文字链接比、文本块间的内聚度以及语言学上的一些特性。

  领域信息是相对于特定的应用而言。

6 一般过程

  经典的网页抽取一般分为以下几步。 

6.1 网页解析

  原始的网页是HTML源码,网页解析是根据对HTML语法的解析,得到不包含HTML Tag的文本数据。

  解析的方法主要有两种,SAX方式和DOM方式。

  SAX方式一般基于事件模型,提供了对XML串行处理的接口。

  DOM方式是基于树模型的,通过为XML建立DOM树的方式,简化并丰富了对HTML的操作。

  SAX方式由于不需要把整个网页load进内存即可处理,因此占用内存较少,而且速度快,但编程模型会复杂一些。

  DOM方式提供的树结构,可以方便的查找DOM节点的嵌套层次,而且允许更新DOM节点,但对于大的网页,DOM树的建立需要消耗较大的内存。对于代码不规范的页面,需要做更多的处理。 

6.2 网页分块

  网页一般是通过块来布局的。例如,一个典型的页面包括bannerleft menu、相关链接、主体区域和footer几块,而主体区域部分还可以分成更多小粒度的块。

  网页分块,英文是Page Segmentation,相关的研究比较多,可以参考相关论文[1]。

  分块的基本思想是把紧耦合的数据分到一个块中。其判断依据可以考虑以下内容:

  1. HTMLTagTag分为Block-LevelInline-Level两种,Block-LevelTag,如TABLEDIV等,本身具有布局的作用,可以用来作为判定块的标志。

  2. 基于文字链接比的差异。如果假定同一个块中,其文字链接的组成特性是一致的,那么块可以根据链接密度的不同进行区分。

  3. 视觉信息。网页元素在浏览器中的显示风格和位置等,往往反映了网页设计者对其页面布局的思考。如同一个块,往往会采用相同的背景色或者字体;相关链接块往往是页面的右侧的狭长区域。

  4. 基于文本的语义相关度。 

6.3 内容提取

  网页分块的目的,是为了基于分块消除掉一些无用的信息,提取出主要的内容。内容提取的本质,就是对块的重要度进行排序的过程。

  对块重要度的计算方面的研究,根据侧重点的不同,有很多相应的计算方式。具体的研究和实验结果可以参考相关论文[3]。下面,针对两种比较重要的应用场景,阐述一下常见的做法。

6.3.1 Title抽取 

  Title抽取一般应用于新闻标题的分析。对新闻做内容分析时,标题往往能非常概要的对整篇文章的主题进行总结。而HTML页面的TITLE标签指示的内容有时并非真正的文章标题,而是包含了网站名称或者SEO的关键词堆砌。真正的TITLE往往会独立在页面中出现。通过有效的算法,可以比较准确的识别标题。

  一种方法是基于规则来做。这种方法,需要人工总结Title在页面中出现的规律,并转换为识别规则。如Title一般在正文之前,Title后面往往有作者或者发布时间,Title一般不会过长,Title中一般不会有链接,TitleTITLE标签往往有一定的匹配等。

  还可以采用机器学习算法来做。机器学习的本质是,依靠数学计算来捕捉Title在网页中出现的规律,然后对规律建模,进而可以对新的网页进行Title识别。这样,就把人从总结并描述规律的繁杂任务中解放出来。现在,我们只需要把跟Title相关的各种Feature找出来,输入到模型中就可以了。例如,Title的识别可以理解为对网页中的文字串进行分类的问题,这样就可以利用统计机器学习中的分类模型来解决,如Naive BayesSVMMax-Entropy等。 

6.3.2 正文提取

  新闻正文提取的一种经典算法是BTE(Body Text Extraction)算法,在相关论文[2]中详细阐述。BTE算法的基本思想是,寻找网页中文字密度最大的区域。BTE把网页元素分为TAG和信息文字两类,线性扫描源码,对两类元素分别计数,以TAG数目作为x轴,以文字数目作为y轴,画出的线斜率越大的区域,表示文字密度越大,因此是正文的可能性越大。BTE算法的缺点是,对于正文不连续的网页,没有好的解决办法。 

  还有一种基于文本块特征权重的算法。根据文本块的特征,如中文标点符号数目、文字链接比、位置信息、文本长度、字体大小等,计算每个文本块的权重,然后利用一种权重下降速率判定方法,选择出最可能是正文的块。 这种算法可以有效的解决网页中多正文块的情况,而且对各类网页的处理整体效果较好。

7 Web-site based

  基于网站学习进行网页抽取,是一个比较热门的研究方向。一个网站的网页,往往是采用一些模板生成。这些网页之间,某些块的结构是相同的。不同的网页,往往会有一些重复出现的内容。通过对网站的网页进行聚类,把结构相同的网页分组。然后对每一组网页,进行结构相似性和内容相似性的推导,可以识别出网站内的噪音数据和有效数据。

  相关的研究可以参考相关论文[4], [5]

8 其他

  由于网页的结构各异,很难找到一种通用的算法来分析各类网页。因此分而治之的思想可以被应用在网页抽取中。通过对网页分类,然后对不同类型的页面设计针对性的分析算法,往往可以达到很高的准确率。

9 References

[1] Deepayan Chakrabarti, A Graph-Theoretic Approach to Webpage Segmentation, 2008
[2] Aidan Finn, Content classication for digital libraries, 2003
[3] Ruihua Song, Learning Block Importance Models for Web Pages, 2004
[4] Kristina Lerman, Using the Structure of Web Sites for Automatic Segmentation of Tables,
2004
[5] Lan Yi, Eliminating Noisy Information in Web Pages for Data Mining, 2003
[6] Craig A. Knoblock, Accurately and Reliably Extracting Data from theWeb: A Machine
Learning Approach, 2004


posted on 2012-03-24 23:57  cuberub  阅读(1751)  评论(4编辑  收藏  举报

导航