一、概述

Web机器人(Web Robots)是一种Web客户端的软件程序,它自动发起一系列的Web事务,从而在没有人工参与的状态下完成各种Web数据的搜集和处理。

典型的Web机器人有:

  • 股票绘图机器人(Stock-graphing robots)——用于从股票交易服务器上获取股票价格变化的数据,并绘制出走势图。
  • 商品比较机器人(Comparison-shopping robots)——用于从各个在线商店中获取包含各种商品及其价格的网页,进而构建商品数据库。
  • Web爬虫(Crawlers)——作为搜索引擎的核心,它负责逐个爬取网页链接并搜集文档,从而为搜索引擎进一步构建全文索引数据库(Full-text index database)提供最原始的数据。

二、Web爬虫

Web爬虫的处理过程可以简单概括如下:

1) 选择初始URL集(Root Set):设置待抓取的URL列表,加入初始URL。

        2) 抓取网页:如果URL列表为空,表明抓取完毕;否则取出一个URL,抓取对应网页。

        3) 提取URL链接:从当前网页中提取出有效的URL链接,加入URL列表,然后跳到第2)步。

1. 选择初始URL集

选择思路:用尽可能少的URL(根据内在的链接关系)覆盖尽可能多的目标网页。

一个比较好的初始URL集的典型组成:一个热门站点(如http://www.sina.com)+ 刚刚新建的一些网页 + 比较孤僻的一些网页(很少被其他网页链接到)。一些大型搜索引擎的Web爬虫就提供了相应机制,让用户来提交一些新建的网页和孤僻的网页,从而帮助提高Web爬虫的覆盖范围。

2. 抓取网页

如果Web爬虫得到一个URL就抓取一个网页,那码农们将会多么的欢快。

残酷的现实是,URL重复(dups)会让网页抓取惹上麻烦,Web爬虫会因此抓取到很多重复的网页,从降低了结果的可用性;更有甚者,URL重复很可能构成URL环(loops),进而使得Web爬虫陷入死循环,周而复始地爬行在由一些固定URL组成的环(cycle)上面。

URL重复可能是被恶意构造的(malicious),但多数情况下是自然存在的。

造成URL重复的因素有:

  • 网页中存在完全相同的URL

如网页中有两个链接都为http://www.google.com

  • 网页中存在功能等效的URL别名(Aliases)

如网页中有一个链接为http://www.baidu.com:80(80是默认端口,可有可无),另一个链接为http://www.baidu.com/index.html#top(index.html是默认首页,可有可无;锚点#top只是网页中的一部分,不会影响到网页层面)

  • 文件系统的符号链接环(Filesystem Link Cycles)

如Web服务器www.foo.com的根目录/下有一个文件index.html,还有一个子目录subdir,但事实上subdir是一个指向根目录/的符号链接,因此http://www.foo.com/index.html和http://www.foo.com/subdir/index.html都指向了同一个文件index.html

  • 动态虚拟Web空间(Dynamic Virtual Web Spaces)

这种情况其实跟URL重复无关,但同样会造成恶劣的后果。

如一个恶意的Web服务器,当用户请求网页index-fall.html时,服务器实际却执行了一个网关程序(gateway application),动态生成一个虚构网页A,里面包含指向index-fall1.html的URL;此后Web爬虫会继续抓取index-fall1.html,又会收到服务器动态生成的网页B,其中包含指向index-fall2.html的URL,等等。如此一来,可怜的Web爬虫将会一直游走在这些动态生成的虚构网页中,仿佛步入了一个梦幻般的旅程(Alice-in-Wonderland journey)

避免URL重复或URL环的方法有:

  • 维护已访问URL列表:避免字面值完全相同的URL
  • URL归一化(Canonicalizing URLs):解决URL别名问题
  • 模式检测(Pattern detection):解决文件系统的符号链接环问题
  • 广度优先(Breadth-first crawling):尽量采用广度优先(Breadth-first)策略,以推迟遭遇URL环陷阱的时间
  • 限制抓取的网页总数(Throttling):即使陷入URL环,也会最终因为网页总数限制而退出,从而避免死循环
  • URL/站点黑名单(URL/site blacklist):根据以往的经验,将有风险的URL和网站加入黑名单,排除在抓取范围之外,这种方法需要人工参与
  • 人工监控:Web世界纷繁复杂,总会遇到技术层面解决不了的问题,此时还得由人来处理

也可以上网搜索“URL去重”等关键字,看看一些具体的解决方案。

3. 提取URL链接

一个网页中往往包含大量的URL链接,这其中的每个链接又会指向一个包含其他URL链接的网页。提取URL链接的策略分为 广度优先(Breadth-first) 深度优先(Depth-first) 两种,不同的策略对应的URL处理顺序是不同的。两种策略的正式定义可以上网搜索,这里只根据一个简单的例子加以描述。

例如有网页A、B、C、D、E、F、G,分别对应的URL为a、b、c、d、e、f、g,其中:

    网页A中的URL:b、c、d

    网页B中的URL:e、f

    网页E中的URL:g

则Web爬虫处理网页A时:

    广度优先对应的URL处理顺序:b->c->d->e->f->g

    深度优先对应的URL处理顺序:b->e->g->f->c->d

三、编写友好的Web机器人

友好的Web机器人,往往更加遵守HTTP标准规范,在索要信息的同时,也会更多地考虑到信息提供者(Web服务器)的需求。

1. 规范的HTTP处理(Robotic HTTP)

Web机器人发出的HTTP请求,通常会包含以下必要HTTP头部:

  • User-Agent: 给出Web机器人的名称(后面“机器人拒绝标准”的robots.txt中会用到)
  • From: 给出Web机器人的使用者/管理员的email地址(满足RFC 822规范的email地址格式)
  • Accept: 给出Web机器人希望收到的内容类型
  • Referer: 给出包含当前被请求URL的页面的URL(便于Web服务器跟踪自己的站点内容是如何被找到的)
  • HOST: 给出目标主机名称,在虚拟主机(Virtual Hosting)的情况下,方便Web服务器在多个虚拟站点中找出客户请求的目标站点
  • 条件请求(Conditional Requests):如If-Modified-Since、If-Match等,具体视需求而定,用以减少Web机器人不必要的抓取

2. Web机器人的不当行为(Misbehaving Robots)

  • 由于Web机器人的编程错误或者陷入URL环,导致Web服务器由于过载而不能被其他用户正常访问
  • 盲目抓取并公布他人不愿公开的私密信息
  • 胡乱抓取过时或无法访问的URL

3. 非请勿入(Excluding Robots)

由于Web机器人可能导致的上述问题,如何限制那些肆意妄为的Web机器人就显得尤为重要。

限制Web机器人的方法主要有两种:机器人拒绝标准(通常又称为robots.txt)和机器人控制标记。其中,robots.txt提供给站点管理员使用,而机器人控制标记则面向HTML网页的作者。

值得注意的是,robots.txt和机器人控制标记都是“君子约定”,如果有Web机器人不想按规矩办事,那这些约定对它就完全不起作用了。

1)robots.txt

“机器人拒绝标准”(Robots Exclusion Standard)目前有v0.0、v1.0和v2.0三个修订版本,这里重点关注v1.0版本的标准:《A Method for Web Robots Control》

标准中指出,在访问一个Web站点的任何URL前,Web机器人应该首先请求获取该站点的robots.txt,根据Web服务器的响应结果作出以下处理:

  • 如果返回成功(HTTP状态码2XX),则Web机器人需要分析robots.txt的内容,并在抓取站点内容时遵守其中的限制规则
  • 如果返回不存在(HTTP状态码404),则Web机器人认为该站点没有限制规则,可以随意抓取站点内容
  • 如果返回访问受限(HTTP状态码401或403),则表明对于该站点而言,Web机器人是被完全限制的
  • 如果返回临时错误(HTTP状态码503),则Web机器人应该尝试稍后访问该站点,直到成功获取到robots.txt为止
  • 如果返回重定向(HTTP状态码3XX),则Web机器人应该沿着重定向路径一直向下,知道成功找到robots.txt为止

robots.txt文件的格式User-Agent行和Disallow/Allow行组成。一个典型的robots.txt如下所示:

    User-Agent: slurp
    User-Agent: webcrawler
    Allow: /private/others
    Disallow: /private

    User-Agent: *
    Disallow:

该文件允许机器人slurp和webcrawler访问/private中/others下的内容,但不能访问/private中的其他内容,另外还可以访问除了/private目录以外的其他任何内容;而其他机器人则无法访问本站点的任何内容。

现实生活中的robots.txt例子可以参考 http://www.baidu.com/robots.txthttp://www.google.com/robots.txt 等。

2)机器人控制标记(HTML Robot-Control META Tags)

机器人控制标记采用HTML文档的META标记,一般格式如下:

    <META NAME="ROBOTS" CONTENT=directive-list>

指令列表(directive-list)中最常用的两个选项是NOINDEX和NOFOLLOW,其他的可选项有INDEX、FOLLOW、NOARCHIVE、ALL、NONE。

四、搜索引擎

搜索引擎的TOP框架图如下:

有几个概念需要关注:全文索引数据库(Full-text index database)、URL查询字符串,相关度排序,关键字欺骗(Spoofing)。

【读书笔记】《HTTP权威指南》:Web Robots的更多相关文章

  1. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  2. [读书笔记] CSS权威指南1: 选择器

    通配选择器 可以与任何元素匹配,就像是一个通配符 /*每一个元素的字体都设置为红色*/ * { color: red; } 元素选择器 指示文档元素的选择器. /*为body的字体设置为红色*/ bo ...

  3. [读书笔记]Hadoop权威指南 第3版

    下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...

  4. 《软件测试自动化之道》读书笔记 之 底层的Web UI 测试

    <软件测试自动化之道>读书笔记 之 底层的Web UI 测试 2014-09-28 测试自动化程序的任务待测程序测试程序  启动IE并连接到这个实例  如何判断待测web程序完全加载到浏览 ...

  5. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  6. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

  7. 【读书笔记】iOS-使用Web Service-基于客户端服务器结构的网络通信(一)

    Web Service技术是一种通过Web协议提供服务,保证不同平台的应用服务可以互操作,为客户端程序提供不同的服务. 目前3种主流的Web Service实现方案用:REST,SOAP和XML-RP ...

  8. 【读书笔记】iOS网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

  9. 读书笔记之深入分析Java Web技术内幕

    章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统 ...

  10. 【读书笔记】iOS-网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

随机推荐

  1. NTP(Network Time Protocol)

    Linux NTP配置详解 (Network Time Protocol) http://www.ntp.org/ Meinberg NTP packages provide a GUI instal ...

  2. appium -- 页面出现弹窗,关闭后,无法识别页面元素(转)

    原文:https://www.cnblogs.com/leavescy/p/9733001.html; 1. 问题:如图所示:在修改手势密码的过程中,点击了返回按钮后,弹出该弹窗:点击继续设置后,就发 ...

  3. 母版页 MasterPage

    母版页是一个扩展名为.master的ASP.NET文件,主要是为了应用程序创建统一的用户功能界面和样式. ContentPlaceHolder控件只能在母版页中使用,在平常的web页面使用,会发生解析 ...

  4. js判断PC端 移动端 并跳转到对应页面

    一.PC端跳转到移动端 html页面: <script>var webroot="/",catid="{$catid}",murl="m/ ...

  5. HTML(1)简介

    "超"文本标记语言--HTML 文本,是指书面语言的表现形式. 百度百科 说白了,文本就是你能看得到的字,不论是纸上的还是屏幕上的,都是文本.文本就是用来记录信息一种形式. 那么, ...

  6. 无人驾驶技术之Kalman Filter原理介绍

    基本思想 以K-1时刻的最优估计Xk-1为准,预测K时刻的状态变量Xk/k-1,同时又对该状态进行观测,得到观测变量Zk,再在预测与观之间进行分析,或者说是以观测量对预测量进行修正,从而得到K时刻的最 ...

  7. 【win10系统问题】远程桌面登录一次后,第二次登录看不到用户名和密码输入框

    [win10系统远程桌面登录问题] 远程桌面登录某服务器一次后,第二次登录看不到用户名和密码输入框 [解决方法] 在注册表里找到该路径下的远程服务器ip,删除即可: HKEY_CURRENT_USER ...

  8. 3.openldap生成LDAP用户

    1.用migrationtools生成用户 #yum install migrationtools -y #vim /usr/share/migrationtools/migrate_common.p ...

  9. Js 问题分析--js 影响页面性能

    文档下载链接:http://pan.baidu.com/s/1i4Hci4d (失效请留言)

  10. 关于JavaScript定时器我的一些小理解

    因为自己在平时工作中,有些功能需要用到定时器,但是定时器并不像我们表边上看到的那样,所以这周末我看看书查查资料,深入研究了一下JavaScript中的定时器,那么废话不多说,下面进入我们今天的正题. ...