Python爬虫从入门到放弃(十)之 关于深度优先和广度优先

  • 网站的树结构
  • 深度优先算法和实现
  • 广度优先算法和实现

网站的树结构

通过伯乐在线网站为例子:

并且我们通过访问伯乐在线也是可以发现,我们从任何一个子页面其实都是可以返回到首页,所以当我们爬取页面的数据的时候就会涉及到去重的问题,我们需要将爬过的url记录下来,我们将上图进行更改

在爬虫系统中,待抓取URL队列是很重要的一部分,待抓取URL队列中的URL以什么样的顺序排队列也是一个很重要的问题,因为这涉及到先抓取哪个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面是常用的两种策略:深度优先、广度优先 

深度优先

深度优先是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续追踪链接,通过下图进行理解:

注:scrapy默认采用的是深度优先算法

这里是深度优先,所以这里的爬取的顺序式: A-B-D-E-I-C-F-G-H (递归实现)

深度优先算法的实现(伪代码):

广度优先

广度优先,有人也叫宽度优先,是指将新下载网页发现的链接直接插入到待抓取URL队列的末尾,也就是指网络爬虫会先抓取起始页中的所有网页,然后在选择其中的一个连接网页,继续抓取在此网页中链接的所有网页,通过下图进行理解:

还是以这个图为例子,广度优先的爬取顺序为: A-B-C-D-E-F-G-H-I (队列实现)

广度优先代码的实现(伪代码):

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发 & 算法杂谈

Coderbyte-Challenger之Letter Capitalize(单词字母大写)

Have the function LetterCapitalize(str) take the str parameter being passed and...

713
来自专栏HansBug's Lab

算法模板——KMP字符串匹配

功能:输入一个原串,再输入N个待匹配串,在待匹配串中找出全部原串的起始位置 原理:KMP算法,其实这个东西已经包含了AC自动机的思想(fail指针/数组),只不...

3315
来自专栏灯塔大数据

技术 | Python从零开始系列连载(二十五)

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

682
来自专栏Python专栏

数据结构图在python中的应用

1376
来自专栏达摩兵的技术空间

js实现01数字矩阵

802
来自专栏Python小屋

微课系列(一):Python列表remove()方法工作原理

1)在列表非尾部增加或删除元素时,该位置后面元素会向后移动或向前移动,保证元素之间没有缝隙,这样的话,这些元素的索引会发生变化。

774
来自专栏数据结构与算法

洛谷P3857 [TJOI2008]彩灯(线性基)

Peter女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们。从数学的角度看,这一排...

452
来自专栏小文博客

小文’s blog — 奇妙的数字 –《蓝桥杯代码笔记2》

1065
来自专栏GIS讲堂

“GIS讲堂”第十课—WEBGIS中的地图图例

图例是集中于地图一角或一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图。它具有双重任务,在编图时作为图解表示地图内容的准绳,用图时作为必不...

641
来自专栏生信宝典

R语言学习 - 热图美化

热图美化 上一期的绘图命令中,最后一行的操作抹去了之前设定的横轴标记的旋转,最后出来的图比较难看。 上次我们是这么写的 p <- p + xlab("samp...

3298

扫码关注云+社区