网络爬虫中用到的宽度优先遍历算法

来源:互联网 发布:如何使用linux系统 编辑:程序博客网 时间:2024/05/25 23:25

最近学习自己动手写网络爬虫

书中涉及到了图的宽度优先遍历,其中很重要的一点是图的宽度优先遍历需要一个队列(队列的特点:先进先出)作为保存当前节点的子节点的数据结构。




以上图为例图的宽度优先遍历算法描述为:

    1.首先访问顶点A,将顶点A入队

    2.之后因为要访问A的邻接点,应先将A出队(我认为当要访问某个节点的邻接点时,应先将该节点从使其出队,之后访问该节点的邻接点),然后将A节点的邻接点B,C,D,E,F入队;

   3.因为队列先进先出,且还要依次访问队列中各节点的邻接点,所以将B出队,B无邻接点,于是C出队,C亦无无邻接点,于是D出队,同理应E出队,E有邻接点H,所以E出队后,H入队,因为宽度优先,所以应让与H处于同一层的G入队,但是G入队之前,应先使F出队,F出队之后,G入队;

   4.G入队之后,队列中有HG两个节点,此时H处于对头,将H出队,H的邻接点I入队,此时图中的所有节点均已进入过队列,便不再入队;

   5.队列中的节点为HI,将HI先后出队,H先出队,I后出队,之后队列为空。

整个过程中队列中节点的变化如下图:



这便相当于网络爬虫中的待抓取URL队列,队列为空后,爬虫便停止运行。

      上述内容如有错误望前辈们指正,谢谢!

原创粉丝点击