HTTP权威协议笔记-9.Web机器人
经过整个春节的放肆,终于回归了,说实话,春节真心比上班累。
9.1 爬虫及爬行方式
(1) 爬虫:Web爬虫是一种机器人,他们会递归性的对各种信息Web站点进行遍历。
(2) 爬行方式:Web机器人会获取Web页面,然后获取这个页面指向的所有Web页面,再指向这个站点所指向的页面,依次类推。
(3) 从哪儿开始:根集
爬虫在开始访问的URL初始集合被称为根集。通常一个好的根集会包括一些大的流行Web站点、一个新创建的列表和一个不经常被链接的的无页面列表.
(4) 链接的提取:爬虫在在Web上移动时,会不断对HTML进行解析,它会对每个链接进行解析,并将这些链接添加到需要爬行的页面列表上去,最终爬虫会将这些相对URL转换为绝对URL。
(5) 避免环路:爬虫会根据链接在Web页面间不停跳转,在跳转期间要防止其 访问A页面-》访问B页面-》访问C-页面-》访问A页面 的循环状态(文件系统同样会存在该情况)。
后果:1.消耗网络带宽,导致无法获取其他页面。
2.爬虫环路不断访问页面的过程中,另一端的服务器也在遭受打击,可能会造成击垮站点,阻止所有正常用户访问站点。
(6) 爬虫对对访问地址的管理技术
1.树和散列表:通过搜索树或散列表来记录已访问的URL,这样加速了访问速度。
2.有损的存在位图:将URL转换为一定长度的数组,这个数组中有个相关的“存在位”,在爬过URL时会将该“存在位”置位,爬虫在再次访问该URL时会发现已访问。
3.检查点:将已访问的URL列表保存到硬盘上,以防止机器人崩溃。
4.分类:为每个机器人分配一个特定的URL“片”,由其负责爬行。
(7) 别名与机器人回路:由于URL的默认端口是否隐藏即会造成回路存在。
(8) 避免循环和重复
1.规范URL
2.广度优先的爬行
3.节流(限制机器人从一个网站获取的页面数量)
4.限制URL大小(环路会使URL长度增加,限制URL长度可有效防止无限循环)
5.URL/站点黑名单
6.模式检测(通过重复组件的环路模式进行检测,可拒绝继续环路访问)
7.内容指纹(通过对URL站点内容相同的校验,得出是否访问过,并是否继续访问)
8.人工监视
9.2 机器人的HTTP
机器人同样遵循手HTTP规范的规则,
1.识别请求首部
建议机器人实现者发送基本首部信息:
- User-Agent:机器人名称
- From:机器人的用户/管理者的邮箱
- Accept:告知服务器可以发送哪些媒体类型
- Referer:提供包含当前请求URL的文档URL
2. 虚拟主机
在默认情况下,大多数服务器都会默认的配置一个特定的站点,因此,不包含host的爬虫访问提供两个站点的服务器发出请求时,会造成返回值失误。
3.条件请求
机器人只有在内容发生变化时才重新获取内容是有意义的,因此,有些机器人实现了条件HTTP请求,他们会对时间戳或者实体签进行比较,之后确认是否继续获取。
4.对响应的处理
1.状态码
2.实体
5.User-Agent导向
很多站点会为不同的用户代理进行内容优化,并尝试对浏览器类型进行检测,以确保支持各种特性,当机器人进行访问时,站点会为机器人提供出错页面而不是请求页面。
站点管理者应该设计一个处理机器人请求的策略。
9.3 行为不当的机器人
- 失效机器人(造成服务器过载,拒绝为其他人服务)
- 失效的URL(如果一个网页经过大量修改,而机器人依然访问之前记录的该网页内容,机器人会对大量不存在的URL发起请求)
- 很长的错误URL(URL过长会降低Web服务器性能)
- 爱打听的机器人(请求私有文档,敏感数据)
- 动态网关访问
9.4 拒绝机器人访问
服务器文档中提供一份Robots.txt,其中标明机器人可以访问服务器的哪些部分,机器人请求时从Web站点首先请求该文档,然后继续访问数据。
Robots.txt具有特有格式及参数,学习不认真,略了。
HTTP权威协议笔记-9.Web机器人的更多相关文章
- HTTP权威协议笔记-5.Web服务器
5.1 Web服务器工作内容 建立连接--接受一个客户端的连接,或者将其拒绝 接受请求--从网络中读取一条HTTP报文 处理请求--对请求报文进行解释,并采取行动 访问资源--访问报文中指定的资源 构 ...
- HTTP权威协议笔记-7.集成点:网关、隧道及中继
.8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...
- HTTP权威协议笔记-6.代理
6.1 Web的中间实体 Http的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...
- HTTP权威协议笔记-10.HTTP-NG
1.HTTP发展中存在的问题 复杂性 其连接.报文.及功能逻辑之间的混合使用相当复杂,使用容易出错 可扩展性 传统流行下来的http应用很难实现扩展性,且无法兼容 性能 高延时.低吞吐 ...
- HTTP权威协议笔记-8.集成点:网关、隧道及中继
.8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...
- HTTP权威协议笔记-7.缓存
7.1 冗余的数据传输 缓存的作用:当客户端每次访问服务器,服务器都会返回一份相同文件,一些相同的字节会不断的在网络内传输,这样冗余的数据传输会耗尽昂贵的带宽,降低传输速度,加重Web服务器的负载. ...
- HTTP权威协议笔记-4.连接管理
4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...
- HTTP权威协议笔记-3.Http报文
3.1 报文流 http使用流入和流出来描述事物处理方向,报文包含:起始行.首部和主体. 3.2 起始行 起始行包含:请求行和回应行. 3.2.1请求行 请求行包含:方法.请求URL(描述了对哪个资源 ...
- 【读书笔记】《HTTP权威指南》:Web Robots
一.概述 Web机器人(Web Robots)是一种Web客户端的软件程序,它自动发起一系列的Web事务,从而在没有人工参与的状态下完成各种Web数据的搜集和处理. 典型的Web机器人有: 股票绘图机 ...
随机推荐
- [问题记录]-技术学习-RocketMQ-全球集群部署问题
一:问题场景 公司在部署全球的RocketMQ的时候,遇到亚洲区的服务器往欧洲区的RocketMQ发送消息失败的情况. 总共有出现两个问题 1:No Topic Route Info org.apac ...
- Android List,Set,Map集合安全 集合区别 并发集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合 Collection接口主要有两 ...
- IOS7升级攻略
1) Select the main view, set the background color to black (or whatever color you want the status ba ...
- CAD在网页中得到批注信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 9 Java 堆排序
堆是具有以下性质的完全二叉树,每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆:或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆.如下图: 同时,我们对堆中的结点按层进行编号,将这种逻 ...
- ajax异步请求详解
1.XMLHttpRequst的出现才有了异步处理 2.创建XmlHttpRequest对象 var request=new XMLHttpRequest(); 注意:如果要兼容IE6以下浏览器则需要 ...
- JSON数据 与 JSON数据的使用
https://blog.csdn.net/u010378878/article/details/52943792 https://blog.csdn.net/liuxuan12417/article ...
- (5.2.1)配置服务器参数——即时文件初始化(IFI)
关键词:零填充,即时文件初始化 转自:https://www.cnblogs.com/gaizai/p/3516905.html 概念: 所有新申请的空间,sql server都要以0来填充完磁盘文件 ...
- Swoole 源码分析——Server模块之TaskWorker事件循环
swManager_start 创建进程流程 task_worker 进程的创建可以分为三个步骤:swServer_create_task_worker 申请所需的内存.swTaskWorker_in ...
- 2019-02-13 Python爬虫问题 NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.
soup=BeautifulSoup(html.text,'lxml') #data=soup.select('body > div.main > div.ctr > div > ...