Robots.txt详解
最近又要写点爬虫,打算写好点,详细记录各部分。
Robots.txt协议详解
Robots协议,全称为“网络爬虫排除标准(Robots Exclusion Protocol)”。网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。也既是Robots的用法有两种,一种是告诉搜索引擎哪些页面你不能抓(默认其他的就可以抓);一种是告诉搜索引擎你只能抓取哪些页面(默认其他的不可以抓)。
当一个搜索机器人(蜘蛛)访问一个站点时,它会首先检查网站根目录下是否存在robots.txt,如果存在,就会按照文件中的内容确定访问范围,如果不存在,则沿着链接抓取。
robots.txt 是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似”Disallow: *.gif”这样的通配符。
其他的影响搜索引擎的行为的方法包括使用robots元数据:
这个协议也不是一个规范,而只是约定俗成的,有些搜索引擎会遵守这一规范,有些则不然。个人别爬太狠就行。总结一下就是:这是一个关于限制网页爬虫的爬取范围的非强制性的协议文件。
写法
语法
- User-Agent: 以下规则适用的机器人(例如“Googlebot”等)
- Disallow: 您希望阻止机器人访问的页面(根据需要,禁止多行)
- Allow: 不需要阻止机器人访问的页面
- Noindex: 您希望搜索引擎阻止和不要索引的页面(或者如果先前已建立索引,则将其解除索引)。支持Google,不支持雅虎和实时搜索(Live Search),其他搜索未知。
- 每个 User-Agent / Disallow 组应该用空行分隔; 然而,组内不应存在空行(在User-agent行和最后一个Disallow之间)。
- 井号(#)可用于 robots.txt 文件中的注释,其中该行上#后的所有内容都将被忽略。可能用于整行或末行。
- 目录和文件名区分大小写:“my”,“My”和“MY”对于搜索引擎来说都是不同的。
符号
* 是一个通配符,表示所有的搜索引擎种类
$ 匹配结尾,如,阻止以.asp结尾的URL:
1
2
3User-agent: Googlebot
Disallow: /*.asp$?与在Perl和其他地方的正则表达式中的模式匹配不同,问号没有特殊的含义。所以,阻止对包含问号(?)的所有URL的访问,只需使用问号(不需要“转义”或者使用反斜杠):
1
2User-agent: *
Disallow: /*?*
例子
允许所有的robot访问
User-agent: *
Disallow:
或者也可以建一个空文件 “/robots.txt” file
禁止所有搜索引擎访问网站的任何部分
User-agent: *
Disallow: /
禁止所有搜索引擎访问网站的几个部分(下例中的01、02、03目录)
User-agent: *
Disallow: /01/
Disallow: /02/
Disallow: /03/
禁止某个搜索引擎的访问(下例中的BadBot)
User-agent: BadBot
Disallow: /
只允许某个搜索引擎的访问(下例中的Crawler)
User-agent: Crawler
Disallow:
User-agent: *
Disallow: /
Sitemap:sitemap.xml
这里通过Sitemap指定固定的网站地图页面。目前对此表示支持的搜索引擎公司有Google, Yahoo, Ask and MSN。而中文搜索引擎公司,显然不在这个圈子内。这样做的好处就是,站长不用到每个搜索引擎的站长工具或者相似的站长部分,去提交自己的sitemap文件,搜索引擎的蜘蛛自己就会抓取robots.txt文件,读取其中的sitemap路径,接着抓取其中相链接的网页。
Robots.txt之外,元数据
除了Robots.txt以外,还可以使用Robots Meta来向搜索引擎传递信息,Robots META标签中没有大小写之分,示例如下:
content部分有四个选项:index、noindex、follow、nofollow,指令间用 ,
分隔。
故共有四种组合:
<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”INDEX,NOFOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>
其中:
<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>可以写成<META NAME=”ROBOTS” CONTENT=”ALL”>;
<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>可以写成<META NAME=”ROBOTS” CONTENT=”NONE”>
目前看来,绝大多数的搜索引擎机器人都遵守robots.txt的规则,而对于Robots META标签,目前支持的并不多,但是正在逐渐增加,如著名搜索引擎GOOGLE就完全支持,而且GOOGLE还增加了一个指令“archive”,可以限制GOOGLE是否保留网页快照。例如:
<META NAME=”googlebot” CONTENT=”index,follow,noarchive”>
表示抓取该站点中页面并沿着页面中链接抓取,但是不在GOOLGE上保留该页面的网页快照。
注意
每当用户试图访问某个不存在的URL时,服务器都会在日志中记录404错误(无法找到文件)。每当搜索蜘蛛来寻找并不存在的robots.txt文件时,服务器也将在日志中记录一条404错误,所以你应该在网站中添加一个robots.txt。
有时候不希望爬虫抓后台,如果在Robots.txt明确写出,反而让恶意爬虫一下了解后台目录。