学习笔记 HTTP权威指南 第9章 爬虫

175 阅读5分钟

好吧.我也不知道书上为什么要介绍Web机器人而不是浏览器.或许因为它也算客户端,属于Web结构上的一环吧,并且不需要涉及到浏览器渲染特性这一坨

9.1 爬虫及爬行方式

  • 什么是爬虫

    • 爬虫是一种应用程序
    • 自动访问网站,收集网站信息的程序
  • 爬虫从哪开始访问网站

    • 有一个根集
    • 存放所有起始访问的网址
  • 搜索引擎为什么需要用户提供根集

    • 有些网址不会和其他网址相互链接,是个孤岛,不提交就不会被爬虫看到
  • 爬虫为什么会陷入死循环

    • 网址之间互相链接
    • 爬虫就会不停的去访问那几个网址
  • 死循环的危害

    • 爬虫被困住了,无法收集其他网站的信息
    • 一直不停的访问固定网站,可能会把服务器搞死
    • 收集了大量一样的信息,搜索结果页信息完全一样
  • 爬虫管理网址的技术

    • 利用树和散列表记录访问过的网址,以加速查询
      • 请求散列表是啥??
    • 有损的存在位图:不懂.......
    • 检查点:将访问过的URL列表保存到硬盘,以防死机
    • 分类:利用机器人集群进行收录

9.1.1 哪些情况可能导致死循环

  • 别名URL导致

  • 文件系统连接成环路

    • 子页面不停的指向父级页面,而父级页面里面又链接的有子页面
  • 动态Web空间生成

    • 根据不同的请求Url生成新的Url
  • 什么是URL别名

    • URL字符串看上去不一样,但实际指向的是同一份资源
  • URL有哪些别名

    • 没端口号和显示80端口号的
    • 有转义字符和没转义字符的
    • 有片段标记和没片段标记的
    • 有默认index.html和没有默认页面的
    • 网址和IP地址的
  • 爬虫怎么处理别名的URL

    • 在访问之前,先用固定的标准规范URL
    • 比如把转义字符换成原始字符
    • 统一去掉80端口号等

9.1.2 如何避免死循环

  • 规范化URL
  • 广度优先的爬行
  • 节流: 限制爬虫一段时间内从一个站点获取的页面数量
  • 限制URL的大小
  • URL黑名单
  • URL模式检测: 出现重复的URL片段时就跳出来
  • 内容指纹: 给整个HTML主体MD5算一下
  • 人工监视: 通过日志来排查

9.2 爬虫的HTTP

  • 为什么大多数爬虫机器人发出的是HTTP/1.0的请求

    • 爬虫要爬行巨多的页面
    • 所以只希望发送最小的HTTP请求,就用1.0咯
  • 爬虫最低要实现的首部

    • User-Agent: 说明是哪个爬虫
    • From: 留下爬虫作者联系方式
    • Accept: 只接受希望接受的信息
    • Referer: 从哪来的
    • Host: 虚拟主机要用
  • 爬虫为什么要发起条件请求

    • 和缓存的条件再验证一样,为了尽量节省流量

9.3 爬虫存在的问题

  • 陷入死循环的爬虫可能搞死服务器
  • 不停的访问失效URL会影响网站日志,降低服务器性能
  • 访问越长的错误URL,影响服务器日志和性能
  • 有可能访问到隐私页面
  • 不停的访问动态网关,导致服务器性能

9.4 如何拒绝爬虫访问

  • 什么是拒绝机器人访问协议
    • 就是robots.txt文件

9.4.1 robots.txt

  • robots.txt的几个版本

    • 0.0
    • 1.0 几乎都在用这个
    • 2.0 几乎无人使用
  • robots.txt的文件格式

    • 空行
    • 注释行
    • 规则行
User-Agent: xxx // 出现在这个里面的爬虫不能访问网址
Disallow: /private // 出现在这个目录里面的文件不能访问
Allow: /public // 允许访问的目录

User-agent: * // 所有的都可以访问
  • robots的工作方式

    • 爬虫先访问robots.txt
    • 看看自己能否访问
    • 再看看哪些目录前缀能访问和不能访问
    • 访问网址前,先对比一下前缀再做决定
  • robots的不足

    • 不能指定某一类型的子目录,只能一个一个罗列
  • 为什么要缓存robots.txt文件

    • 有些网站可能一天会访问N次
    • 每次都要访问和识别robots文件是没必要的

9.4.2 Perl代码

这个就不做笔记了吧.运维相关的了

9.4.3 HTML元标签

  • 什么是排斥标签
    • 由HTML作者控制页面是否能被爬虫爬取
    • 即robot-control标签
<meta name="robots" content="directive-list">
  • robot-control相关指令

    • noindex: 不索引网页
    • nofollow: 不爬取外链
    • index: 可以索引
    • follow: 可以爬取外链
    • noarchive: 不缓存页面
    • all: index + follow
    • none: noindex + nofollow
  • 搜索引擎标签

    • 即TDK
    • 多了一个revisit-after: 但是这个怎么指定,没太大实用意义

9.5 爬虫的规范

这个东西是设计给开发爬虫程序的人用的.用于指导别人怎么开发爬虫.属于设计层面.感觉这个很厉害呀.以后如果要自己设计东西,特别是大型项目的时候,可以跑回来参考一下,毕竟这个顶尖人士设计出来的东西,用于世界范围的规范啊.只是现在没必要看了,现在要先把所有基础知识过一下,明年好换工作哦,先MARK一下 ,P251

9.6 搜索引擎

书上讲这么两页面,哪里能讲的明白,这个东西现在是日常使用的了,这些基础知识就不用做笔记啦