Robots.txt详解

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
    3
    User-agent: Googlebot

    Disallow: /*.asp$
  • ?与在Perl和其他地方的正则表达式中的模式匹配不同,问号没有特殊的含义。所以,阻止对包含问号(?)的所有URL的访问,只需使用问号(不需要“转义”或者使用反斜杠):

    1
    2
    User-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明确写出,反而让恶意爬虫一下了解后台目录。

参考

Robots.txt

robots.txt 语法详解:*、$、?等字符的含义及用法

作者

ivy

发布于

2023-03-22

更新于

2023-03-25

许可协议

CC BY-NC-SA 4.0

评论