Robots协议(爬⾍协议、机器⼈协议)
Robots协议(也称为爬⾍协议、机器⼈协议等)的全称是“⽹络爬⾍排除标准”(Robots Exclusion Protocol),⽹站通过Robots协议告诉搜索引擎哪些页⾯可以抓取,哪些页⾯不能抓取。
____________________________________
Robots协议也称为爬⾍协议、爬⾍规则、机器⼈协议,是⽹站国际互联⽹界通⾏的道德规范,其⽬的是保护⽹站数据和敏感信息、确保⽤户个⼈信息和隐私不被侵犯。“规则”中将搜索引擎抓取⽹站内容的范围做了约定,包括⽹站是否希望被搜索引擎抓取,哪些内容不允许被抓取,⽽⽹络爬⾍可以据此⾃动抓取或者不抓取该⽹页内容。如果将⽹站视为酒店⾥的⼀个房间,就是主⼈在房间门⼝悬挂的“请勿打扰”或“欢迎打扫”的提⽰牌。这个⽂件告诉来访的搜索引擎哪些房间可以进⼊和参观,哪些不对搜索引擎开放。
____________________________________
<(统⼀⼩写)是⼀种存放于⽹站根⽬录下的ASCII编码的⽂本⽂件,它通常告诉⽹络搜索引擎的漫游器(⼜称⽹络蜘蛛),此⽹站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为⼀些系统中的URL是⼤⼩写敏感的,所以的⽂件名应统⼀为⼩写。
应放置于⽹站的根⽬录下。如果想单独定义搜索引擎的漫游器访问⼦⽬录时的⾏为,那么可以将⾃定的设置合并到根⽬录下的,或者使⽤robots元数据(Metadata,⼜稱元資料)。
<协议并不是⼀个规范,⽽只是约定俗成的,所以并不能保证⽹站的隐私。注意是⽤字符串⽐较来确定是否获取URL,所以⽬录末尾有与没有斜杠“/”表⽰的是不同的URL。允许使⽤类似"Disallow: *.gif"这样的通配符[1][2]。
其他的影响搜索引擎的⾏为的⽅法包括使⽤robots元数据:
<meta name="robots" content="noindex,nofollow" />
这个协议也不是⼀个规范,⽽只是约定俗成的,有些搜索引擎会遵守这⼀规范,⽽其他则不然。通常搜索引擎会识别这个元数据,不索引这个页⾯,以及这个页⾯的链出页⾯。
Robots协议的详解
Robots协议是Web站点和搜索引擎爬⾍交互的⼀种⽅式,是存放在站点根⽬录下的⼀个纯⽂本⽂件。该⽂件可以指定搜索引擎爬⾍只抓取指定的内容,或者是禁⽌搜索引擎爬⾍抓取⽹站的部分或全部内容。当⼀个搜索引擎爬⾍访问⼀个站点时,它会⾸先检查该站点根⽬录下是否存在,如果存在,搜索引擎爬⾍就会按照该⽂件中的内容来确定访问的范围;如果该⽂件不存在,
那么搜索引擎爬⾍就沿着链接抓取。
另外,必须放置在⼀个站点的根⽬录下,⽽且⽂件名必须全部⼩写。如果搜索引擎爬⾍要访问的⽹站地址是
http:///,那么⽂件必须能够通过http:///打开并看到⾥⾯的内容。
# for http://
#
#
#
#
User-agent:W3C-gsa
Disallow:/Out-Of-DateUser-agent:W3T_SE
Disallow:/Out-Of-Date-
User-agent:MozillaJ4.0(compatible;MSIE6.0;WindowsNT;MSSearch4.0Robot)
Disallow:
#W3CLinkchecker
User-agent:W3C-checklink
Disallow:
#excludesomeaccess-controlledareas
User-agent:*
Disallow:/Team
Disallow;/Project
Disallow:/Web
Disallow:/Systems
Disallow:/History
Disallow:/0ut-Of-Date
Disallow:/People/all/
Disallow:/2005/11/Translations/Query
Disallow:/2000/06/webdata/xslt
Disallow:/2000/09/webdata/xslt
Disallow:/2005/08/online-xslt/xslt
Disallow:/Search/Mail/Public/
Disallow:/2006/02/chartergen
具体使⽤格式如下:
(1)User.agent:⽤于描述搜索引擎爬⾍的名字。在⽂件中,如果有多条User-agent记录,说明有多个搜索引擎爬⾍会受到该协议的限制,对该⽂件来说,⾄少要有⼀条User-agent记录。如果该项的值设为⽊,则该协议对任何搜索引擎爬⾍均有效,在⽂件中,“User-agent:*这样的记录只能有⼀条。
(2)Disallow:⽤于描述不希望被访问到的⼀个URL。这个URL可以是⼀条完整的路径,也可以是部分路径,任何以Disallow开头的URL 均不会被Robot访问到。
搜索引擎爬⾍必须要遵守Robots协议并执⾏Web站点的要求。因此搜索引擎爬⾍需要有⼀个分析Robots协议的模块,并严格按照Robots协议的规定抓取Web主机允许访问的⽬录和⽹页。
当然,只是⼀个协议,如果搜索引擎爬⾍的设计者不遵循这个协议,⽹站管理员也⽆法阻⽌搜索引擎爬⾍对于某些页⾯的访问,但⼀般的搜索引擎爬⾍都会遵循这些协议,⽽且⽹站管理员还可以通过其他⽅式来拒绝⽹络蜘蛛对某些⽹页的抓取。
搜索引擎爬⾍在下载⽹页的时候,会去识别⽹页的HTML代码,在其代码部分会有META标识。通过这些标识,可以告诉搜索引擎爬⾍本⽹页是否需要被抓取,还可以告诉搜索引擎爬⾍本⽹页中的链接是否需要被继续跟踪。例如:表⽰本⽹页不需要被抓取,但是⽹页内的链接需要被跟踪。
现在⼀般的⽹站都希望搜索引擎能更全⾯地抓取⾃⼰⽹站的⽹页,因为这样可以让更多的访问者能通过搜索引擎到此⽹站。为了让本⽹站的⽹页更全⾯地被抓取到,⽹站管理员可以建⽴⼀个⽹站地图,即SiteMap。许多搜索引擎爬⾍会把sitemap.htm⽂件作为⼀个⽹站⽹页爬取的⼊⼝,⽹站管理员可以把⽹站内部所有⽹页的链接放在这个⽂件⾥⾯,那么搜索引擎爬⾍可以很⽅便地把整个⽹站抓取下来,避免遗漏某些⽹页,也会减⼩对⽹站服务器的负担。
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指令的限制,所以它可以放在⽂件中的任意位置。[3]唯⼀要注意的就是要使⽤⽹站地图指令,<sitemap_location>,并将URL的"location"值换成⽹站地图的地址,例如,下⾯就是⼀个⽹站地图指令的例⼦:
Sitemap: <l>
如何编写Sitemaps⽂件,请参考(英⽂)上的说明。 12
Crawl-delay指令
⼏⼤抓取⼯具⽀持Crawl-delay参数,设置为多少秒,以等待同服务器之间连续请求:[4][5]
User-agent: *
Crawl-delay: 10
Allow指令
⼀些⼤的Crawlers⽀持⼀项Allow指令,可以抵消先前Disallow指令。⽐如Googlebot。[6]
替代
雖然是最為廣泛接受的⽅法,但也可以與robots META標籤⼀起使⽤。robots META標籤主要是針對⼀個獨⽴的⾴⾯設定,與其他的META標籤(如使⽤的語⾔、⾴⾯的描述、關鍵詞等)⼀樣,robots META標籤也是放在⾴⾯的HEAD標籤中,專⾨⽤來告訴搜索引擎robots如何抓取該⾴的內容。註
<head>
<meta name="robots" content="noindex,nofollow" />
</head>
⽹站的管理者们通常会有这样⼀种⼼态:⼀⽅⾯期待百度、Google这样的搜索引擎来抓取⽹站的内容,另⼀⽅⾯⼜很厌恶其他来路不明的⽹络爬⾍抓取⾃⼰的信息。正是因为这样,才有“好爬⾍”、“坏爬⾍”这样的说法。
提到“好爬⾍”,就不得不提⽹络爬⾍与web之间的访问授权协议——Robots协议了。
Robots协议的定义
Robots协议(也称为爬⾍协议、机器⼈协议等)的全称是“⽹络爬⾍排除标准”(Robots ExclusionProtocol),⽹站通过Robots 协议告诉搜索引擎哪些页⾯可以抓取,哪些页⾯不能抓取。
根据协议,⽹站管理员可以在⽹站域名的根⽬录下放⼀个 ⽂本⽂件,⾥⾯可以指定不同的⽹络爬⾍能访问的页⾯和禁⽌访问的页⾯,指定的页⾯由正则表达式表⽰。⽹络爬⾍在采集这个⽹站之前,⾸先获取到这个⽂件,然后解析到其中的规则,然后根据规则来采集⽹站的数据。
注意,这个协议的存在更多的是需要⽹络爬⾍去遵守,⽽起不到防⽌爬⾍的功能。
为什么需要Robots协议
互联⽹上的⽹页是通过超级链接互相关联起来的,从⽽形成了⽹页的⽹状结构。爬⾍的⼯作⽅式就像蜘蛛在⽹上沿着链接爬来爬去,最基本的流程可以简化如下:
1. 喂给爬⾍⼀堆url,我们称之为种⼦(seeds);
2. 爬⾍抓取seeds,解析html⽹页,抽取其中的超级链接;
3. 爬⾍接着抓取这些新发现的链接指向的⽹页。
步骤2和步骤3循环往复。
了解了上⾯的流程就能发现:对爬⾍来说⽹站⾮常被动,只有⽼⽼实实被抓取的份。
所以,对于⽹站的管理者来说,就存在这样的需求:
某些路径下是个⼈隐私或者⽹站管理使⽤,不想被搜索引擎抓取,⽐如说⽇本爱情动作⽚;
不喜欢某个搜索引擎,不愿意被他抓取,最有名的就是之前淘宝不希望被百度抓取;
⼩⽹站使⽤的是公⽤的虚拟主机,流量有限或者需要付费,希望搜索引擎抓的温柔点;
某些⽹页是动态⽣成的,没有直接的链接指向,但是希望内容被搜索引擎抓取和索引。
⽹站内容的所有者是⽹站管理员,搜索引擎应该尊重所有者的意愿,为了满⾜以上等等,就需要提供
⼀种⽹站和爬⾍进⾏沟通的途径,给⽹站管理员表达⾃⼰意愿的机会。有需求就有供应,robots协议就此诞⽣。
Robots协议的写法
既然⽹络爬⾍在爬取⼀个⽹站之前,要先获取到这个⽂件,然后解析到其中的规则,那么,Robots就必须要有⼀套通⽤的语法规则。
最简单的只有两条规则:
User-agent:指定对哪些爬⾍⽣效
Disallow:指定要屏蔽的⽹址
先说User-agent,爬⾍抓取时会声明⾃⼰的⾝份,这就是User-agent,没错,就是http协议⾥的User-agent。利⽤User-agent来区分各个引擎的爬⾍,⽐如说google⽹页搜索爬⾍的User-agent为Googlebot。
可能有读者要问了,我怎么知道爬⾍的User-agent是什么?你还可以查相关搜索引擎的资料得到官⽅的数据,⽐如说百度的爬⾍列表是这样的:
Disallow ⾏列出的是要拦截的⽹页,以正斜线 (/) 开头,可以列出特定的⽹址或模式。要屏蔽整个⽹站,使⽤正斜线即可;要屏蔽某⼀⽬录以及其中的所有内容,在⽬录名后添加正斜线;要屏蔽某个具体的⽹页,就指出这个⽹页。
下⾯我们来看⼀些Robots的具体写法:
允许所有的robot访问
User-agent: *
Disallow:
或者也可以建⼀个空⽂件 "/" 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,(可能是多个⽂件),爬⾍怎么知道放在哪⾥呢?
由于的位置是固定的,于是⼤家就想到了把sitemap的位置信息放在⾥。这就成为⾥的新成员了。
节选⼀段:
插⼀句,考虑到⼀个⽹站的⽹页众多,sitemap⼈⼯维护不太靠谱,google提供了⼯具可以⾃动⽣成sitemap。
meta tag
其实严格来说这部分内容不属于。
<的初衷是为了让⽹站管理员管理可以出现在搜索引擎⾥的⽹站内容。但是,即使使⽤ ⽂件让爬⾍⽆法抓取这些内容,搜索引擎也可以通过其他⽅式到这些⽹页并将它添加到索引中。例如,其他⽹站仍可能链接到该⽹站。因此,⽹页⽹址及其他公开的信息(如指向相关⽹站的链接中的定位⽂字或开放式⽬录管理系统中的标题)有可能会出现在引擎的搜索结果中。如果想彻底对搜索引擎隐⾝那咋整呢?答案是:元标记,即meta tag。
⽐如要完全阻⽌⼀个⽹页的内容列在搜索引擎索引中(即使有其他⽹站链接到此⽹页),可使⽤ noindex 元标记。只要搜索引擎查看该⽹页,便会看到 noindex 元标记并阻⽌该⽹页显⽰在索引中,这⾥注意noindex元标记提供的是⼀种逐页控制对⽹站的访问的⽅式。
要防⽌所有搜索引擎将⽹站中的⽹页编⼊索引,在⽹页的部分添加:
<meta name="robots" content="noindex">
这⾥的name取值可以设置为某个搜索引擎的User-agent从⽽指定屏蔽某⼀个搜索引擎。
除了noindex外,还有其他元标记,⽐如说nofollow,禁⽌爬⾍从此页⾯中跟踪链接。详细信息可以参考Google⽀持的元标记,这⾥提⼀句:noindex和nofollow在HTML 4.01规范⾥有描述,但是其他tag的在不同引擎⽀持到什么程度各不相同,还请读者⾃⾏查阅各个引擎的说明⽂档。
Crawl-delay
除了控制哪些可以抓哪些不能抓之外,还可以⽤来控制爬⾍抓取的速率。如何做到的呢?通过设置爬⾍在两次抓取之间等待的秒数。
Crawl-delay:5
表⽰本次抓取后下⼀次抓取前需要等待5秒。
注意:google已经不⽀持这种⽅式了,在webmaster tools⾥提供了⼀个功能可以更直观的控制抓取速率。
这⾥插⼀句题外话,⼏年前曾经有⼀段时间还⽀持复杂的参数:Visit-time,只有在visit-time指定的时间段⾥,爬⾍才可以访
问;Request-rate: ⽤来限制URL的读取频率,⽤于控制不同的时间段采⽤不同的抓取速率。后来估计⽀持的⼈太少,就渐渐的废掉了,⽬前google和baidu都已经不⽀持这个规则了,其他⼩的引擎公司貌似从来都没有⽀持过。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论