简析搜索引擎的网络爬虫技术.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简析搜索引擎的网络爬虫技术.doc

  简析搜索引擎的网络爬虫技术 简析搜索引擎的网络爬虫技术   1 网络爬虫技术   网络爬虫也称为文档抽取系统,是构成第三代搜索引擎系统的重要组成部分之一,主要由文档适配器与信息爬行器组成,文档适配器能够处理不同类型的文档,信息爬行器主要进行页面信息的收集工作,文档抽取子系统首先根据配置文件的约定,定时产生信息爬行器对分布在网络上的信息节点进行遍历,然后调用对应的文档适配器来抽取网络文档信息。文档适配器能够抽取的页面文件种类繁多,能够对各种类型的文档以及多媒体文本信息等。信息爬行器为计算机程序的一个进程或线程,通常采用并发工作方式,以便能可能多、周期尽可能短地搜集网络节点的页面信息,同时还要避免死链接或无效链接。信息爬行器一般采用分布式并行计算技术来提高工作的广度与速度。   2 图的遍历算法   网络爬虫在网络中执行信息收集的过程实际上就是一种图的遍历。图的遍历算法通常有两种方式:即广度优先算法与深度优先算法。下面就具体介绍一下两种算法。   通常深度优先算法使用的数据结构为栈,通过栈的出入特点进行搜索,其过程首先从该图的某个顶点或者子图出发,将所有属本文由.L.收集整理于该子图的顶点信息的链接地址(即URL,Universal Resource Locator)进行压栈操作,待所有顶点都操作完成后,然后将栈顶的元素取出,根据该元素的URL,访问该元素URL所指向的网络,然后将该页面的信息进行收集与分析,从而得到该页面内部的所有的URL连接信息,再将该页面所有的连接信息进行压栈,从而按照图的广度将图上所有的链接进行展开操作,重复这些步骤就可以对图进行深度搜索遍历,达到遍历收集所有互联网信息资源的目的。   深度优先搜索算法在展开页面链接时总是从栈顶进行展开,因此随着时间的增加,栈的深度也在不断增加,位于底部的元素可能会长时间不能进行处理,从而造成该算法陷入一个大的页面而不能继续展开遍历。为了避免这一问题,可以采用广度优先搜索算法,广度优先搜索算法是通过队列这种数据结构进行展开的,根据各个元素节点距离最初节点的层次对所有的网络节点进行遍历,从而对每个节点都能够在访问全网一次的时间内进行公平处理,克服了深度优先算法陷入局部节点的不足,也保证了不会漏掉队列后面的的元素,从而达到了公平对待互联网上所有节点资源的目的。   在广度优先算法中,根据是否已经对节点进行访问,将爬行队列构造为两部分:即待爬行队列与已爬行队列。待爬行队列主要存储需要进行访问的元素节点URL,而URL在队列中的先后顺序则体现了算法的爬行策略。而已爬行队列则主要存储已经访问过的URL,由于该队列的长度随着时间的增加不断增长,因此需要优化该队列的插入与查询操作;在网络爬虫的爬行过程中,不论是带爬行队列还是已爬行队列,都需要频繁进行插入与查询操作。因此,该队列数据结构的性能会直接影响搜索引擎的搜集性能。   对爬行器来说,网页的采集与解析是核心工作。而爬行程序是否高效,主要取决于网页采集的效率。其过程分为5个步骤:   1)将待爬行队列的第一个元素取出;   2)访问DNS服务器,对URL进行域名解析;   3)根据ROBOT网络协议,获取该URL服务器的权限;   4)若得到访问权限,则对服务器发出URL请求;   5)通过HTTP协议进行访问。   网络爬虫在工作时,若频繁访问DNS服务器,可能会造成比较繁重的网络负担,引起服务器响应以及网络延迟,会降低爬行程序的效率。因此,通常在本地服务器上建立一个DNS缓存来降低对DNS服务器的访问频率。同时,为了提高爬行程序的效率,通常采用多线程或者多进程来对网页采集程序进行流水线处理,多线程与多进程程序设计相对比较复杂,需要解决的问题主要是进程的同步和互斥;也就是解决多个 线程或进程共享资源的问题。造成死锁的情况通常是占有一个资源然后又请求另一资源,因此,若系统只存在一个共享资源就不会造成会死锁。为了解决饿死问题,通常只采用一个等待对列,若待爬行队列处于使用状态,则将要访问该队列的线程插入等待队列。而队列的特点能够保证了所有的等待线程都公平对待,从而解决了饿死问题。具体算法如下:   1)对爬行队列上锁。若爬行队列已经上锁,则将该线程或进程插入等待对列。   2)取出待爬行队列的URL元素。   3)对爬行队列解锁,然后唤醒下一个进程或线程。   4)访问页面,将页面中的URL进行解析。   5)对爬行队列上锁。如爬行队列已上锁,则插入等待对列。   6)将步骤4)得到的URL插入对列。   7)对爬行队列解锁,唤醒下一个进程或线程。   8)重复1)7)直到结束。   3 页面解析   在解决了互联网节点页面遍历的问题后,网络爬虫剩下的工作就是页面解析,页面解析主要是分析与理解HTML(超文本标记语言)文档。HTML作

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档