tel:17340208223 QQ:229119353 微信:cdseo-seo 登陆 注册

新手必看:什么是robots协议?

日期: 2018-08-17 10:25:00 点击:232 栏目:常见问题
  早在2012年11月初,针对两边摩擦加重的状况,在我国互联网协会的牵头下,包含百度、新浪、奇虎360在内的12家互联网公司已一起签署了《...
  早在2012年11月初,针对两边摩擦加重的状况,在我国互联网协会的牵头下,包含百度、新浪、奇虎360在内的12家互联网公司已一起签署了《互联网 查找引擎效劳自律条约》,在条约第七条许诺“遵从世界通行的职业常规与商业规矩,恪守机器人协议(robots协议)。   2013年2月8日北京市第一中级人民法院正式受理了百度诉奇虎360违背“Robots协议”抓取、复制其网站内容的不正当竞争行为一案,索赔金额高达一亿元,这能够看做2012年下半年“3B大战”的持续。在此次索赔案子中,百度称自己的Robots文本中已设定不允许360爬虫进入,而360的爬虫依然对“百度知道”、“百度百科”等百度网站内容进行抓取。                  今日就找个时机聊聊一夜成名的robots协议。   初识robots协议   什么是robots   要 了解robots协议首要要了解robots,本文说的robots不是《I,robot》里的威尔·史密斯,不是《机器人总动员》里的瓦力和伊娃,不是 《终结者》系列中的施瓦辛格。什么?这些经典电影你都不知道?好吧,算我想多了。本文的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协议不是什么技术壁垒,而仅仅一种相互尊重的协议,比方私家花园的门口挂着“闲人免进”,尊重者绕道而行,不尊重者依然能够推门而入,比方说360。   说了这么多,看几个有名的比方感觉一下先:   比方1:淘宝   User-agent: Baiduspider   Disallow: /   User-agent: baiduspider   Disallow: /   程序猿,你懂的。这不就是淘宝不想让百度抓取嘛比方2:京东   User-agent: *   Disallow: /?*   Disallow: /pop/*.html   User-agent: EtaoSpider   Disallow: /   这个也不杂乱,京东有2个目录不期望一切查找引擎来抓。一起,对etao彻底屏蔽。   根本玩法   robots.txt的方位   说简略也简略,robots.txt放到一个站点的根目录下即可。说杂乱也有点小杂乱,一个robots.txt只能操控相同协议,相同端口,相同站点的网页抓取战略。什么意思呢?看个比方最清楚:   百度网页查找   百度知道   这两个robots.txt的内容是不同的,也就是说百度网页查找和百度知道的抓取战略能够由自己独立的robots.txt来操控,是非分明。   robots.txt的内容   最简略的robots.txt只需两条规矩:   1.User-agent:指定对哪些爬虫生效   2.Disallow:指定要屏蔽的网址   整个文件分为x节,一节由y个User-agent行和z个Disallow行组成。一节就表明对User-agent行指定的y个爬虫屏蔽z个网址。这儿x>=0,y>0,z>0。x=0时即表明空文件,空文件等同于没有robots.txt。   下面详细介绍这两条规矩:   User-agent   爬虫抓取时会声明自己的身份,这就是User-agent,没错,就是http协议里的User-agent。robots.txt运用User-agent来区别各个引擎的爬虫。   举例阐明:google网页查找爬虫的User-agent为Googlebot,下面这行就指定google的爬虫。   User-agent:Googlebot   假如想指定一切的爬虫怎样办?不可能穷举啊,能够用下面这一行:   User-agent: *   可能有的同学要问了,我怎样知道爬虫的User-agent是什么?这儿供给了一个简略的列表:爬虫列表当然,你还能够查相关查找引擎的材料得到官方的数据,比方说google爬虫列表,百度爬虫列表Disallow   Disallow 行列出的是要阻拦的网页,以正斜线 (/) 最初,能够列出特定的网址或模式。   要屏蔽整个网站,运用正斜线即可:   Disallow: /   要屏蔽某一目录以及其间的一切内容,在目录名后增加正斜线:   Disallow: /无用目录名/   要屏蔽某个详细的网页,就指出这个网页。   Disallow: /网页。html   Disallow还能够运用前缀和通配符。   要屏蔽目录a1-a100,能够运用上面的方法写100行,或许Disallow:/a   可是需求留意,这样会把任何故a最初的目录和文件也屏蔽,慎用。假如需求屏蔽a1-a100,可是不屏蔽a50,怎样办?同学们能够思考一下,这个问题咱们留到下一节。   要阻挠特定类型的文件(如 .gif),请运用以下内容:   Disallow: /*.gif$   *匹配任意个字符,$匹配url完毕,详细就不解说了吧,不了解的同学去自学一下通配符。   提示一下,Disallow的内容区别大小写。例如,Disallow:/junkfile.asp 会屏蔽 junkfile.asp,却会允许Junk_file.asp。   最最后,通配符不是一切查找引擎都支撑,运用要小心。没办法,谁让robots.txt没有一个咱们都供认的规范呢。   实例 ###   百度网页查找   User-agent: Baiduspider   Disallow: /baidu   Disallow: /s?   User-agent: Googlebot   Disallow: /baidu   Disallow: /s?   Disallow: /shifen/   Disallow: /homepage/   Disallow: /cpro   User-agent: MSNBot   Disallow: /baidu   Disallow: /s?   Disallow: /shifen/   Disallow: /homepage/   Disallow: /cpro   …   现在读懂这个应该毫无压力了吧,趁便说一句百度的robots.txt比较啰嗦,有爱好的同学能够简化一下。   高阶玩法   首要声明:高档玩法不是一切引擎的爬虫都支撑,一般来说,作为查找引擎技术领导者的谷歌支撑的最好。   比方:google robots.txt   allow   还记住上面的问题吗?假如需求屏蔽a1-a100,可是不屏蔽a50,怎样办?   计划1:   Disallow:/a1/   Disallow:/a2/   …   Disallow:/a49/   Disallow:/a51/   …   Disallow:/a100/   计划2:   Disallow:/a   Allow:/a50/   ok,allow咱们会用了吧。   趁便说一句,假如想屏蔽a50下面的文件private.html,咋整?   Disallow:/a   Allow:/a50/   Disallow:/a50/private.html   聪明的你一定能发现其间的规矩,对吧?谁管的越细就听谁的。   sitemap   前 面说过爬虫会经过网页内部的链接发现新的网页。可是假如没有衔接指向的网页怎样办?或许用户输入条件生成的动态网页怎样办?能否让网站办理员告诉查找引擎 他们网站上有哪些可供抓取的网页?这就是sitemap,最简略的 Sitepmap 形式就是 XML 文件,在其间列出网站中的网址以及关于每个网址的其他数据(上次更新的时刻、更改的频率以及相对于网站上其他网址的重要程度等等),运用这些信息查找引擎 能够愈加智能地抓取网站内容。   sitemap是另一个论题,满足开一篇新的文章聊的,这儿就不展开了,有爱好的同学能够参阅sitemap新的问题来了,爬虫怎样知道这个网站有没有供给sitemap文件,或许说网站办理员生成了sitemap,(可能是多个文件),爬虫怎样知道放在哪里呢?   由于robots.txt的方位是固定的,所以咱们就想到了把sitemap的方位信息放在robots.txt里。这就成为robots.txt里的新成员了。   节选一段google robots.txt:   Sitemap: http://www.gstatic.com/culturalinstitute/sitemaps/www_google_com_culturalinstitute/sitemap-index.xmlSitemap: http://www.google.com/hostednews/sitemap_index.xml插一句,考虑到一个网站的网页很多,sitemap人工保护不太靠谱,google供给了东西能够自动生成sitemap。   metatag   其实严格来说这部分内容不归于robots.txt,不过也算十分相关,我也不知道放哪里适宜,暂且放到这儿吧。   robots.txt 的初衷是为了让网站办理员办理能够出现在查找引擎里的网站内容。可是,即便运用 robots.txt 文件让爬虫无法抓取这些内容,查找引擎也能够经过其他方法找到这些网页并将它增加到索引中。例如,其他网站仍可能链接到该网站。因而,网页网址及其他揭露的信息(如指向相关网站的链接中的定位文字或开放式目录办理体系中的标题)有可能会出现在引擎的查找成果中。假如想彻底对查找引擎隐身那咋整呢?答案是: 元符号,即meta tag。   比方要彻底阻挠一个网页的内容列在查找引擎索引中(即便有其他网站链接到此网页),可运用 noindex 元符号。只需查找引擎检查该网页,便会看到 noindex 元符号并阻挠该网页显示在索引中,这儿留意noindex元符号供给的是一种逐页操控对网站的拜访的方法。   举例:   要避免一切查找引擎将网站中的网页编入索引,在网页的部分增加:      这儿的name取值能够设置为某个查找引擎的User-agent然后指定屏蔽某一个查找引擎。   除了noindex外,还有其他元符号,比方说nofollow,禁止爬虫从此页面中跟踪链接。详细信息能够参阅Google支撑的元符号,这儿提一句:noindex和nofollow在HTML 4.01规范里有描绘,可是其他tag的在不同引擎支撑到什么程度各不相同,还请读者自行查阅各个引擎的阐明文档。   Crawl-delay   除了操控哪些能够抓哪些不能抓之外,robots.txt还能够用来操控爬虫抓取的速率。怎么做到的呢?经过设置爬虫在两次抓取之间等候的秒数。   Crawl-delay:5   表明本次抓取后下一次抓取前需求等候5秒。   留意:google现已不支撑这种方法了,在webmastertools里供给了一个功用能够更直观的操控抓取速率。   这 里插一句题外话,几年前我记住曾经有一段时刻robots.txt还支撑杂乱的参数:Visit-time,只需在visit-time指定的时刻段里, 爬虫才干够拜访;Request-rate: 用来约束URL的读取频率,用于操控不同的时刻段采用不同的抓取速率。后来估量支撑的人太少,就逐渐的废掉了,有爱好的同学能够自行google。我了解 到的是目前google和baidu都现已不支撑这个规矩了,其他小的引擎公司形似历来都没有支撑过。假如确有支撑那是我坐井观天了,欢迎留言奉告。   真的有用?   好吧,到此为止robots.txt相关的东东介绍的也七七八八了,能坚持看到这儿的同学估量都摩拳擦掌了,惋惜,我要泼盆冷水,能彻底指望robots.txt保护咱们网站的内容吗?不一定。不然百度和360就不用打官司了。   协议一致性   第一个问题是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用户行为驱动的异步加载等等。这个就不归于本文评论的领域了。   东西   google webmaster tools   robots.txt生成东西   Perl robots.txt解析器   Python robots.txt解析器   泄密   最 后,robots.txt自身还存在泄密的风险。举例,假如某一个网站的robots.txt里俄然新增了一条:Disallow /map/,你想到了什么?是不是要推出地图效劳了?所以有好奇心的同学就会开端测验各种文件名去拜访该途径下的文件,期望能看到惊喜。形似最初 google的地图就是这么被提早爆出来的,关于这点我不太确定,咱们就当八卦听听好了。