18.2 什么是机器人排除标准

《搜索引擎优化宝典(第2版)》第18章机器人、蜘蛛和爬虫,本章主要的内容有:什么是机器人、爬虫和蜘蛛;什么是机器人排除标准; Robots 元标签;用XML 网站地图使网页被收录。本节为大家介绍什么是机器人排除标准虫。

作者:马煜 译来源:清华大学出版社|2010-07-19 21:40

开发者大赛路演 | 12月16日,技术创新,北京不见不散

18.2 什么是机器人排除标准

根据前面的介绍,确实有必要对爬虫的行为做出一定的限制。这种限制称为机器人排除标准(robot exclusion standard)或是机器人排除协议(robot exclusion protocol),或是robot.txt。

这些东西的本质就是robot.txt 文件。这个文本文件应该放在网站的根目录下,其中就说明了网站中的哪些网页是爬虫不能索引的。

需要使用特定的语法才能使爬虫理解文件中的含义。这个文本文件的基本形式如下:

  1. User-agent: *
  2. Disallow: /

这两个部分是必需的。第一个部分,User-agent:,是告诉爬虫所针对的是哪个用户代理(user agent),实际上就是爬虫。星号(*)表示所有的爬虫,也可以指定一个或若干个爬虫。

第二个部分,Disallow:,是告诉爬虫哪些地方是不能访问的。斜杠(/)表示“所有目录”。所以在前面的这个例子中,这个robot.txt 文件的意思就是“任何爬虫都要忽略所有的目录”。

在编写robot.txt 文件时,要记得在User-agent 和Disallow 指令后面加上冒号(:)。冒号后面的信息就是要求爬虫注意的信息。

在实际情况下,很少会要求爬虫忽略所有的目录。可以要求爬虫忽略网站总的临时目录,robot.txt 的内容如下:

  1. User-agent: *
  2. Disallow: /tmp/

也可以进一步要求爬虫忽略若干个目录:

  1. User-agent: *
  2. Disallow: /tmp/
  3. Disallow: /private/
  4. Disallow: /links/listing.html

这段代码就是告诉爬虫忽略临时目录、私人目录以及内容是链接的网页——爬虫也就无法跟踪网页中的链接。

要注意,爬虫对robot.txt 是从上至下读取的,一旦发现合适的规定就会停止读取,并开始根据规则访问网站。所以,如果在robot.txt 文件中对多个爬虫制定访问规则,就一定要小心。

下面的用法就是错误的:

  1. User-agent: *
  2. Disallow: /tmp/
  3. User-agent: CrawlerName
  4. Disallow: /tmp/
  5. Disallow: /links/listing.html

这段代码首先是告诉所有的爬虫要忽略临时目录。因此,所有的爬虫在读取这个文件时都会忽略临时目录。但这段代码接着又不允许某个特定的爬虫(用CrawlerName 表示)访问临时目录和listing 网页中的链接。但问题是,这个特定的爬虫根本就不会接收到这条指令,因为它已经根据第一条命令忽略了临时目录,开始读取网站的其他部分。

如果要对不同的爬虫发出不同的命令,应该先写针对特定爬虫的命令。将针对所有爬虫的命令放在最后面。将前一个例子修改正确后,应该如下所示:

  1. User-agent: CrawlerName
  2. Disallow: /tmp/
  3. Disallow: /links/listing.html
  4. User-agent: *
  5. Disallow: /tmp/

上面这种技巧可以很方便地使爬虫忽略网站中的某个网页或链接,而无需使其忽略整个网站或整个目录,也无需在每个网页中逐个地加入元标签。

不同的搜索引擎爬虫有不同的名字,在Web 服务器的记录中应该能看到这些名字。下面列出了一些常见的搜索引擎爬虫的名称:

Google:Googlebot

MSN:MSNbot

Yahoo! Web Search:Yahoo SLURP 或简称SLURP

Ask:Teoma

AltaVista:Scooter

LookSmart:MantraAgent

WebCrawler:WebCrawler

SearchHippo:Fluffy the Spider

这里只是列出了很少的一部分搜索引擎爬虫。在Web Robots Pages(www.robotstxt.org)

上可以找到完整列表,以及机器人排除标准(Robot Exclusion Standard)文档。应该花点时间阅读该文档。这份文档不长,通读一下有助于理解爬虫与网站之间的交互方式。这方面的深入理解也有助于更好地控制爬虫对网站的访问。

有必要知道爬虫属于哪个搜索引擎,因为还有一些恶意的爬虫(spambot)也会检索网站。如果不知道这些爬虫的名称,就无法阻止这些爬虫对网站的恶意访问,也不能确保用户信息的安全。恶意爬虫非常讨厌,它们会搜索网站中的所有信息,收集其中的电子邮箱地址。这些地址被收集到一起之后就卖给广告商,甚至有可能卖给非法组织。几乎所有的恶意爬虫都不会理睬robots.txt 文件。

在网站的基本地址后面加上robots.txt,就能看到各个网站的robots.txt 文件。例如,访问www.sampleaddress.com/robots.txt 就能看到该网站的robots.txt 文本文件。如果通过这样的链接没能看到网站的robots.txt 文件,那这个网站就没有robots.txt。

可以用任何文本编辑器来创建robots.txt 文件。要记住,并不是每个人都需要robots.txt文件。如果不在意是谁在检索网站,那就没必要使用这个文件。但不管怎么样,都不要使用空白的robots.txt 文件。在爬虫看来,空文件意味着网站不愿意被任何爬虫检索。所以,使用空白文件可以使网站不出现在搜索引擎的搜索结果中。

机器人排除标准 robot.txt robot exclusion standard的更多相关文章

  1. Nutch关于robot.txt的处理

    在nutch中,默认情况下尊重robot.txt的配置,同时不提供配置项以忽略robot.txt. 以下是其中一个解释.即作为apache的一个开源项目,必须遵循某些规定,同时由于开放了源代码,可以简 ...

  2. Nutch关于robot.txt的处理 分类: H3_NUTCH 2015-01-28 11:20 472人阅读 评论(0) 收藏

    在nutch中,默认情况下尊重robot.txt的配置,同时不提供配置项以忽略robot.txt. 以下是其中一个解释.即作为apache的一个开源项目,必须遵循某些规定,同时由于开放了源代码,可以简 ...

  3. robot.txt 文件 作用和语法

    seo工作者应该不陌生,robots.txt文件是每一个搜索引擎蜘蛛到你的网站之后要寻找和访问的第一个文件,robots.txt是你对搜索引擎制定的一个如何索引你的网站的规则.通过该文件,搜索引擎就可 ...

  4. 「黑科技」智能消毒防疫机器人 技术方案介绍-disinfection robot

    消毒机器人 小新防疫消杀机器人 - 自主导航全方位360°臭氧杀菌消毒机器人,采用臭氧无阻碍.无死角.遍布整个空间除菌:强力涡轮风机,30㎡室内空气循环6次/h,10分钟速效杀菌.除异味.自动转化为氧 ...

  5. JSTL 标准标签库 (JavaServer Pages Standard Tag library, JSTL)

    JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制标签库的集合,用来解决 像遍历Map或集合.条件测试.XML处理,甚至数据 库访问和数 ...

  6. Robot - 1. robot framework环境搭建

    Fom:https://www.cnblogs.com/puresoul/p/3854963.html 一. robot framework环境搭建: 官网:http://robotframework ...

  7. [Robot Framework] Robot Framework怎么调试?

    Robot Framework怎么debug? 在eclipse里面安装一个插件,就可以debug robot framework的project. 插件下载地址: https://github.co ...

  8. 使用robot合并Robot Framework测试报告

    p.p1 { margin: 0; font: 17px ".PingFang SC" } p.p2 { margin: 0; font: 12px "Helvetica ...

  9. [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行scrollIntoView操作

    有些元素需要通过滚动条滚动才能变得可见. 如果这些元素在DOM结构里面存在,可以通过scrollIntoView让其可见,但如果在DOM结构里面不存在那就要通过拖动滚动条让其变的可见. Execute ...

随机推荐

  1. Django的AutoField字段

    [Django是一个机智的框架] 默认情况下Djang会为ORM中定义的每一张表加上一个自增ID列,并且用这个列来做主键:出于一个MySQL-DBA的工作经历我觉得 Djanog还真是机智:这样么说主 ...

  2. python 搭建ftp服务器

    代码示例: # coding: utf-8 import os from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.han ...

  3. 批量更新MongoDB的列。

    db.User.find().forEach( function(item){ db.User.update({"_id":item._id},{"$set": ...

  4. js两个日期相减

    function dateHanle(d1,d2){ if(Date.parse(d1) - Date.parse(d2)==0) { console.log("d1等于d2"); ...

  5. [Kubernetes]Kubernetes的网络模型

    Kubernetes的网络模型从内至外由四个部分组成: Pod内部容器所在的网络 Pod所在的网络 Pod和Service之间通信的网络 外界与Service之间通信的网络 建议在阅读本文之前先了解D ...

  6. go 从入门到精通(二)基本数据类型和操作符

    一.文件名&关键字&标识符 所有go源码都是以.go结尾 标识符以字母或下划线开头,大小写敏感 下划线_是特殊标识符,用户忽略结果 保留关键字 导入包时可以设置别名 下面是保留关键字: ...

  7. python2和Python3异同总结

    1. python3 异常不再接收逗号(,)作为参数: ## python3 中这样可以正常运行 try: print("在这里执行的代码,有异常进入except") except ...

  8. 精通Docker的50个必备教程、工具、资源

    Docker 已经震惊了软件开发界.它提供了一种根据 DevOps 方法打包和输送应用程序的便捷方法. 最近我们发布了 51 个必备的 Docker 工具列表①,但工具不是完全精通容器化所需的唯一东西 ...

  9. (原创)C++11改进我们的程序之简化我们的程序(八)

    本次要讲的是如何通过泛型函数来简化我们的程序. 泛型函数除了之前介绍的一些优点外还有两个重要的优点 1.消除重复逻辑,提高程序的内聚性和健壮性 泛型函数在某种程度上用来弥补泛型类型的不足.通过泛型类型 ...

  10. HBase的Write Ahead Log (WAL) —— 整体架构、线程模型【转】

    转自:http://www.cnblogs.com/ohuang/p/5807543.html 解决的问题 HBase的Write Ahead Log (WAL)提供了一种高并发.持久化的日志保存与回 ...