网络爬虫的实质,其实是从网络上“偷”数据。通过网络爬虫,我们可以采集到所需要的资源,但是同样,使用不当也可能会引发一些比较严重的问题。
因此,在使用网络爬虫时,我们需要做到“盗亦有道”。
网络爬虫主要分为以下三类:
1. 小规模,数据量小,爬取速度不敏感;对于这类网络爬虫我们可以使用Requests库来实现,主要用于爬取网页;
2. 中规模,数据规模较大,爬取速度敏感;对于这类网络爬虫我们可以使用Scrapy库来实现,主要用于爬取网站或系列网站;
3. 大规模,搜索引擎,爬取速度关键;此时需要定制开发,主要用于爬取全网,一般是建立全网搜索引擎,如百度、Google搜索等。
在这三种中,我们最为常见的是第一种,大多数均是小规模的爬取网页的爬虫。
对于网络爬虫,也有很多反对声音。因为网络爬虫会不停的向服务器发出请求,影响服务器性能,对服务器产生骚扰行为,并加大了网站维护者的工作量。
除了对服务器的骚扰外,网络爬虫也有可能引发法律风险。因为服务器上的数据有产权归属,如果将该数据用于牟利的话,将会带来法律风险。
此外,网络爬虫也可能会造成用户的隐私泄露。
简而言之,网路爬虫的风险主要归于以下三点:
- 对服务器的性能骚扰
- 内容层面的法律风险
- 个人隐私的泄露
因此,网络爬虫的使用需要有一定的规则。
在实际情况中,一些较大的网站都对网络爬虫进行了相关限制,整个互联网上也将网络爬虫视为可规范的功能来看待。
对于一般的服务器来讲,我们可以通过2种方式来限制网络爬虫:
1. 如果网站的所有者有一定的技术能力,可以通过来源审查来限制网络爬虫。
来源审查,一般通过判断User-Agent来进行限制,本篇文章着重介绍第2种。
2. 通过Robots协议来告诉网络爬虫需要遵守的规则,哪些可以爬取,哪些是不允许的,并要求所有的爬虫遵守该协议。
第2种是以公告的形式告知,Robots协议是建议但非约束性,网络爬虫可以不遵守,但可能会存在法律风险。通过这两种方法,互联网上形成了对网络爬虫的道德和技术上的有效限制。
那么,我们在编写网络爬虫时,就需要去尊重网站的维护人员对网站资源的管理。
互联网上,部分网站没有Robots协议,所有数据都可以爬取;不过,绝大多数的主流网站都支持Robots协议,有做相关限制,下面就具体介绍下Robots协议的基本语法。
Robots协议(Robots Exclusion Standard,网络爬虫排除标准):
作用:网站告知网络爬虫哪些页面可以爬取,哪些不行。
形式:在网站根目录下的robots.txt文件。
Robots协议的基本语法:*代表所有,/代表根目录。
比如,PMCAFF的Robots协议:http://www.pmcaff.com/robots.txt
User-agent: *
Disallow: /article/edit
Disallow: /discuss/write
Disallow: /discuss/edit
第1行中User-agent:*,是指所有的网络爬虫都需要遵守如下协议;
第2行中Disallow: /article/edit,是指所有的网络爬虫都不允许访问article/edit下的内容,其他同理。
如果观察京东的Robots协议,https://www.jd.com/robots.txt,可以看到下面有User-agent: EtaoSpider,Disallow: /,其中EtaoSpider是恶意爬虫,不允许其爬取京东的任何资源。
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
有了Robots协议后,可以对网站的内容做个规范,告诉所有的网络爬虫哪些可以爬取,哪些不允许。
需要特别注意的是,Robots协议都是存在根目录下的,不同的根目录可能Robots协议是不一样的,在爬取时需要多加留意。
网络爬虫,“盗亦有道”。
参考资料:中国大学MOOC课程,Python网络爬虫与信息提取
----- End -----
作者:杜王丹,微信公众号:杜王丹,互联网产品经理。