robots协议

什么是robots

本文的robots特指搜索引擎领域的web robots,这个名字可能很多人不熟悉,但是提到Web Wanderers,Crawlers和Spiders很多人可能就恍然大悟了,在中文里我们统称为爬虫或者网络爬虫,也就是搜索引擎抓取互联网网页的程序。

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

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

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

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

2,3循环往复

什么是robots协议

了解了上面的流程就能看到对爬虫来说网站非常被动,只有老老实实被抓取的份。存在这样的需求:

1.某些路径下是个人隐私或者网站管理使用,不想被搜索引擎抓取,比如说日本爱情动作片

2.不喜欢某个搜索引擎,不愿意被他抓取,最有名的就是之前淘宝不希望被百度抓取

3.小网站使用的是公用的虚拟主机,流量有限或者需要付费,希望搜索引擎抓的温柔点

4.某些网页是动态生成的,没有直接的链接指向,但是希望内容被搜索引擎抓取和索引

网站内容的所有者是网站管理员,搜索引擎应该尊重所有者的意愿,为了满足以上等等,就需要提供一种网站和爬虫进行沟通的途径,给网站管理员表达自己意愿的机会。有需求就有供应,robots协议就此诞生。Robots协议,学名叫:The Robots Exclusion Protocol,就搜索引擎抓取网站内容的范围作了约定,包括网站是否希望被搜索引擎抓取,哪些内容不允许被抓取,把这些内容放到一个纯文本文件robots.txt里,然后放到站点的根目录下。爬虫抓取网站内容前会先抓取robots.txt,据此“自觉地”抓取或者不抓取该网页内容,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。

需要注意的是robots协议并非是规范,只是行业内一个约定俗成的协议。什么意思呢?Robots协议不是什么技术壁垒,而只是一种互相尊重的协议,好比私家花园的门口挂着“闲人免进”,尊重者绕道而行,不尊重者依然可以推门而入。

例子

例子1:淘宝
User-agent: Baiduspider
Disallow: /
User-agent: baiduspider
Disallow: /

例子2:京东
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
User-agent: EtaoSpider
Disallow: /

robots.txt的位置

说简单也简单,robots.txt放到一个站点的根目录下即可。说复杂也有点小复杂,一个robots.txt只能控制相同协议,相同端口,相同站点的网页抓取策略。什么意思呢?看个例子最清楚:

百度网页搜索

百度知道

这两个robots.txt的内容是不同的,也就是说百度网页搜索和百度知道的抓取策略可以由自己独立的robots.txt来控制,井水不犯河水。

robots.txt的内容

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

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

2.Disallow:指定要屏蔽的网址

User-agent

爬虫抓取时会声明自己的身份,这就是User-agent,没错,就是http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫。

例子
google网页搜索爬虫的User-agent为Googlebot,下面这行就指定google的爬虫。

User-agent:Googlebot

如果想指定所有的爬虫怎么办?

User-agent: *

爬虫的User-agent是什么?
爬虫列表

Disallow

Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。

要屏蔽整个网站,使用正斜线即可:

Disallow: /

要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线:

Disallow: /无用目录名/

要屏蔽某个具体的网页,就指出这个网页。

Disallow: /网页.html

Disallow还可以使用前缀和通配符。

要屏蔽目录a1-a100,可以使用上面的方式写100行,或者

Disallow: /a

但是需要注意,这样会把任何以a开头的目录和文件也屏蔽,慎用。

要阻止特定类型的文件(如 .gif),请使用以下内容:

Disallow: /*.gif$
*匹配任意个字符,$匹配url结束

Disallow的内容区分大小写。

allow

如果需要屏蔽a1-a100,但是不屏蔽a50,怎么办?

Disallow:/a
Allow:/a50/

如果想屏蔽a50下面的文件private.html,咋整?

Disallow:/a
Allow:/a50/
Disallow:/a50/private.html

谁管的越细就听谁的。

robots协议的可靠性?

协议一致性

第一个问题是robots.txt没有一个正式的标准,各个搜索引擎都在不断的扩充robots.txt功能,这就导致每个引擎对robots.txt的支持程度各有不同,更不用说在某个功能上的具体实现的不同了。

缓存

第二个问题是robots.txt本身也是需要抓取的,出于效率考虑,一般爬虫不会每次抓取网站网页前都抓一下robots.txt,加上robots.txt更新不频繁,内容需要解析。通常爬虫的做法是先抓取一次,解析后缓存下来,而且是相当长的时间。假设网站管理员更新了robots.txt,修改了某些规则,但是对爬虫来说并不会立刻生效,只有当爬虫下次抓取robots.txt之后才能看到最新的内容。尴尬的是,爬虫下次抓取robots.txt的时间并不是由网站管理员控制的。当然,有些搜索引擎提供了web 工具可以让网站管理员通知搜索引擎那个url发生了变化,建议重新抓取。注意,此处是建议,即使你通知了搜索引擎,搜索引擎何时抓取仍然是不确定的,只是比完全不通知要好点。至于好多少,那就看搜索引擎的良心和技术能力了。

ignore

第三个问题,不知是无意还是有意,反正有些爬虫不太遵守或者完全忽略robots.txt,不排除开发人员能力的问题,比如说根本不知道robots.txt。另外,本身robots.txt不是一种强制措施,如果网站有数据需要保密,必需采取技术措施,比如说:用户验证,加密,ip拦截,访问频率控制等。

偷偷的抓

第四个问题,即使采用了种种限制,仍然存在某些恶意的抓取行为能突破这些限制,比如一些利用肉鸡进行的抓取。悲观的说,只要普通用户可以访问,就不能完全杜绝这种恶意抓取的行为。但是,可以通过种种手段使抓取的代价增大到让对方无法接受。比如说:Captcha, Ajax用户行为驱动的异步加载等等。这个就不属于本文讨论的范畴了。

泄密

最后,robots.txt本身还存在泄密的风险。举例,如果某一个网站的robots.txt里突然新增了一条:Disallow /map/,你想到了什么?是不是要推出地图服务了?于是有好奇心的同学就会开始尝试各种文件名去访问该路径下的文件,希望能看到惊喜。貌似当初google的地图就是这么被提前爆出来的,关于这点我不太确定,大家就当八卦听听好了。

转自:链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值