前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章——浅谈网络爬虫中深度优先算法和简单代码实现。今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码实现过程。

广度优先算法和深度优先算法恰好相反,这里继续以上图的二叉树为例。广度优先算法的主要思想是首先从顶级域名A开始,之后从中提取出两个链接B和C,待链接B抓取完成之后,下一个要抓取的链接则是链接B的同级兄弟链接C,而不是说抓取完成链接B之后,立马往下去抓取子链接C或D。待C抓取完成之后,再返回去继续抓取兄弟链接B下的子链接D或者E,尔后再返回去抓取C链接下的兄弟链接F、G、H,以此类推。

从面上看去,广度优先算法是一种以分层的方式进行抓取的策略。首先将第一层的节点抓取完成,尔后抓取第二层的节点,再是依次抓取第三层的节点,以此类推,直到抓取完毕或者达到既定的抓取条件为止。可以认为广度优先算法是一种按照层次的方法进行遍历,所以也被称为宽度优先算法。理解好广度优先算法之后,再来看上图,可以得到该二叉树呈现的爬虫抓取链接的顺序依次为:A、B、C、D、E、F、G、H 、I(这里假设左边的链接先会被爬取)。通过上面的理解,我们可以认为到广度优先算法本质上是通过队列的方式来进行实现的。

下图展示的是广度优先算法的代码实现过程。

最开始传入一个顶节点node(链接A),然后判断节点是否非空,如果为空,则返回,反之非空的话,则将其放入到一个队列列表中,然后开始进行循环。对队列列表中的元素(此时只有节点A)使用pop()方法将其进行取出,然后将该节点的数据进行打印。将节点打印完成之后,看看其是否存在左节点(链接B)和右节点(链接C),如果左节点非空的话,则得到新的左节点(链接B),将其放入到队列列表中去。尔后程序继续往下执行,右节点的实现过程亦是如此,此时将得到右节点(链接C),将其也放入到队列列表中去。此时队列列表中的元素有链接B和链接C,之后再次进行新一轮的循环。通过这种方式,我们便实现了广度优先算法中的分层抓取链接的过程。这个逻辑相对于深度优先算法来说,更为简单。

深度优先算法和广度优先算法是数据结构里边非常重要的一种算法结构,也是非常常用的一种算法,而且在面试过程中也是非常常见的一道面试题,所以建议大家都需要掌握它。

关于网络爬虫中广度优先算法的简单介绍就到这里了,小伙伴们get到木有咧?

浅谈网络爬虫中广度优先算法和代码实现相关推荐

  1. 浅谈网络爬虫中广度优先算法和深度优先算法

    前言 做爬虫的,最怕业务简单粗暴的来一句"爬一下XXXX网".比如,"爬一下央广网"(示例链接:http://www.cnr.cn),看着密密麻麻的各种子分类, ...

  2. crawler_浅谈网络爬虫

    题记: 1024,今天是个程序猿的节日 ,哈哈,转为正题,从事了一线网络爬虫开发有近1000天.简单阐述下个人对网络爬虫的理解. 提纲: 1:是什么 2:能做什么 3:怎么做 4:综述 1:是什么 w ...

  3. 浅谈网络编程中的常见问题

    OSI七层模型 OSI七层协议模型主要是: 应用层(Application) 表示层(Presentation) 会话层(Session) 传输层(Transport) 网络层(Network) 数据 ...

  4. 浅谈网络世界中的Power Law现象(一) 什么是Power Law

    Posted by Mr.Friday 这次系列的主题是网络世界里得Power Law.这个主题其实很不好写,因为这个数学模型在生活中随处可见,而且在不同得场合,不同得环境下,人民往往对这个现象有着不 ...

  5. 生活中人们通过计算机网络进行信息交流,浅谈网络计算机应用

    浅谈网络计算机应用 摘 要:网格计算作为信息产业的新热点,将是近期内解决数据量极大的科学工程计算问题最直接和最有效的途径.随着网格计算技术的进一步发展以及服务提供商的共同努力,网格计算将会应用于更广阔 ...

  6. 浅谈V8引擎中的垃圾回收机制

    浅谈V8引擎中的垃圾回收机制 这篇文章的所有内容均来自 朴灵的<深入浅出Node.js>及A tour of V8:Garbage Collection,后者还有中文翻译版V8 之旅: 垃 ...

  7. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

  8. php 爬虫去重,浅谈动态爬虫与去重(续)

    作者:Fr1day@0keeTeam 0x00 前言 在 浅谈动态爬虫与去重 中,分享了动态爬虫中触发事件.监控节点变动.URL去重等的实现方法.在接近一年的线上运行与迭代更新过程中,处理了很多bug ...

  9. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

最新文章

  1. 如何在Spring Boot中玩转智能合约【修订版】
  2. 最后一次作业-----课程总结
  3. Linux系统基础优化
  4. 通过项目逐步深入了解Mybatis(四)
  5. 请解释自动装配模式的区别?_如何从齿条优化方面有效节约机床装配时间
  6. linux服务器 top 查看 内存占用详情
  7. html块状元素和内联元素_HTML中的内联元素和块元素-解释
  8. django 钉钉扫码登录
  9. 毕业三五年,怎么拿到百万年薪?
  10. java模拟安卓get请求,Java模拟HTTP Get Post请求实现论坛自动回帖功能
  11. IDEA 常用快捷键 常用插件 1
  12. 火力发电行业三大知识图谱应用场景,助力火力发电厂清洁高效智慧化运营
  13. 云服务器重装系统步骤,腾讯云服务器如何更换操作系统?更换系统镜像重装系统方法...
  14. 密度图与等高线图——Note_5
  15. 关于启动或关闭Windows功能和0x800F081F
  16. Rancher 离线安装 longhorn 存储类
  17. PD 协议初理解(转)
  18. 看完这篇人工智能的文章,能帮你超越90%的人
  19. 阿里M8级铁子整理出SQL手册:收获不止SQL优化,抓住SQL的本质
  20. 使用blender和mmd模型进行3D辅助绘图

热门文章

  1. 第六周项目二-带武器的游戏角色
  2. android 加载器loader详解
  3. iOS进阶之架构设计MVVM的理解(3)
  4. (0033) iOS 开发之Block 的基础用法及注意事项2
  5. RabbitMQ的消费限流
  6. L2-005. 集合相似度
  7. 【逆向工具】IDA使用5-( string、图形化与视图的切换、图形化显示反汇编地址、自动注释、标签使用)...
  8. 仿小米简约Calculator
  9. (七十九)MapKit的基本使用
  10. seaJs api 帮助文档