干货
观点
案例
新闻
咱们
网站的管理者们一般会有这般一种心理:一方面期待百度、Google这般的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息。正是由于这般,才有“好爬虫”、“坏爬虫”这般的说法。
说到“好爬虫”,就不得不提网络爬虫与web之间的拜访授权协议——Robots协议了。
Robots协议的定义
Robots协议(亦叫作为爬虫协议、设备人协议等)的全叫作是“网络爬虫排除标准”(Robots Exclusion Protocol),网站经过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/culturalinstitute/sitemaps/www_google_com_culturalinstitute/sitemap-index.xml
Sitemap: http://www.google.com/hostednews/sitemap_index.xml
插一句,思虑到一个网站的网页众多,sitemap人工守护不太可靠,google供给了工具能够自动生成sitemap。
meta tag
其实严格来讲这部分内容不属于robots.txt。
robots.txt的初衷是为了让网站管理员管理能够出此刻搜索引擎里的网站内容。然则,即使运用 robots.txt 文件让爬虫没法抓取这些内容,搜索引擎亦能够经过其他方式找到这些网页并将它添加到索引中。例如,其他网站仍可能链接到该网站。因此呢,网页网址及其他公开的信息(如指向关联网站的链接中的定位文字或开放式目录管理系统中的标题)有可能会出此刻引擎的搜索结果中。倘若想彻底对搜索引擎隐身那咋整呢?答案是:元标记,即meta tag。
例如要完全阻止一个网页的内容列在搜索引擎索引中(即使有其他网站链接到此网页),可运用 noindex 元标记。只要搜索引擎查看该网页,便会看到 noindex 元标记并阻止该网页表示在索引中,这儿重视noindex元标记供给的是一种逐页掌控对网站的拜访的方式。
要防止所有搜索引擎将网站中的网页编入索引,在网页的部分添加:
<meta name="robots" content="noindex">
这儿的name取值能够设置为某个搜索引擎的User-agent从而指定屏蔽某一个搜索引擎。
除了noindex外,还有其他元标记,例如说nofollow,禁止爬虫从此页面中跟踪链接。仔细信息能够参考Google支持的元标记,这儿提一句:noindex和nofollow在HTML 4.01规范里有描述,然则其他tag的在区别引擎支持到什么程度各不相同,还请读者自动查阅各个引擎的说明文档。
Crawl-delay
除了掌控那些能够抓那些不可抓之外,robots.txt还能够用来掌控爬虫抓取的速率。怎样做到的呢?经过设置爬虫在两次抓取之间等待的秒数。
Crawl-delay:5
暗示这次抓取后下一次抓取前需要等待5秒。
重视:google已然不支持这种方式了,在webmaster tools里供给了一个功能能够更直观的掌控抓取速率。
这儿插一句题外话,几年前曾经有一段时间robots.txt还支持繁杂的参数:Visit-time,仅有在visit-time指定的时间段里,爬虫才能够拜访;Request-rate: 用来限制URL的读取频率,用于掌控区别的时间段采用区别的抓取速率。后来估计支持的人太少,就渐渐的废掉了,日前google和baidu都已然不支持这个规则了,其他小的引擎机构貌似从来都无支持过。
防君子不防小人
Robots协议不是什么技术壁垒,而只是一种互相尊重的协议,好比私家花园的门口挂着“闲人免进”,尊重者绕道而行,不尊重者依然能够推门而入。日前,Robots协议在实质运用中,还存在有些问题。
缓存
robots.txt本身亦是需要抓取的,出于效率思虑,通常爬虫不会每次抓取网站网页前都抓一下robots.txt,加上robots.txt更新不频繁,内容需要解析。一般爬虫的做法是先抓取一次,解析后缓存下来,况且是相当长的时间。假设网站管理员更新了robots.txt,修改了某些规则,然则对爬虫来讲并不会立刻生效,仅有当爬虫下次抓取robots.txt之后才可看到最新的内容。尴尬的是,爬虫下次抓取robots.txt的时间并不是由于网站管理员掌控的。当然,有些搜索引擎供给了web 工具能够让网站管理员通告搜索引擎那个url出现了变化,意见重新抓取。重视,此处是意见,即使你通告了搜索引擎,搜索引擎何时抓取仍然是不确定的,只是比完全不通告要好点。至于好多少,那就看搜索引擎的良心和技术能力了。
ignore
不知是无意还是有意,反正有些爬虫不太遵守或完全忽略robots.txt,不排除研发人员能力的问题,例如说基本不晓得robots.txt。另一,本身robots.txt不是一种强制办法,倘若网站有数据需要保密,必需采取技术办法,例如说:用户验证,加密,ip拦截,拜访频率掌控等。
恶意爬虫
在互联网世界中,每日都有不可胜数的爬虫在日夜不息地爬取数据,其中恶意爬虫的数量乃至高于非恶意爬虫。遵守Robots协议的爬虫才是好爬虫,然则并不是每一个爬虫都会主动遵守Robots协议。
恶意爬虫能够带来非常多潜在威胁,例如电商网站的商品信息被爬取可能会被竞争对手利用,太多的爬虫还会占用带宽资源、乃至引起网站宕机。
反恶意爬虫是一件漫长而艰巨的任务,倘若依靠自己实力难以处理,能够借助岂安科技的业务危害分析平台 WARDEN 来反恶意爬虫,按照自己的需要来定制功能。
你可能会爱好:
安安小课堂:网络爬虫
市面上平常的开源爬虫对比与小型采访
手把手教你用Python爬虫煎蛋妹纸海量照片
爬虫VS反爬虫的蝴蝶效应
|