俗话说,“盗亦有道”,在信息化快速普及的今天,互联网已成为人们自由获取信息的最主要的途径(前提是必须依法合规地使用)。然而,自由并非无约束,在互联网中也应受到相应规则的限制。因此在网站中使用robots 文件来限制爬虫,是众多互联网网站之间形成的一种无形契约。只要在 robots 文件中明确标示出哪些信息被禁止爬取,在进行相关操作时就应该严格遵守这些规定,这也体现了一种职业素质。
什么是 robots 协议
robots.txt文件是网站根目录下的一个纯文本文件,用于指示搜索引擎爬虫在网站上可以访问哪些内容。全名叫做网络爬虫排除标准(REP),用于规范搜索引擎爬虫的行为,也被称为爬虫协议或机器人协议。
robots.txt文件基本内容包括User-agent,Disallow, Allow 等指令。User-agent指定了要针对哪个搜索引擎爬虫设置规则(常见爬虫名见下方表格),而Disallow则指定了哪些URL不应该被爬虫访问,Allow 指定可以爬取的资源路径,Disallow和Allow一般会一起使用。以下是一个 robots.txt 文件的内容,它表示允许所有类型的爬虫爬取网站,但是只允许 public 目录下的内容。
User-agent: *
Disallow: /
Allow: /public/
robots.txt文件必须放置在网站的根目录下,并且文件名也必须是robots.txt 且是大小写敏感的,所以文件名必须准确无误,否则将无法生效。
User-agent名字一般都是固定的,以下是一些搜索引擎爬虫名称:
爬虫名 | 网站 |
BaiduSpider | 百度爬虫 |
Googlebot | 谷歌爬虫 |
360Spider | 360 爬虫 |
YodaoBot | 有道爬虫 |
此外,robots.txt文件还可以包含Sitemap指令,用于指定网站地图。网站地图是一个包含网站所有URL的XML文件,有助于搜索引擎更好地了解网站的结构和内容。
需要注意的是,协议只能控制搜索引擎爬虫的行为,但无法阻止特定页面出现在搜索结果中。如果需要阻止特定页面出现在搜索结果中,应该使用<meta>标签中的noindex指令。
robotparser使用
通过使用 urllib 中的 robotparser 模块,可以实现网站 Robots 协议的分析。模块中提供了一个 RobotFileParser 的类,即可根据网站的 robots.txt 文件来判断爬虫是否可以爬取。
RobotFileParser 的提供了一些常用方法,用来解析文件:
set_url: 用来设置文件路径,如果在创建 RobotFileParser 的时候已经指定了路径,那就不需要再使用这个方法了。
read: 读取 robots.txt 文件,需要注意的是此方法必须调用,才能读取文件内容,否则后续逻辑都无法使用。
parse: 用于解析 robots.txt 文件。
can_fetch: 用来校验是否可以爬取某个资源的内容,也是主要的使用方法。
mtime: 反回爬取和分析 robots.txt 的时间,用来检查 robots.txt 是否为最新。
modified: 用于设置爬取和分析 robot.txt 的时间。
from urllib.robotparser import RobotFileParser
# 以豆瓣
robot = RobotFileParser(url="https://www.douban.com/robots.txt")
robot.read()
print(robot.can_fetch("*","https://www.douban.com/note/809408645/?_i=4436313eedS5Vi"))
# True
上边代码中以豆瓣的robots.txt文件为例, 来查看豆瓣的资源是否可以爬取,在can_fetch方法中,接收两个参数,第一个参数User-ageng用于表示爬虫类型, 第二个参数URL表示要访问的地址,返回结果如果为True表示资源可爬取。
不遵守robots规则会怎样?
需要注意的是,虽然 robots.txt 是用来限制爬虫的抓取范围,但仅仅是一种文件上的规范。因此爬虫可能会忽略 robots.txt 的内容,继续抓取被禁止的资源。因此, robots.txt 的限制应当是一种额外措施,而不是唯一方式。
反过来讲,如果我们的内容需要搜索引擎来积极的检索,那合理的配置robots.txt反而会有助于网站的曝光(这也是SEO的一部分),错误或不合适的配置可能会导致以下问题:
1. 搜索引擎访问网站的次数减少,网站无法被有效地索引和收录。
2. 网站内容可能会被误判为垃圾内容,影响网站的排名。
3. 网站页面的抓取频率可能会降低,影响网站的更新速度。
4. 网站的搜索引擎可见度可能会降低,影响网站的流量和商业价值。
因此要结合自身网站的实际情况来设置robots.txt的内容。