最简单的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,(可能是多个文件),爬虫怎么知道放在哪里呢?