c 抓取网页数据(学过网站设计之深度优先算法的主要思想和思想介绍)

优采云 发布时间: 2022-01-23 22:11

  c 抓取网页数据(学过网站设计之深度优先算法的主要思想和思想介绍)

  学过网站设计的都知道网站通常是分层设计的。最上层是顶级域名,其次是子域名,然后是子域名下的子域名,以此类推。同时,每个子域也可能有多个同级域名,URL之间可能存在链接,形成一个复杂的网络。

  

  当一个网站有很多URL时,一定要设计好URL,否则在后面的理解、维护或开发过程中会很混乱。了解了上面的网页结构设计之后,现在正式介绍网络爬虫中的深度优先算法。

  

  上图是一个二叉树结构。通过遍历这棵二叉树,我们可以类比爬取网页,加深对爬虫策略的理解。深度优先算法的主要思想是首先从顶级域名A开始,然后从中提取两个链接B和C。链接B被爬取后,下一个要爬取的链接是D或E,而不是爬取。获取链接B后,立即去获取链接C。爬取链接D后,发现链接D中的所有URL都被访问过。在此之前,我们建立了一个访问过的 URL 列表,专门用于存储访问过的 URL。当链接 D 完全爬取完成后,接下来会爬取链接 E。链接E爬取完成后,不再爬取链接C,而是继续深度爬取链接I。原理是链接会一步步往下爬,只要链接下有子链接,而子链接还没有被访问过,这就是深度优先算法的主要思想。深度优先算法是让爬虫在爬取完成后一步一步往下走,然后一步一步往后退,优先考虑深度。了解了深度优先算法后,再看上图,可以看到二叉树呈现的爬取链接的顺序是:A、B、D、E、I、C、F、G、H(这里, 左边的链接假定​​会先被爬取)。事实上,在网络爬虫的过程中,我们多次使用这个算法来实现。其实我们常用的 Scrapy 爬虫框架也是默认用这个算法实现的。通过以上了解,

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

  

  深度优先过程实际上是以递归方式实现的。看上图中的代码,先定义一个函数来实现深度优先的过程,然后传入node参数。如果节点不为空,则打印出来,可以对比二叉树的顶层点A。打印完节点后,查看是否有左节点(链接B)和右节点(链接C),如果左节点不为空,则返回,再次调用深度优先函数本身进行递归,得到一个新的左节点(链接D)和右节点(链接E),等等,直到遍历所有节点或达到给定条件才会停止。右节点的实现过程也是一样的,这里不再赘述。

  

  深度优先过程是通过递归实现的。当递归继续而没有跳出递归或者递归太深时,很容易造成栈溢出,所以在实际应用过程中需要注意这一点。

  深度优先算法和广度优先算法是数据结构中非常重要的算法结构,也是非常常用的算法,也是面试过程中非常常见的面试题,所以建议大家需要掌握. 下一篇文章我们将介绍广度优先算法,敬请期待。

  

  以上就是网络爬虫中深度优先算法的简单介绍。你们明白了吗?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线