基于C#的网页正文信息提取

更新时间:2024-03-23 作者:用户投稿原创标记本站原创 点赞:5672 浏览:20697

摘 要:快速有效的获取有用的信息是一个具有相当挑战性的课题,在传统的信息提取过程中,使用正则表达式提取网页正文信息,可以快速的获得网页的主要信息,缺点是夹杂了不必要的噪声信息.在此基础上提出了基于解析DOM树结构的网页正文信息提取方法,本文使用的方法在此基础上又做了一些改变,即使用逆序解析DOM树的方法来获取网页正文信息,在对网页内容进行净化处理后通过逆序解析达到了效率和速度相对较优的处理结果.

关 键 词:DOM树网页正文信息C#1、引言

信息怎么写作商使用网络爬虫抓取互联网中的网页,分析和整理网页中的信息内容呈献给用户,在此过程中,提取网页正文信息是一个重要环节.传统的方法中,通过快速的正则表达式直接提取网页内容,但容纳了太多的噪声信息.为精确提取正文信息,提出了基于DOM树的页面分析方法.本文提取网页正文的方法建立在正文信息以块形式聚集的分布规律之上,为消除夹杂的噪音,检测定正文信息以相近链路尝试聚集.由于正文信息聚集在一起,并在DOM树中的同一个子树中,若能确定任意一块,就能根据正文信息块之间的相似性从最近的信息块中提取其它的正文信息,并不需访问整个DOM树,甚至不用解析整个DOM树,因此采用基于C#的逆序解析DOM树算法.逆序解析算法是依据给定标记序列,从最后一个结束标记依次向前解析并不断补全缺省标记的过程.

2.网页解析方法设计及实现

2.1DOM结构

DOM的全称是DocumentObjectModel(文档对象模型),它是来自W3C的标准.DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,即是把文档对象化,文档中每个节点对应着模型中一个对象,在Application中正是使用这组对象访问XML文档进而操作XML文档.

DOM是在内存中创建树型结构视图进而提供编程接口,用下面这个XML片段来说明DOM是如何创建树型结构:

<parent>

<childid等于”123”>texthere</child>

</parent>

DOM的关键在于它允许直接更新内存中的树型结构,而不必重定向到其他输出.

2.2算法设计及实现

C#通常使用WebClient、WebBrowser或者HttpWebRequest/HttpWebResponse三种方法获取网页内容,然后经过下图所示流程获取DOM树.

每个DOM树节点对应一对标记,而在HTMI规范中,每个标记对都有开始标记,即每个结束标记至少对应着一个树节点.所以,在逆序解析DOM树的过程中,每遇到一个结束标记则至少要构建一个树节点,并将其添加成当前节点的第一个孩子节点.而当识别到一个开始标记时,就需要进行配对.具体配对算法如图1所示.

Algorithm_Match(Current_Tag,End_Tag_Stack.Active_Node)

{

//Current_Tag是当前标记,End_Tag_Stack是结束标记栈,


//Active_Node为当前节点

if(Current_Tag是文本信息或者独立标记){

Create_NodeNew_Node等于Current_Tag,//创建以文本信息为内容的叶子节点;

Active_Node.Child等于New_Node,//新叶子节点添作为Active_Node的第一个孩子;

Return;}

if(Current_Tag是一个结束标记){

Create_NodeNew_Node等于Current_Tag,//创建以当前标记为名的新节点

Active_Node.Child等于New_Node,//新节点添作为AetiveNode的第一个孩子I

ActiveNode等于New_Node,//设新节点为ActiveNode;

Return,)

//取End_Tag_Stack栈顶元素Top_Tag;

if(Current_Tag与Top_Tag可以配对){

设Active_Node为Active_Node的双亲节点}

删除End_Tag_Stack的栈顶元素;

Return;}

if(Active_Node有孩子节点而且Current_Tag不能被

Active_Node的第一个孩子节点所包含){

Create_NodeNew_Node等于Current_Tag,//创建以Active_Node为名的新节点;

Active_Node.Child等于New_Node,//新节点添作为Active_Node的第一个孩子;

Return;}

Create_NodeNew_Node等于Current_Tag,//创建以当前标记为名的新节点;

设Active_Node为Active_Node的双亲节点;

Active_Node.Child等于New_Node,//新节点添作为当前节点的第一个孩子;

Return;

3.小结

网页正文信息的提取大都基于DOM树结构解析,无论是使用节点统计方法还是链路比较方法.本文介绍了DOM树结构,使用C#语言应用逆序解析DOM树的算法对网页正文信息进行提取分析,达到了解析网页的目的.

相关论文范文