前面只是获取了单个网页内容,在实际中,则使用爬虫程序遍历互联网,把网络中相关的网页全部抓取过来,这也体现了爬虫程序“爬”的概念。

  互联网可以看成一个超级大的“图',而每个网页则可以看作是一个”节点“。页面中的链接可以看成是图的”有向边“。因此,可以通过图的遍历的方式对互联网这个”图“进行访问。图的遍历分为宽度优先和深度优先,但深度优先可能会在深度上过于”深”的遍历或者陷入“黑洞”,大多数爬虫都不采用这种方式。此外,在爬取的时候,有时候并不会完全按照宽度优先遍历的方式,而是给待遍历的网页赋予一定的优先级,根据这个优先级进行遍历,这种遍历方式又被称为带偏好的遍历。

  有关于图的宽度遍历的知识这里不予详细介绍,主要看一下宽度优先遍历。

  实际的爬虫项目是从一系列的种子链接开始的,所谓种子链接就相当于宽度优先遍历中的种子节点,只是实际爬虫项目中种子链接可以有多个,而宽度优先遍历中的种子节点只有一个。

  如何定义一个链接的子节点?每个链接对应一个HTML页面或者其他文件(word、excel、pdf等),在这些文件中,只有HTML页面有相应的“子节点”,这些“子节点”就是HTML页面上对应的超链接。这些子节点本身又是一个链接。对于非HTML文档,不能从中提取超链接。因此,可以看作图的“终端”节点。

  整个宽度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的“子节点”提取出来,放入队列中以此进行抓取。被处理过的链接需要放入一张表(通常称为Visited表)中,每次处理新链接之前,需要查看这个链接是否已经存在于Visited表中。如果存在,证明链接已经处理过,跳过,不做处理,否则进行下一步处理。整个过程如下图所示:

  宽度优先遍历是爬虫中使用最广泛的一种爬虫策略,之所以使用宽度优先搜索策略,主要原因有三点:

    1)重要的网页往往里种子较近;

    2)万维网的实际深度最多能达到17层,但到达某个网页总存在一条很短的路径,而宽度优先遍历会以最快的速度到达这个网页;

    3)宽度优先有利于多爬虫的合作抓取,多爬虫合作通常弦抓取站内链接,抓取的封闭性很强。

转载于:https://www.cnblogs.com/bianjun/p/4508908.html

《自己动手写网络爬虫》读书笔记——宽度优先爬虫和带偏好的爬虫相关推荐

  1. 《自己动手写操作系统》读书笔记——初识保护模式

    <自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...

  2. 记录《自己动手写网络爬虫 》书中涉及的内容学习一些算法

    第1篇  自己动手抓取数据 第1章  全面剖析网络爬虫 3 1.1  抓取网页 4 1.1.1  深入理解URL 4 1.1.2  通过指定的URL抓取 网页内容 6 1.1.3  Java网页抓取示 ...

  3. 《自己动手写Docker》学习笔记2

    <自己动手写Docker>学习笔记2 1 前言 由于本人毕业设计与云原生领域相关,因此最近在学习Docker相关知识,<自己动手写Docker>涵盖了Docker底层的各类知识 ...

  4. 《跟我一起写makefile》读书笔记

    前言 本文为<跟我一起写makefile>读书笔记,是自己在学makefile时候自己感觉比较全面的学习资料. 文章目录 前言 关于程序的编译和链接 概述 关于程序的编译和链接 maekf ...

  5. 计算机读书笔记10000,网络营销读书笔记10000字

    网络营销读书笔记10000字 第6章 电子邮件营销 作为网站运营者的你,拿到潜在客户的电子邮件地址,也就拿到后续沟通.不断提醒潜在用户存在的权利. 任何情况下都不要使用垃圾邮件. 电子邮件营销之所以效 ...

  6. 2 宽度优先爬虫和带偏好的爬虫(4)

    5 Java带偏好的爬虫示例 在上一节中,我们已经指出,可以使用优先级队列(PriorityQueue)来实现这个带偏好的爬虫.在深入讲解之前,我们首先介绍优先级队列. 优先级队列是一种特殊的队列,普 ...

  7. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  8. 2 宽度优先爬虫和带偏好的爬虫(2)

    接上节 3 Java 宽度优先爬虫示例 本节使用java实现一个简易的爬虫.其中用到了HttpClient和HtmlParser两个开源工具包.HttpClient的内容之前已经做过详细的阐述.有关H ...

  9. 从零开始学python网络爬虫读书笔记_从零开始学Python网络爬虫 中文pdf

    资源名称:从零开始学Python网络爬虫 中文pdf 第1章 Python零基础语法入门 1 第2章 爬虫原理和网页构造 17 第3章 我的第一个爬虫程序 26 第4章 正则表达式 45 第5章 Lx ...

  10. 自己动手写网络抓包工具

    看了太多的"自己动手",这次咱也"自己动手"一下,写个简单的网络抓包工具吧.要写出像tcpdump和wireshark(ethereal)这样的大牛程序来,咱也 ...

最新文章

  1. Xamarin ios C#苹果应用开发第二讲配置环境和编写代码
  2. 微信进行证书相关操作(退款,发放优惠券等)时报System.Security.Cryptography.CryptographicException: 出现了内部错误。...
  3. custom field further usage - add into UI and report
  4. 字符串匹配(多模式匹配篇)
  5. 为什么强烈禁止开发人员使用isSuccess作为变量名
  6. php7 memcached sasl,Mac安装memcached扩展支持sasl
  7. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...
  8. 剑指offer面试题[60]-将二叉树打印成多行
  9. Hive编程指南pdf
  10. JMeter数据库操作详解
  11. DEVC配置C++11标准
  12. 中职生c语言搜题软件,适合法考学生用的搜题软件,这几款帮你搞定!
  13. android 编写计时器,Android用5种方式实现自定义计时器, 哪种才是你的菜?
  14. VS2017调试程序提示脚本错误解决方法
  15. discuz制作自己的门户列表模板
  16. 波士顿大学计算机工程硕士,波士顿大学电气与计算机工程理学硕士
  17. deep learning 入门
  18. Pandas操作Excel,统计pass/fail的个数
  19. 戴尔3040计算机没有VGA接口,电脑没有vga接口怎么办
  20. Git本地文件上传到远程仓库

热门文章

  1. 用Python剪辑视频?太简单了
  2. 最全面计算机英语单词列表(一)
  3. JAVA调起clearcase_Eclipse集成配置管理工具ClearCase (ccrc_for_eclipse)
  4. JavaScript键盘鼠标监听功能
  5. mysql 导出 客户端_Web基础配置篇(四): Mysql的配置及使用
  6. 计算机常用1700英语单词
  7. 在没有QQ、微信时局域网共享文件方法
  8. linux雨滴桌面,Rainmeter(雨滴桌面秀)
  9. 昂达V971四核测评
  10. SMART原则是什么