不会吧,不会吧,还有人不知道网络爬虫是什么吧

173 阅读4分钟

 平衡礼貌策略

![](https://upload-images.jianshu.io/upload_images/24896955-95908074e45dfe82.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

爬虫相比于人,可以有更快的检索速度和更深的层次,所以,他们可能使一个站点瘫痪。不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。

![](https://upload-images.jianshu.io/upload_images/24896955-4aaa9cd09007fb68.gif?imageMogr2/auto-orient/strip)

就像Koster(Koster,1995)所注意的那样,爬虫的使用对很多工作都是很有用的,但是对一般的社区,也需要付出代价。使用爬虫的代价包括:

 网络资源:在很长一段时间,爬虫使用相当的带宽高度并行地工作。

 服务器超载:尤其是对给定服务器的访问过高时。

 质量糟糕的爬虫,可能导致服务器或者路由器瘫痪,或者会尝试下载自己无法处理的页面。

 个人爬虫,如果过多的人使用,可能导致网络或者服务器阻塞。

![](https://upload-images.jianshu.io/upload_images/24896955-45c5a02975df18e1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

对这些问题的一个部分解决方法是漫游器排除协议(Robots exclusion protocol),也被称为robots.txt议定书(Koster,1996),这份协议对于管理员指明网络服务器的那一部分不能到达是一个标准。这个标准没有包括重新访问一台服务器的间隔的建议,虽然访问间隔是避免服务器超载的最有效的办法。最近的商业搜索软件,如Ask Jeeves,MSN和Yahoo可以在robots.txt中使用一个额外的 “Crawl-delay”参数来指明请求之间的延迟。

对连接间隔时间的第一个建议由Koster 1993年给出,时间是60秒。按照这个速度,如果一个站点有超过10万的页面,即使我们拥有零延迟和无穷带宽的完美连接,它也会需要两个月的时间来下载整个站点,并且,这个服务器中的资源,只有一小部分可以使用。这似乎是不可以接受的。

![](https://upload-images.jianshu.io/upload_images/24896955-8253c0e507e701a1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Cho(Cho和Garcia-Molina, 2003)使用10秒作为访问的间隔时间,WIRE爬虫(Baeza-Yates and Castillo, 2002)使用15秒作为默认间隔。MercatorWeb(Heydon 和Najork, 1999)爬虫使用了一种自适应的平衡策略:如果从某一服务器下载一个文档需要t秒钟,爬虫就等待10t秒的时间,然后开始下一个页面。Dill等人 (Dill et al., 2002) 使用1秒。

对于那些使用爬虫用于研究目的的,一个更详细的成本-效益分析是必要的,当决定去哪一个站点抓取,使用多快的速度抓取的时候,伦理的因素也需要考虑进来。

访问记录显示已知爬虫的访问间隔从20秒钟到3-4分钟不等。需要注意的是即使很礼貌,采取了所有的安全措施来避免服务器超载,还是会引来一些网络服务器管理员的抱怨的。Brin和Page注意到:运行一个针对超过50万服务器的爬虫,会产生很多的邮件和电话。这是因为有无数的人在上网,而这些人不知道爬虫是什么,因为这是他们第一次见到。(Brin和Page,1998)

![](https://upload-images.jianshu.io/upload_images/24896955-0c1b9427ec1e4be8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

并行策略

一个并行爬虫是并行运行多个进程的爬虫。它的目标是最大化下载的速度,同时尽量减少并行的开销和下载重复的页面。为了避免下载一个页面两次,爬虫系统需要策略来处理爬虫运行时新发现的URL,因为同一个URL地址,可能被不同的爬虫进程抓到。

网页爬虫的高层体系结构

一个爬虫不能像上面所说的,仅仅只有一个好的抓取策略,还需要有一个高度优化的结构。

![](https://upload-images.jianshu.io/upload_images/24896955-fa252e88100ac1ea.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Shkapenyuk和Suel(Shkapenyuk和Suel,2002)指出:设计一个短时间内,一秒下载几个页面的颇慢的爬虫是一件很容易的事情,而要设计一个使用几周可以下载百万级页面的高性能的爬虫,将会在系统设计,I/O和网络效率,健壮性和易用性方面遇到众多挑战。

网路爬虫是搜索引擎的核心,他们算法和结构上的细节被当作商业机密。当爬虫的设计发布时,总会有一些为了阻止别人复制工作而缺失的细节。人们也开始关注主要用于阻止主要搜索引擎发布他们的排序算法的“搜索引擎垃圾邮件”。

![](https://upload-images.jianshu.io/upload_images/24896955-38ca7ad467dafca4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)