Python网络爬虫规则之Robots协议
(1).网络爬虫引发的问题
网络爬虫是一个很有趣的功能,它既能获得网络上的资源,但是它可以带来很多很严重的问题。
我们现在常用的网络爬虫,按尺寸划分可以分为三大类。第一类是指以爬取网页或者玩转网页为主的一类爬虫,这类爬虫规模很小,获取网络的数据量也很小,它对爬取网页的速度并不敏感,针对这一类的网络爬虫我们就可以使用Requests库来实现它的功能。
第二类是指以爬取网站或者爬取系列网站为目的的一类爬虫,这类爬虫是中规模的爬虫,它所对应的数据规模往往较大,而它对爬取速度也是很敏感的,否则可能还跟不上网站的更新速度。所以在这种情况下我们要使用更专业的库Scrapy,这是Python提供专门做爬取网站这个级别的功能。
第三类是指以爬取全网的爬虫,它规模很大,但他只有一个作用就是建立全网搜索引擎,它的爬取速度是非常关键的,比如说谷歌、百度、必应背后都有一个能够爬取全网所有资源的爬虫。这样的爬虫只能定制开发,而不可能有第三方库提供相关的应用。
在我们所见到的网络爬虫,那种小规模的、爬取网页为主的爬虫占据了90%以上的比例。不要看这样的爬虫非常小,但是它针对特定的网页,或者针对一系列网页却能够发挥很大的作用。
对于网络爬虫有很多不同的反对的声音,因为网络爬虫会带来很多的问题。
对于服务器来说,当在服务器上运行了一个网站,那么网络爬虫就像骚扰电话一样,对这个网站会带来很致命的骚扰功能。因为架设的web服务器默认只接受人类的访问,默认是按照人数来约定它的访问能力,而爬虫跟人类所不同的是它能够用计算机的快速功能去获取相关的资源,速度比人类快百倍甚至千倍,当有爬虫来服务器爬取相关的内容,每秒爬取十万次甚至几十万次的情况下,服务器是很难提供那么高的性能。因此对于某些爬虫,受限于编写者的水平和它的目的,这样爬虫会为web服务器带来巨大的资源开销,从而对网站的运行者来讲,爬虫形成了骚扰。
除了骚扰功能,网络爬虫还会带来一定的法律风险。由于服务器上的数据往往是有产权归属,比如说新浪上提供的新闻数据归新浪公司所有,如果在微博上用户提供的微博数据是归用户和公司共同所有。而网络爬虫获得数据后,如果将这些数据进行牟利的话,它将带来法律风险。事实上在世界范围内也看到了这样的案例,有相关的法院也判处网络爬虫赔偿服务器网站巨额费用的实际案例。
此外,网络爬虫还给个人带来很大的隐私泄露的风险。举个例子,用户能够在网站上放很多的个人照片,通过简单的密码或简单的目录保护方式来防止照片被其他用户通过网页浏览的方式获得,但是网络爬虫具备一定的突破能力,它能够破解一些简单的访问控制,甚至能够对那些外部用户很难找到的链接进行爬取,从而获得相关的数据,而获得的数据又是个人隐私的数据,那么就能把用户的隐私泄露出去。
以上就是网络爬虫引发的最为突出的三个问题,分别是对服务器性能的骚扰问题、内容层面的法律风险问题以及个人隐私的泄露问题,因此网络爬虫的使用是要有它的规则。
在实际的使用过程中,一些较大的网站都对网络爬虫有相关的限制。而整个Internet上,也将网络爬虫当作一个可规范的功能来看待。对于一般的服务器来讲,我们可以用两种方式来限制网络爬虫。这两种方法分别从技术和道德方面来限制网络爬虫。
第一种方法:如果服务器的所有者有一定的技术能力,他可以通过来源审查来限制网络爬虫。来源审查方法比较简单,它首先判断所有请求往链接的HTTP头部,找到User-Agent字段。我们知道在进行HTTP访问的时候,无论是浏览器还是访问的软件,它都会把它自己设定一个标识放到User-Agent里。那么对网站服务器来说,它要判断HTTP的协议头,如果User-Agent字段不是预定的浏览器或不是已知的浏览器,那它很有可能是一个爬虫,所以我们可以通过限制特定的User-Agent字段的协议头来限制网络爬虫。简单说,作为网站的维护者可以只响应浏览器或者那些已知的友好爬虫访问。
第二种方法:也可以通过发布公告的方法来限制网络爬虫,也就是所谓的Robots协议。这个方法有点想一个告示牌,也就是说告诉所有的爬虫当前网站可爬取的策略,并要求所有爬虫遵守,比如网站可以告诉爬虫哪些内容是可以爬取的,哪些内容是不可以爬取的。发布公告形式仅仅是通过发布来体现,至于是否遵守是由网络爬虫自身来决定的。
(2).Robots协议
Robots协议实际上全称是Robots Exclusion Standard,中文名为网络爬虫排除标准。Robots协议一个很重要的作用就是网站告知网络爬虫哪些页面可以抓取,哪些不行。它的具体使用形式(方法)是在网站根目录下放置一个robots.txt文件,在这个文件中写明当前网站里哪些目录是允许爬虫去爬取,哪些目录是不允许。
许多网站,甚至主流的网站都支持robots协议,比如说京东https://www.jd.com/robots.txt、百度https://www.baidu.com/robots.txt、腾讯https://www.tencent.com/robots.txt等等。
Robots协议通过了一个基本语法来告知所有的爬虫,网站内部资源能够被访问的权限,这个语法就是User-agent和Disallow,User-agent表明的是哪些爬虫,如果想代表所有爬虫就用*,Disallow代表的是不允许这个爬虫访问的资源的目录。有了这样的一个基本协议就可以对整个网站的内容做一个相关的规范,使得爬虫知道它可以访问哪里,不可以访问哪里。
Robots协议规定如果一个网站不提供robots.txt文件,那么就说明这个网站允许所有爬虫无限制的爬取所有内容。
(3).Robots协议的遵守方式
对于任何网络爬虫来讲,它应该能够自动或人工的识别robots.txt文件,根据文件的内容再进行爬取。如果不会写自动识别robots.txt文件的代码,我们可以打开某一个网站看一下它的Robots协议,根据网站的规则来进行合理的爬取。
然而Robots协议是建议但非约束性的,也就是说网络爬虫可以不遵守但存在法律风险。以下也给出了一些建议:
当然也有例外,那就是类人行为可以不参考Robots协议,如果网络爬虫能够和人类获取相关信息相一致,也就是说访问的次数很少,每次访问的内容也不大,这种情况下雨泽上可以不遵守Robots协议。