当前位置: 首页 > news >正文

搜索引擎中的网络蜘蛛技术探析

  摘要:搜索引擎技术可以从海量的 网络 信息中获得我们想要的信息,随着网络信息资源的急剧增长其作用越来越显著。本文介绍了搜索引擎技术中的网路蜘蛛,分析了其对文件的处理方法,研究了其搜索与更新策略。
  关键词:搜索引擎;网路蜘蛛;更新策略
  
  一 网络蜘蛛工作原理
  
  网络蜘蛛,即搜索引擎机器人程序。将整个互联网想象成一张很大的蜘蛛网,而搜索引擎机器人程序通过链接来抓取信息的过程就像是蜘蛛在这张网上爬来爬去一样。网络蜘蛛是通过链接地址来寻找网页的。它由一个启始链接开始抓取网页内容,同时也采集网页上的链接,并将这些链接作为它下一步抓取的链接地址,如此循环,直到达到某个停止条件后才会停止。停止条件的设定通常是以时间或是数量为依据,有时也会以链接的层数来限制网络蜘蛛的运行。
  
  二 网路蜘蛛与网站的交互问题
  
  网络蜘蛛访问一个网站,通常会去寻找一个特殊的文本文件Robots.txt,这个文件如果存在的话通常会放在网站的根目录下。它是专门用来同网络蜘蛛交互用的专用文件。它会将网站管理者的意思传递给访问它的网络蜘蛛,告诉网站同意或是禁止某些或是所有蜘蛛访问网站的某个特定的网页或者目录。它的结构和语法都比较简单,一般网络蜘蛛都可以很容易的理解网站的意思。正规的搜索引擎通过读取这个文件可以很方便的理解网站的意思并按照网站管理者的意思来进行友好的访问。但是这个仅仅只是网络的一个约定协议而以,并没有对其制定相应的强迫手段,更没有提出相应的惩罚,所以这个约定对于遵守者是有效的,但对于那些不懂生规矩的蜘蛛是一点作用都没有。
  在网页中的Meta字段同样也可以放入和上面文件相同效用的内容,它可以告诉网络蜘蛛这个网页对于网站管理者来说,是需要被收录还是仅仅被浏览或是根本就不允许蜘蛛访问。这个字段通常会放在文档的头部,通过读取这个字段,蜘蛛可以在没有读取到全部文档的情况下就了解文档的相关信息,可以避免将无效的网页取下来后又将其废弃而造成无谓的浪费。同样这个规则也是没有特殊限制的,遵守程度完全靠网络蜘蛛的自觉性和网站的设计方式来决定。为了让网站被搜索引擎搜索到,尤其是那些网站所有者希望网络蜘蛛采集的网页,网站的设计者通常会在网站中放入一个叫做sitmap.htm的网页,并将它作为网站的入口文件。
  
  三 网络蜘蛛对于文件的处理
  
  (一)二进制文件处理
  网络上除了有大量的HTML文件和XML文件外,也有大量的二进制文件。为了使网页的内容更加丰富,图片和多媒体文件被网页大量的引用。它们在网页上也是以超链接的形式出现的,因而在链接提取的阶段它们也是会被放在待访问队列中。对于二进制文件通过文件的内容来完成文件的索引是不现实的,现在的技术还没有达到可以通过二进制文件来理解文件内容的地步。因而对于这些文件的处理一般是采用单独处理的方式,其内容的理解完全需要依靠二进制文件的锚点描述来完成。锚点描述通常代表了文件的标题或是基本内容。锚点信息一般是由引用网页来提供,而不是放在二进制文件本身。二进制文件由于种类的差别问题,也需要分别来进行处理。
  
  (二)脚本文件的处理
  这里说的脚本文件一般指的是包含在网页中的客户端脚本,它会在网页下载到客户端的时候才会运行,通常会在客户端上完成一些简单的交互工作。脚本文件一般会在网页中负责网页的显示工作,但由于ajax技术的广泛使用,它也会负责与服务器端的交互工作。由于脚本语言的多样性和复杂性,对它的分析处理无异于制作一个简单的网页解析程序。正是因为处理脚本文件相当困难,许多小规模的搜索引擎往往会直接省略对它的处理。但是由于现在网站设计者对于无刷新页面要求的提高和对ajax技术的大量使用,如果忽略了对它的处理将会是一项巨大的损失。

  (三)不同文件类型处理
  对于网页内容的提取分析一直是 网络 蜘蛛的重要技术环节。对于网上不同文件类型文件的处理,网络蜘蛛通常是采用插件的方式来处理。它会有一个比较智能化的插件管理程序负责管理不同的插件,对于需要处理的不同类型的文件,它会调用不同的插件来处理。之所以是采用插件的形式,主要是出于扩展性方面的考虑。互联网上有许多不同类型的文件,不同的文件需要完全不同的处理方式,而且这个网络是不断变化的,随时会有新文件类型出现的可能。而要完成对新类型的处理,最简单的方法就是给新类型编写新的插件,然后将插件直接交由管理程序来管理。同时这个插件的编写最好是由新文件格式的制造者自行完成,通常只有制造者才最了解新格式定义的意义。
  
  四 网络蜘蛛的策略分析
  
  (一)搜索策略
  网络蜘蛛的搜索策略指的是如何根据抓取下来的URL地址来选择访问地址先后的一种标准或规则。它将指导蜘蛛程序下一步的执行方向。搜索策略一般有深度优先的搜索策略和广度优先的搜索策略两种。
  广度优先的搜索是最简便的图搜索算法,在数据结构上通常会以先进先出的队列结构为主,管理和实现起来都相当的简单,一般被认为是盲目的搜索。它是一种以搜索更多的网页为优先的一种贪婪的搜索策略。它会先读取一个文档,保存下文档上的所有链接,然后读取所有这些链接文档,并依次进行下去。这样做的好处是避免了在极短的时间内连续访问这台服务器上的文档的可能性,因为一个文档上的链接通常会有几个跳到别的服务器上,这样做十分有利于避免影响别的服务器工作。这种方法也通常被应用于聚焦爬虫中。其基本思想是认为与初始uRL在一定链接距离内的网页具有主题相关性的概率很大。同时它还可以使尽可能多的服务器有文档被索引服务器收集。它的缺点是很难深入到文档里面,而且随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率变得十分的低下。
  深度优先的搜索策略是以先进后出的栈方式来处理URL地址的。网络蜘蛛程序分析一个文档,并取出它的第一个链接所指的文档继续分析,然后如此继续下去。它的优点就是能够较好的深入和发掘站点的结构,而且这种算法十分稳定,效率方面也是有所保障的。它对于搜索部分小的网站是有好处的。它的缺点是十分明显的,不断的短时间的访问同一台服务器的问题将非常的严重,而且它还容易陷入无限循环的文档树,这种算法处理这个问题的能力相当的有限。
  将两种算法结合起来也是一种不错的办法,这两种算法互有长短,有些地方也可以形成互补。以一种算法为主,一种算法相辅的办法可以达到取长补短的效果。除了以上的算法之外,最好优先算法也经常被采用,它通过对采集的链接通过一些关于网页质量和效率的算法来排序,优秀者将优先被抓取。但是这个关于质量和效率的算法则又有许多不同的版本,在这里就不作详细的展开了。除去这些常用的算法,还有一些不常被人采用的优秀算法,如Hash算法,遗传算法等。
  
  (二)更新策略
  索引中大量的网页是很少变化的,对所有的网页按照同一频率统一更新是完全没有必要的。因而以网页变化的周期为依据,只对那些经常变化的网页做更新操作也是一些小型的搜索引擎常采用的方法。但是只对部分网页做更新可能会漏掉一些重要网页的更新工作,所以网络爬虫也经常采用个体更新的策略。它是以个别网页的变化频率来决定对网页的更新频率,这样一来基本上每个网页都会有一个独立的更新频率。虽然这样做对于网页更新基本做到了变化与更新同步,在逻辑上也最合乎实际情况,但是为每个网页都维护不同的频率,在不同的周期上对少数页面做更新,更新的频率加快了,每次更新的数量却减少了,这对于系统来说是极人的浪费。为了解决这种情况,可以将这些频率按照几个等级分类,把更新快的和更新慢的分成几个集合,然后给每个集合定一个甲均的更新的频率,用这个频率分别对不同的集合统一进行更新可以平衡以上的矛盾获得更好的效果。

 

本论文网专业从事计算机网络论文业务!如需转载请保留一个链接:http://www.paper56.com/

转载于:https://www.cnblogs.com/skyk/articles/1885197.html

相关文章:

  • 程序设计分析(2)——面向对象与面向过程的分析
  • request获取各种路径总结
  • Sub从接口无法建立OSPF邻居关系实际案例分享
  • [转]oracle定时任务(dbms_job)
  • C++与Lua互操作学习
  • Linux下的NTP
  • 把Excel文件数据导入数据库,支持多工作表
  • Qt添加库文件和头文件目录(QCreator)
  • 如果MFC的消息映射表需要排序...
  • 垂直搜索系统
  • Zend Studio下使用Zend Framwork框架开发配置步骤
  • 关于如何添加windows的性能计数器
  • 分享文档之中国1970年代经典相册(88张图片照射一个时代)
  • [转]了解AOP:来自程序员
  • 25招让男人精力旺旺
  • 【React系列】如何构建React应用程序
  • Apache的80端口被占用以及访问时报错403
  • ECS应用管理最佳实践
  • ESLint简单操作
  • Fastjson的基本使用方法大全
  • FastReport在线报表设计器工作原理
  • JavaScript-Array类型
  • Java新版本的开发已正式进入轨道,版本号18.3
  • mysql常用命令汇总
  • Redis的resp协议
  • Vue--数据传输
  • 安装python包到指定虚拟环境
  • 翻译:Hystrix - How To Use
  • 计算机在识别图像时“看到”了什么?
  • 面试总结JavaScript篇
  • 排序算法学习笔记
  • 思维导图—你不知道的JavaScript中卷
  • elasticsearch-head插件安装
  • #define,static,const,三种常量的区别
  • #if和#ifdef区别
  • (1)常见O(n^2)排序算法解析
  • (C)一些题4
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (十六)串口UART
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .sh
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [docker] Docker的私有仓库部署——Harbor
  • [Editor]Unity Editor类常用方法
  • [hdu1561] The more, The Better 【树形DP】
  • [JavaWeb]—Spring入门
  • [Json.net]快速入门
  • [LeeCode]—Wildcard Matching 通配符匹配问题