Robots协议写法教程

Robots协议的约束力

“Robots的约束力固然仅限于自律,无强制性,但这不等于说它背后反映的精神,没有法律基础。”中国社会科学院信息化研究中心秘书长姜奇平表示,美国的电子隐私权法就规定“将决定权交给消费者,让其切实有效地授权或者拒绝他人采集和使用其个人信息”,可见遵守规则就是要遵守公平竞争,不是没有强制力就可以不公平竞争。
例子

允许所有的机器人:

User-agent: *
Disallow:

另一写法

User-agent: *
Allow:/

仅允许特定的机器人:(name_spider用真实名字代替)

User-agent: name_spider
Allow:

拦截所有的机器人:

User-agent: *
Disallow: /

禁止所有机器人访问特定目录:

User-agent: *
Disallow: /cgi-bin/
Disallow: /images/
Disallow: /tmp/
Disallow: /private/

仅禁止坏爬虫访问特定目录(BadBot用真实的名字代替):

User-agent: BadBot
Disallow: /private/

禁止所有机器人访问特定文件类型[2]:

User-agent: *
Disallow: /.php$
Disallow: /
.js$
Disallow: /.inc$
Disallow: /
.css$

非标准扩展协议
自动发现Sitemaps文件

Sitemap指令被几大搜索引擎支持(包括Google、Yahoo、Bing和Ask),指定了网站Sitemaps文件的位置。Sitemaps文件包含了网站页面所在的URL的一个列表。Sitemap指令并不受User-agent指令的限制,所以它可以放在robots.txt文件中的任意位置。[3] 唯一要注意的就是要使用网站地图指令,<sitemap_location>,并将URL的”location”值换成网站地图的地址,例如,下面就是一个网站地图指令的例子:

Sitemap: http://www.example.com/sitemap.xml

如何编写Sitemaps文件,请参考sitemaps.org(英文)上的说明。 12
Crawl-delay指令

几大抓取工具支持Crawl-delay参数,设置为多少秒,以等待同服务器之间连续请求:[4][5]

User-agent: *
Crawl-delay: 10

Allow指令

一些大的Crawlers支持一项Allow指令,可以抵消先前Disallow指令。比如Googlebot。[6]
替代

雖然robots.txt是最為廣泛接受的方法,但也可以與robots META標籤一起使用。robots META標籤主要是針對一個獨立的頁面設定,與其他的META標籤(如使用的語言、頁面的描述、關鍵詞等)一樣,robots META標籤也是放在頁面的HEAD標籤中,專門用來告訴搜索引擎robots如何抓取該頁的內容。註

网站的管理者们通常会有这样一种心态:一方面期待百度、Google这样的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息。正是因为这样,才有“好爬虫”、“坏爬虫”这样的说法。

提到“好爬虫”,就不得不提网络爬虫与web之间的访问授权协议——Robots协议了。
Robots协议的定义

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots ExclusionProtocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

根据协议,网站管理员可以在网站域名的根目录下放一个robots.txt 文本文件,里面可以指定不同的网络爬虫能访问的页面和禁止访问的页面,指定的页面由正则表达式表示。网络爬虫在采集这个网站之前,首先获取到这个文件,然后解析到其中的规则,然后根据规则来采集网站的数据。

注意,这个协议的存在更多的是需要网络爬虫去遵守,而起不到防止爬虫的功能。
为什么需要Robots协议

互联网上的网页是通过超级链接互相关联起来的,从而形成了网页的网状结构。爬虫的工作方式就像蜘蛛在网上沿着链接爬来爬去,最基本的流程可以简化如下:

喂给爬虫一堆url,我们称之为种子(seeds);

爬虫抓取seeds,解析html网页,抽取其中的超级链接;

爬虫接着抓取这些新发现的链接指向的网页。

步骤2和步骤3循环往复。

了解了上面的流程就能发现:对爬虫来说网站非常被动,只有老老实实被抓取的份。

所以,对于网站的管理者来说,就存在这样的需求:

某些路径下是个人隐私或者网站管理使用,不想被搜索引擎抓取,比如说日本爱情动作片;
不喜欢某个搜索引擎,不愿意被他抓取,最有名的就是之前淘宝不希望被百度抓取;
小网站使用的是公用的虚拟主机,流量有限或者需要付费,希望搜索引擎抓的温柔点;
某些网页是动态生成的,没有直接的链接指向,但是希望内容被搜索引擎抓取和索引。

网站内容的所有者是网站管理员,搜索引擎应该尊重所有者的意愿,为了满足以上等等,就需要提供一种网站和爬虫进行沟通的途径,给网站管理员表达自己意愿的机会。有需求就有供应,robots协议就此诞生。
Robots协议的写法

既然网络爬虫在爬取一个网站之前,要先获取到这个文件,然后解析到其中的规则,那么,Robots就必须要有一套通用的语法规则。

最简单的robots.txt只有两条规则:

User-agent:指定对哪些爬虫生效

Disallow:指定要屏蔽的网址

先说User-agent,爬虫抓取时会声明自己的身份,这就是User-agent,没错,就是http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫,比如说google网页搜索爬虫的User-agent为Googlebot。

可能有读者要问了,我怎么知道爬虫的User-agent是什么?你还可以查相关搜索引擎的资料得到官方的数据,比如说百度的爬虫列表是这样的:

Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。

下面我们来看一些Robots的具体写法:

允许所有的robot访问

User-agent: *
Disallow:

或者也可以建一个空文件 “/robots.txt” file。

禁止爬虫访问所有目录

User-agent: *
Disallow: /

禁止爬虫访问某些目录

User-agent: *
Disallow: /a/
Disallow: /b/
Disallow: /c/

禁止某些爬虫访问

User-agent: BadBot
Disallow: /

只允许某个爬虫访问

User-agent: MangCrawler
Disallow:
User-agent: *
Disallow: /

我们再来结合两个真实的范例来学习一下。先看这个例子:

User-agent: Baiduspider
Disallow: /
User-agent: baiduspider
Disallow: /

这个是淘宝网的Robots协议内容,相信你已经看出来了,淘宝网禁止百度的爬虫访问。

再来看一个例子:

User-agent: *
Disallow: /?*
Disallow: /pop/*.html
User-agent: EtaoSpider
Disallow: /

这个稍微复杂点,京东有2个目录不希望所有的爬虫来抓。同时,京东完全屏蔽了一淘网的蜘蛛(EtaoSpider是一淘网的蜘蛛)。
Robots协议进阶知识
sitemap

前面说过爬虫会通过网页内部的链接发现新的网页。但是如果没有连接指向的网页怎么办?或者用户输入条件生成的动态网页怎么办?能否让网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页?这就是sitemap,最简单的 Sitepmap 形式就是 XML 文件,在其中列出网站中的网址以及关于每个网址的其他数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度等等),利用这些信息搜索引擎可以更加智能地抓取网站内容。

新的问题来了,爬虫怎么知道这个网站有没有提供sitemap文件,或者说网站管理员生成了sitemap,(可能是多个文件),爬虫怎么知道放在哪里呢?

由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。这就成为robots.txt里的新成员了。

节选一段google robots.txt:

Sitemap: http://www.gstatic.com/cultur…

Sitemap: http://www.google.com/hostedn…

插一句,考虑到一个网站的网页众多,sitemap人工维护不太靠谱,google提供了工具可以自动生成sitemap。

    原文作者:韩毓航
    原文地址: https://blog.csdn.net/Smileal/article/details/123867695
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞