包含网站目录提取与网页归属目录的蜘蛛程序总体设计

类别:Java 点击:0 评论:0 推荐:

1.    总体设计介绍

1.1  核心思想

在网站建设过程中,网站内容总是按一定的目录层次组织的,如果在蜘蛛程序获取页面的过程中,同时获取网页所属的网站目录层次信息;在返回用户的查询结果时,结果集按此目录层次信息组织,用户可以通过选择感兴趣目录缩小结果集,提高浏览效率(browseability)。由于当前搜索引擎是平坦(flat)的返回结果集,而结果集一般很大,用户往往不会看到后面的结果。采用上面的方法,能很好的解决这个问题,提高搜索引擎的服务质量和满意度。

2.1  实现方案

1.         网站目录信息的提取

为了方便用户浏览,网页中一般都设有导航栏,导航栏一般按层次组织。导航栏的各项一般为某种分类方式下的一个类别。所以,根据导航栏及其层次,我们可以提取出网站的层次目录信息。由于html语法的不严格性,同样的视觉内容,可能会有不同的html源文件形式。在加上不同风格下,导航栏所处位置不同,所以如何准确的确定导航栏对应的html源文件,从而进一步分析是问题的关键。

目前,从给的页面html源文件中,确定导航栏部分的方法有两种:

l         基于页面分块确定导航栏。详见游镇文章。这种方法的有点是通用性好,能方便的适应多种网站风格。缺点是处理量较大,且涉及数据库操作过多。

l         基于<table>标签定位导航栏。这种方法是基于当前较为规范的中文网页,基本满足一下几个假设而做的:

a)         导航栏包含在一个内层<table>中(即这个table中不再嵌套table),并且此table的width值不少于500(只适用于上方导航栏);

b)        导航栏所含超链接不少于五个;

c)        导航栏中各项的显示字符不能过长;

d)        导航栏中超链接项大部分为站内链接;

e)         导航栏中超链接项中,大部分链接的层次不能太深,并且不含query。

f)         一页中,根网站组织目录层次相关的导航栏只有个,从而在网页中,只需找到一个导航栏即可。

将以上假设做为过滤条件,一般可以准确的找出规范网站的导航栏即层次,从而确定目录层次。这种方法的有点是快速,逻辑简单。缺点是适用风格单一,当网站风格变化后,将不再适用。

所以,我们在两种方式中动态变化,从而达到效率和通用性的统一。

2.         页面所属目录层次的确定

在分析页面新链接时,把本页url做为这些新链接的父亲,在页面库中记录下来。每个页面最多可有三个父亲节点,所以可以记录三个father。分析页面所属类别时,父亲属于的网站目录层次最下端目录,就是该页所属的目录。(目前成功运行的蜘蛛只记录了一个父亲,这种实现方式有待讨论)。

2.    蜘蛛总体设计

2.1  蜘蛛流程图

 

2.2  蜘蛛流程详细说明

1.         进入一个网站时,我们默认第一次处理的页面为网站首页,如果不是,则经过相应的处理得到首页url,并从该url开始处理。

2.         在当前页面中,找到导航栏,并把其中的项目作为网站的栏目,栏目级别初始时为0,向下递增(目前可准将确定0、1两级栏目,基本正确的确定0、2、3三级栏目)。栏目信息写入栏目库。

3.         分析当前页面,提取内容,写入页面库;提取页面中的所有超链接,将未遇到过的链接放入代处理对列。对已经遇见过得链接,在网页库中,以当前页面url更新其该链接对应项的father。

4.         判断代处理队列是否空,空则程序结束。否则取出队列中首部url。

5.         当前url是否为栏目项,并且该栏目的级别在我们欲找级别内。是则转向2;否则转向3。

3.关键模块设计

 

3.1基于<table>的导航栏提取

 

3.2网页分析及处理

这部分主要有两个工作:获取页面html源文件中的在浏览器中显示出来的内容,并存入数据库,目前内容分为标题,链接文本和普通文本三部分;获取页面指向的所有超链接,把没有遇到过的链接放入待处理队列,已遇到过的链接则更新其father。

4.当前主要问题

导航栏为教本语言或jss、css等方式实现时,我们不能处理;

5.讨论问题

怎样确定网页所属类别

本文地址:http://com.8s8s.com/it/it14084.htm