c 抓取网页数据(浅谈网络爬虫中广度优先算法的介绍及其代码实现过程)
优采云 发布时间: 2022-04-06 13:15c 抓取网页数据(浅谈网络爬虫中广度优先算法的介绍及其代码实现过程)
前几天分享了深度优先算法在网络爬虫中的介绍及其代码实现过程。还没来得及上车的可以点这个文章——关于深度优先算法和网络爬虫的简单代码。今天给大家分享一下网络爬虫中广度优先算法的介绍及其代码实现过程。
广度优先算法和深度优先算法正好相反。这里我们继续以上图中的二叉树为例。广度优先算法的主要思想是从顶级域名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(这里, 左边的链接假定会先被爬取)。通过以上了解,
下图是广度优先算法的代码实现过程。
首先传入一个顶层节点节点(链接A),然后判断该节点是否不为空。如果它是空的,它将被退回。如果不为空,则将其放入队列列表中,然后开始循环。使用pop()方法将队列列表中的元素移除(此时只有节点A),然后打印节点的数据。打印完节点后,看看是否有左节点(链接B)和右节点(链接C)。如果左节点不为空,则获取一个新的左节点(链接B)并将其放入队列列表中。之后程序继续执行,右节点的执行过程也是一样的。这时会得到正确的节点(链接C),也将其放入队列列表中。此时,队列列表中的元素有链接B和链接C,然后再次进行新一轮的循环。这样,我们就实现了广度优先算法中分层抓取链接的过程。这个逻辑比深度优先算法简单。
深度优先算法和广度优先算法是数据结构中非常重要的算法结构,也是非常常用的算法。也是面试过程中很常见的面试题,所以建议大家需要掌握。
以上就是网络爬虫中广度优先算法的简单介绍。你们明白了吗?