对于搜索引擎来说,网络蜘蛛是最底层的原料提供者。对网络蜘蛛的需求主要来自索引器。
索引器一般为全文索引器,它并不能干预网络蜘蛛的行为. 因此,网络蜘蛛必须可以自动不停地运行。
索引器要求网络蜘蛛爬取并保存一定字符集范围内的文本文件。保存形式可以是一个大文件也可以是文件夹或数据库。同时,由于互联网是一个全天候开放的系统,网络上的资源随时都有可能已被更新。网络蜘蛛要尽量做到下载的网页保持最新版本,这样才可以获得有实效性的信息。综上所述,网络蜘蛛的功能可以概括.为以下两点[1]:
(1)不需干预的自动爬取网页;(2)以文本形式保存网页内容,并对其进行定期更URL SeⅣer是对URL队列及其相关操作的一个封装,为工作线程提供无重复的URL。URL senrer在内部维护着多个队列用于存储有状态和优先级的URL,这样来避免URL的重复爬取和实现URL的优先爬取策略。
页面存储模块的功能比较简单,它为工作线程提供文件存储服务。它将线程请求到的H吼L字符序列存储到本地文件或数据库。
线程池是一种线程组织管理方法。由于线程的创建将消耗一定的系统资源,所以为每一个URL创建一个线程并不现实。一个好的解决方法就是使用线程池。
线程池只创建一定数量的工作线程在线程池中等待,当有任务时,工作线程便开始运行,否则它们一直等当线程从URL SeⅣer获取到URL后,它将发送一个HrI『I:P请求来获取URL所指向的网页。获取成功后对网页代码进行解析,从中提取更多的URL并发往URL Senrer作为以后继续爬取的目标。网页被解析完后,将被页面存储模块存储。整个过程及URL在URLSeⅣer中的相应状态如 网络蜘蛛提供的最终结果是网页。网页被请求、保存到本地后,并不能就置之不理了。假设索引器为一个网页索引之后提取了一个关键字,用户通过搜索这个关键字得到了这个网页的URL,当用户浏览这个URL指向的页面时,如果这个页面已经改变了,那么本次搜索对用户来说就是无效的。用户最终从搜索引擎得到的不是网页,而是指向网页的URL,网页始终保持在它本来所在的Web服务器中。因此,搜索引擎要保证页面库中的网页与Web服务器上的网页一致。
网络蜘蛛第一次处理一个URL时,会将网页保存到本地,之后定期对其进行重复请求,来检查网页是否是最新的,如果不是则下载。这个请求与第一次请求是有区别的。后面的请求只请求网页的头信息,根据头信息中的最后更改日期字段值来判断网页的状态。
设定重复请求的周期并不是一个简单的问题。最理想的情况是周期非常小,实现实时更新。但如果设定太短,则网络蜘蛛将花费很多时间更新已下载的网页,这样就减少了网络蜘蛛请求新网页的时间,影响搜索引擎优化的查全率。此外,互联网上的网页并不是都会更新,很多网页从不更新,也有的网页很少更新或很频繁更新。因此,更新也应有优先级。重要的经常更新的网页,更新周期要短,不重要的不经常更新的网页,更新周期要长。所以,网页的更新周期要有针对性的设定。
关键是对其更新周期的判断,可以使用基于经验的方法:当一个网页被两次重复请求后仍然未更新,则第三次可以增加周期的长度;当几次重复请求后都发现被更新时,可以缩短周期。
(编辑:小酷)