5

编写爬虫竟然成了“面向监狱编程”,就是因为不懂Robots协议(爬虫协议)

 3 years ago
source link: https://blog.csdn.net/nokiaguy/article/details/114697449
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

编写爬虫竟然成了“面向监狱编程”,就是因为不懂Robots协议(爬虫协议)

编写Python爬虫很容易,不过要想安全地编写Python爬虫,就需要了解更多的至少,不光是技术上的,还有法律上的,Robots协议就是其中之一,如果不了解Robots协议,抓取了不该抓取的东西,可能会面临牢狱之灾哦!

1. Robots协议简介

Robots协议也称作爬虫协议、机器人协议,它的全名是网络爬虫排除标准(Robots Exclusing Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。该协议的内容通常放在一个名为robots.txt的文本文件中,该文件一般位于网站的根目录下。

注意,robots.txt文件中的内容只是告诉爬虫应该抓取什么,不应该抓取什么,但并不是通过技术手段阻止爬虫抓取那些被禁止的资源,而只是通知爬虫而已。尽管编写爬虫可以不遵循robots.txt文件的描述,但作为一只有道德、有文化、有纪律的爬虫,应该尽量遵循robots.txt文件描述的规则。否则,有可能会引起法律纠纷。

当爬虫访问一个网站时,首先会检查这个网址根目录下是否存在robots.txt文件,如果存在,爬虫就会根据该文件中定义的抓取范围来抓取Web资源。如果这个文件并不存在,爬虫就会抓取这个网站所有可直接访问的页面。

下面来看一个robots.txt文件的例子:

这个抓取规则首先告诉爬虫对所有的爬虫有效,而且除了test目录外的任何资源都不允许抓取。如果将这个robots.txt文件放在某个网站的根目录,那么搜索引擎的爬虫就会只抓取test目录下的资源,我们会发现搜索引擎中再也查不到其他目录下的资源了。

上面的User-agent描述了爬虫的名字,这里将其设置为*,则表示对所有的爬虫有效,我们还可以特指某些爬虫,如下面的设置明确指定百度爬虫。

User-agent:BaiduSpider

robots.txt文件中有2个重要的授权指令:Disallow和Allow,前者表示禁止抓取,后者表示运行抓取。也就是说,Disallow是黑名单,Allow是白名单。 例如,下面是一些Robots协议的例子。

1. 禁止所有爬虫抓取网站所有的资源

2. 禁止所有爬虫抓取网站/private和/person目录中的资源

3. 只禁止百度爬虫抓取网站资源

很多搜索引擎的爬虫都有特定的名称,表1列出了一些常用的爬虫名称。

表1 常用的爬虫名称

Googlebot

www.google.com

BaiduSpider

www.baidu.com

360Spider

360搜索

www.so.com

Bingbot

www.bing.com

2. 分析Robots协议

Robots协议并不需要我们自己去分析,urllib库的robotparser模块提供了相应的API来解析robots.txt文件,这就是RobotFileParser类。可以用多种方式使用RobotFileParser类。例如,可以通过set_url方法设置robots.txt文件的URL,然后进行分析,代码如下:

其中can_fetch方法用来获得该网站某一个URL根据Robots协议是否有权抓取,如果可以抓取,返回True,否则返回False。

RobotFileParser类的构造方法也可以接受一个URL,然后使用can_fetch方法判断是否可以抓取某一个页面。

下面的案例使用了parse方法指定robots.txt文件的数据,并输出不同的URL是否允许抓取,这是另外一种使用RobotFileParser类的方式。

运行结果如下:

- EOF -

推荐阅读  点击标题可跳转

就凭这3点,可以完全理解Python的类方法与静态方法

卧槽,好强大的魔法,竟能让Python支持方法重载

Python装饰器(decorator)不过如此,是我想多了

这样合并Python字典,可以让程序的运行效率提高4倍

Python字典不是不可以排序,是你方法没用对!

文件侠告诉你,Python复制文件的N种姿势!

Python代码可以加密吗?Python字节码告诉你!

使出Python的六脉神剑,让Python拥有无限扩展性

看我用元类(metaclass)花式创建Python类

你不知道__name__变量是什么意思吗?

Python生成器(Generator)最完美解释

关注「极客起源」公众号,加星标,不错过精彩技术干货

fa2105c7b0c1a8cd162f6e419347c3f2.png

蒙娜丽宁 公众号:极客起源 达芬奇 UM
更多精彩内容请关注微信公众号:「极客起源」,东北大学计算机专业硕士。UnityMarvel创始人,企业内训讲师、IT畅销书作者,CSDN学院讲师,拥有多年软件开发经验和培训经验。主要著作包括《Python从菜鸟到高手》、《Python爬虫技术:深入理解原理、技术与开发》,培训企业学员数千人。制作在线课程数千小时。更多视频课程,请访问我的B站:https://space.bilibili.com/477001733

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK