支持web信息分类的高性能蜘蛛程序 爬虫程序 spider

转自:小型微型计算机系统 文/高克宁 柴桥子 张斌 马安香

   蜘蛛程序研究现状

          对任何需要抽取大规模数据信息的网络蜘蛛,都应考虑如下几个方面的问题

           1.灵活性:任何运行于复杂环境的网络蜘蛛,都需要对平台软硬件资源,网络性能等具有很好的自适应能力,以及对于不同性能需求有相应的调节能力。

          2.健壮性:蜘蛛程序需要很强的容错能力,主要包括:处理不规范的HTML代码以及各类异常,应对服务器端或客服端的异常行为,选择合适的传输协议等,以求将损失减到最低,并具有错误恢复机制

          3.可维护和可配置性:系统需要有良好的人机接口,能够监控系统运行状态与进程,统计各个节点下载页面数量,增删未被处理的URL,终止系统运行等。

           目前,网络蜘蛛实现策略可以有多种,并一直被人们不断的改进和扩充,下面是几种常用的实现策略:

            1.广度优先的蜘蛛程序

            这类蜘蛛一般从一个初始web页面集合出发,进行页面发现和下载广度优先是指首先沿着初始web页面的到处链接进行爬行。在实际应用中,一般都会对蜘蛛程序进行各种改进,增加约束,例如限制在同一站点内页面的下载数量,下载特定主题相关的页面等。

            2.Repititive蜘蛛程序

             为了保持所抓取web页面和索引的有效性,系统会周期性的调用蜘蛛程序来重新采集信息页面。在这类蜘蛛通常采用各种启发式算法,以提高更新的效率。例如,对于系统认为重要的页面,站点等,更加频繁的进行爬行。

            3.定题爬行蜘蛛程序

             现在很多定题搜索引擎采用一定的启发式算法,针对特定领域主题的web信息进行蜘蛛爬行,例如针对新闻,视频,购物,mp3,图片,学术论文等。除采用启发式算法,还有基于超链接结构分析和机器学习的方法设计定题爬行蜘蛛

             4.深层次爬行蜘蛛程序

             在Internet上,除了大量以web页面组织的信息外,数据库,文件系统中的信息量也是可观的,如何从这些数据源中抽取和索引信息,一提高检索系统的信息覆盖面以及查全率已近成为蜘蛛程序的另外一个研究方向

              此外,还有根据概率论进行可用web页的数量估算,用于估评互联网web规模的抽样蜘蛛;采用爬行深度,页面导入链接量分析等方法,限制蜘蛛下载不相关的web页的选择性爬行蜘蛛等。

支持web信息分类的蜘蛛程序的研究思路

              在www上,web网页与普通文本最大的不同在于web网页内具有超链接结构,网页与网页之间是通过超链接相互链接的,这些超链接表示了网站设计者从一个网页到另一个网页的认同选择在Internet上,一个网页几乎是不存在的。网页间的链接关系蕴含着大量信息,既表明网站设计者对网页关系的理解,又是浏览者选择浏览页面的重要依据。

             从对网站结构的分析中,我们发现,为了方便用户浏览信息,网站通常设有自己的分类体系。网站结构按该体系进行信息的分类组织;在显要位置给出各类别信息入口,不同类别的信息处于网站结构中不同位置,同类信息出现在相近的位置,信息发布时根据其类别选择位置。同时,网站结构的组织,总是从网站首页开始,通过索引页面,链接到最终信息页面。

             网站结构体现了信息的分类组织,站点中web页面根据其功能可以分为两类:信息页面和索引页面。前者主要用于表现信息内容的页面,主要内容为陈诉信息的普通文本,后者主要用于信息浏览的导航和组织,其内容为链接到其他页面的超链接,索引页面出发的链接正好构成了网站的分类信息组织体系,而信息页面出发的超链接则干扰了这种组织体系,所以需要进行页面类型判断处理,准确的判断页面是信息页面还是索引页面,并滤除信息页面出发的超链,能使网站结构更清晰。反之,吧索引页面当作信息页面为忽略其始发的超链,会导致获取网站信息不全,把信息页面当作索引页面而保留始发的超链,则是网站结构图复杂化,难于进行后续的分析。

              要获取web信息及基于网站结构的分类体系,需要蜘蛛程序在遍历网站下载页面时,记录个页面之间的链接关系,并对每个页面都记录所有指向自身的超链,在页面记录中,设置记录所有指向该页的超链的记录。处理新页面时,首先解析出内容和超链,并将内容存入页面对应记录;对于信息页面,则终止,对于索引页面,则将解析出的超链接介入任务队列,并更新所有超链指向页面的记录,在记录链入页面的字段中加入本页URL。

高性能蜘蛛程序T-spider的设计与实现

             在传统的信息获取技术中,通常采用crawler,spider,robot等实现,以获取数据内容为目标,并不关心页面间的拓扑关系。我们设计的T- spider,在获取页面信息的同时,自动记录页面间链接关系,通过页面间的链接关系,形成网站拓扑结构图。T-spider 以网站站点为基本单位,以传统的信息获取方式为基础,建立了基于分类语义的信息抽取机制,在抽取网页信息的同时,记录web页面间的链接关系,获取网站的拓扑结构信息。同时T-spider采用了分布式多粒度任务调度算法进行高效的任务分割,支持断点续传并实现了计算节点的在线插播,使T-spider具有高性能,高可靠性和很强的可伸缩性

              体系结构

             支持web信息分类的蜘蛛系统,分为任务执行端(客户端),任务调度端(服务器端)以及数据服务端三部分,其体系结构见图1需要执行的T-spider,则采用分布式设计,运用了java多线程,JRMI,JDBC等技术

              每一个T-spider任务执行端关联一个站点(由服务器端分配),并维护一个URL队列,队列中的每个URL可以在四种状态URCE间迁移(U=为处理,R=处理中,C=已处理,E=出错)T-spider采用广度优先,抢先式多线程的方法从限定站点下载web页,即一个线程下载一个基于URL链接的页面,并进行web页面解析,得到站内URL和发现新站点URL,标记页面之间的链接关系,同时启动新的线程来处理新的URL链接,另外,我们将URL队列持久化到数据库,因此在T-spider任务执行端以外down掉后,能够断点续传。

              T-spider的任务调度端主要完成以下工作

              1.为各个T-spider执行端分配web站点的URL

              2.接受客户端发送来的站点URL,维护站点URL队列及其状态URCE

              3.记录网络蜘蛛系统日志,便于系统性能,运行状态等的控制

              T-spider客户端线程间的协调通信采用java的线程同步技术synchronized,各个T-spider客户端间的同步采用java RMI 技术并由T-spider服务端调控

               在数据服务端中队URL,进行缓存,提高了系统处理速度T-spider的任务执行和任务调度端都需要维持一个URL队列:任务执行端的URL队列中储存了站内URL;任务调度端则是站点的URL。在这些URL队列上有大量的操作,包括URL查找,URL插入,URL状态更新等。如果spider以300 页/秒的速度下载web页面,平均将会产生2000多个URL,因此简单的采用内存数据结构存储这些URL队列有一定问题,系统并没有足够的内存空间;而采用直接持久化到数据库,则需要大量的数据库连接,查询等操作,系统效率会明显下降,如果采用URL压缩的办法,尽管在一定程度上可以平衡空间和时间的矛盾,但仍然不适合用于大规模数据采集的spider

               我们设计的数据结构支持灵活的URL缓存实现,对于URL的检索提供了高效解决方案,任务执行端和调度端均可以通过该缓冲器进行URL检索,该缓存采用了 judy-Array API综合了jugyL-Array和N judySL-Array。缓存中URL的更新策略是依照URL被访问的次数决定换出对象:在hash表中储存的数据以压缩的URL为key,该URL被访问的次数为value,当缓存满时,将value最小的<key,value>清除,其中hash中的URL可以压缩形式查找,不需要解码.

              T-spider的数据库主要存储一下信息:站内URL队列数据(包括URL,站点域名,状态信息,访问次数);web页面数据(包括页面URL,页面标题,导入链接,摘要,正文);站点URL队列数据(包括URL,站点名称,状态信息,链接数量)。

T-spider的实现算法

T-spider任务执行端算法

               T-spider任务执行端的主要功能是从限定的站点下载web页,并进行HTML解析,得到站内URL和发现新站点URL,标题保存页面信息和页面间连接关系。我们采用java设计实现的T-spider任务执行端可部署到大多数计算平台上,包括:windows,solaris,Linux,Unix 等,且这些计算节点支持动态在线插拔,即在蜘蛛程序运行过程中可增加或减少任务执行端个数而不影响系统正常运转:不需要系统中断挂起或重新启动等。

              下面是T-spider实现过程中的主要算法

              算法1 页面种类辨识算法

              T-spider除了下载web页面外,还需标示页面间连接关系,提取站点结构图。网站结构图是以页面URL为节点,页面间相互链接为边的有向图。网站信息页面之间的交错链接实际上造成了网站结构的混乱,应该剪掉,即使信息页面没有到处链接。准确的判断页面是最终信息页面还是导航作用的索引页面,忽略最终信息页面出发的超链,能大大地简化网站结构图。

             我们主要根据页面url形式以及页面内容的特征,判断页面是否正文页面,页面种类辨识算法描述如下:

              step1 初始化:url有效性分析与阔值L的设定

               step2 如果页面对于URL中path部分为空或者没有最终文件名,则可以确定该页面为索引页,返回页面为索引页面的判断;否则转step2

              step3 验证是否出现以下三种情况;页面url的path中的文件名为无意义的顺序号;页面中正文文本的单段最大长度超过阔值L;页面正文文本的前面出现标题。如果出现这三种情况的任一种,则返回该页面为信息为信息页面,否则返回该页面为索引页面。

                算法2 站外链接识别

               由于我们采用的分布式多粒度任务分割算法,在T-spider任务执行端不需要处理新发现的站点URL,而直接将其转发到任务调度端处理,因此需要截断指向站外的链接,保证T-spider总在站内执行,及准确地根据超链URL判断超链是否执行站外。由RFC对URL的定义可知,URL的格式为 [protocot//host:port/path?query],一般情况下,同一网站内所有页面对应URL的host是相同的,所以可以使用 host匹配作为判断超链接是否指向站外的标准,进一步研究发现,很多大型网站中一个分类目录对应一个主机,所以前面的判断标准必须改进。研究host的组成可知,host的格式一般为【站内分类 站点标志串 站点类型各异的串】 站点类型串只有 [ com | edu | gov | net 国家域名] 几种类型,所以我们取站点类型各异串前面的串,即站点标志串作匹配,超链URL的host中是否包含此串,为超链是否站内的判断标准

               算法3 分布式多粒度任务分割算法

               T-spider任务执行端通过RMI与远程任务调度端进行通讯:从调度端接受任务,向调度端报告站外链接。任务执行端将高度自治,即自行同步多线程的资源共享,站内任务调度,解析HTML并提取链接,维护URL队列状态等,这就减轻了远程任务调度端的负载。在T-spider中我们可以对URL以站点为单位进行了分割。本算法很容易进行扩展,可以实现URL更多层次级别的分割,例如站内URL可以继续以栏目作为分类语义进行划分;站点可以按照IP段进行划分

               算法描述如下:

               step1 任务执行端向任务调度器请求任务即站点URL,成功则加入到URL队列,并标记该URL为状态R;失败则等待一定时间间隔再次申请,如果再次失败则该任务执行端运行结束

               step2 下载URL链接到的web页面,下载失败则标记该URL为状态E

               step3 解析web页面,得到文本信息和超链接两部分内容

               step4 解析得到的web内容存入数据库

               step5 解析得到的站内URL,如果未在URL队列中发现,则将<url,url>加入到url队列中,并置状态U,并存储到数据库;若该URL已在队列中则放弃之,同时追加数据库中对应URL的父节点URL

               step6 标记当前URL为状态C

               step7 向任务调度服务器提交新发现的站点URL

               step8 向URL队列申请U状态<url,url>,如果成功则装step2;失败则等待一定时间间隔再次申请,成功则转沙特p,失败则转step1

T-spider任务调度端算法

                 T-spider的任务调度端主要完成以下工作:

                 1. 为各个T-spider执行端分配web站点的URL   

                  2.接受客户端发达来的站点URL,维护站点URL队列及其状态信息URCE

                  3. 记录网络蜘蛛系统日志,便于系统性能,运行状态等的监控

                  我们采用jav RMI进行服务器端的实现,通过JNDI各个任务执行端可以透明的访问调度服务器

                  我们在T-spider的实现中采用了单个调度服务器,由于分布式的体系结构是本系统具有很大的伸缩性,不仅可以部署多个任务执行端,而且可以将调度服务器的URL处理范围以IP段进行划分,运行多个任务调度端,形成更大的Master-Slave主从式群集系统。

你可能感兴趣的:(多线程,数据结构,Web,算法,网络应用)