By 一页编程
网络爬虫是一个很有趣的功能,它既能获得网络上的资源,但是它也可以带来很多的很严重的问题。我们现在常用的网络爬虫,从按尺寸划分可以分为三大类。
第一类是指以爬取网页或者玩转网页为主的一类爬虫,这类爬虫规模很小,获取网络的数据量也很小,它对爬取网页的速度并不敏感。针对这类的网络爬虫,我们就可以使用requests库来实现它的功能。
还有一类网络爬虫,他是以爬取网站或者爬取系列网站为目的。比如说我们想建立一个爬虫,他能够获得一个旅游网站的资源,那么我们就需要一个能够爬取网站规模的爬虫。我们说这样的网络爬虫是一个中规模的爬虫,它所对应的数据规模往往较大,而他对爬取速度也是很敏感的。比如说我们想去爬去携程上的数据内容,携程有很多的内容,我们爬取它如果速度不快,可能你还赶不上它携程本身数据更新的速度,那就不行了,所以在这种情况下我们要使用一类更专业的库,比如Scrapy。
除此之外,还有一类能够爬取全internet规模的爬虫,它规模很大,但它只有一个作用,就是建立全依赖的搜索引擎,比如说Google、百度。这样的提供搜索引擎功能的公司背后都有一个能够爬取全internet在内的所有资源的爬虫,爬起速度是非常关键的。那么这样的话从只可能定制开发而不可能有第三方库提供相关的应用。
在我们所见到的网络爬虫里,小规模的、爬取网页为主的爬虫占到了90%以上的比例。不要看这样的爬虫非常小,但是它针对特定网页或者针对一系列网页却能够发挥很大的作用。
对于网络爬虫有很多不同的反对的声音,因为网络爬虫会带来很多的问题。
对服务器的影响
对于一个服务器来讲,比如说我运行了一个网站,那么网络爬虫就像骚扰电话一样,其实可以对这个网站带来很致命的骚扰功能。爬虫跟人类所不同的是,它能够用计算机快速运算能力来去获取相关的资源,甚至它爬取的速度比人类要快到百倍甚至千倍。
服务器默认是按照人数来去约定它的访问能力,但是如果有爬虫去服务器爬取相关的内容,甚至说一秒钟可以爬取十万次甚至几十万次的情况下,服务器是很难提供那么高的性能的。这样的爬虫会对服务器带来巨大的资源开销,从而对网站的运营者来讲,爬虫形成了骚扰。
法律风险
由于服务器上的数据往往是有产权归属的,比如说新浪上提供的新闻数据,归新浪公司所有。网络爬虫获得数据后,如果用这些数据进行牟利的话,那将会带来法律风险。
事实上,我们在世界范围内也看到了这样的案例。有相关的法院也判处网络爬虫作者赔偿巨额费用的实际的案例。
个人隐私泄露
此外,网络爬虫还能给个人带来很大的隐私泄露的风险。
举个例子,我可以在网站上放很多个人的照片,我可能通过简单的密码或者简单的目录保护方式来防止照片被其他人通过浏览的方式获得,但是对于网络爬虫来讲,它可以具备一定的突破能力,能够破解简单的访问控制,甚至能够对那些普通用户很难找到的链接进行爬取,从而获得相关的数据,而获得的数据又是个人隐私的数据,那么就能够把你的隐私泄露出去。
限制网络爬虫
综上,我们讲网络爬虫引发的问题最为突出的三个分别是:
- 对服务器性能的骚扰问题
- 内容层面的法律风险问题
- 个人隐私泄露问题
因此,我们说网络爬虫的使用是要有它的规则。在实际的使用中,一些较大的网站都对网络爬虫有相关的限制。
对于一般的服务器来讲,我们可以用两种方式来限制网络爬虫。
1、服务器的所有者、网站的所有者可以通过来源审查来限制网络爬虫。首先判断所有请求网络链接的HTTP头部,找到user-agent
字段,如果不是预定的浏览器,就可以限制它的访问。
2、通过发布公告的方法,也就是所说Robots协议。Robots协议有点像一个告示牌,我告诉所有的爬虫我这个网站可爬取的策略和规则。比如我可以告诉你这部分内容是你可以爬取的,但是有一部分内容是你不能爬取的。发布公告形式仅仅是通过发布来体现,至于是否遵守,那是由网络爬虫自身来决定。
通过这两个方法,互联网上形成了对网络爬虫的一个道德和技术的有效限制。