发明名称 一种分布式网络爬虫系统中的URL去重方法
摘要 本发明提供了一种分布式网络爬虫系统中的URL去重方法,通过引入虚拟爬行结点,实现了高效的任务划分策略,从而更好地适应分布式网络爬虫系统中实际爬行结点的动态变化,在任务划分策略基础上使用一种分布式的URL去重方式,从而避免实际爬行结点变化过程中造成的重复爬行。本发明在任务划分时变动规模小,能保证爬虫系统稳定持久运行,划分策略具有动态适应性,能实现实际爬行结点的负载均衡。采用多个布隆过滤器去重结构,减小了去重对内存大小的需求,可实现基于内存的快速去重,在需要时能高效转移和备份,防止由于去重信息缺失而造成爬虫系统重复爬行。本发明效率高,可操作性好,具有极高的应用价值。
申请公布号 CN102663058B 申请公布日期 2013.12.18
申请号 CN201210090259.0 申请日期 2012.03.30
申请人 华中科技大学 发明人 邹复好;凌贺飞;李平;刘学;邱荷花
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 华中科技大学专利中心 42201 代理人 朱仁玲
主权项 一种分布式网络爬虫系统中的URL去重方法,其特征在于,包括以下步骤:(1)当前爬行结点根据初始URL任务集进入网络爬行状态,并获取待处理URL任务集;(2)判断待处理URL任务集是否为空,若为空则过程结束,否则进入步骤(3);(3)从待处理URL任务集中获取URL任务;(4)对获取的URL任务进行哈希运算得到其对应的虚拟爬行结点号;(5)根据该虚拟爬行结点号,查找虚拟爬行结点与实际爬行结点的映射关系表,从而得到对应的实际爬行结点;(6)判断获取的URL任务是否属于当前爬行结点,如果是则进入步骤(9),否则转入步骤(7);(7)将获取的URL任务转发给实际爬行结点;(8)对于待处理URL任务集中的所有URL任务,重复上述步骤(2)至(7),直到所有URL任务均处理完毕为止;(9)对该URL任务进行哈希运算,以找到该URL任务所属的虚拟爬行结点,并找到对应的布隆过滤器去重结构;(10)对URL任务用K个哈希函数计算,以得到K个哈希值H[0],H[1],H[2],…,H[K‑1];(11)根据K个哈希值查找布隆过滤器去重结构的位数组中对应的第 H[0],H[1],H[2],…,H[K‑1]位,以判断第H[0],H[1],H[2],…,H[K‑1]位是否均为1,若均为1,则进入步骤(12),否则进入步骤(13);(12)丢弃该URL任务,然后转入步骤(14);(13)表明该URL任务不是处于当前爬行结点的URL任务集合中,将该URL任务加入当前爬行结点的待处理队列中;(14)将布隆过滤器去重结构的位数组中对应的第H[0],H[1],H[2],…,H[K‑1]位全部置1;(15)判断是否有实际爬行结点退出,若有则转入步骤(16),否则转入步骤(25);(16)设定退出的实际爬行结点所映射的虚拟爬行结点集合为S,S中虚拟爬行结点个数记为vz;(17)将剩余的实际爬行结点按照其所映射的虚拟爬行结点数从小到大排序,剩余的实际爬行结点个数记为rz;(18)初始化计数器i和计数器j均为0,其中i指向排序后的实际爬行结点集合中第i+1个实际爬行结点,j指向虚拟爬行结点集合S中第j+1个虚拟爬行结点;(19)判断j是否等于vz,若是则转入步骤(25),否则转入步骤(20);(20)从虚拟爬行结点集合S中取出第j+1个虚拟爬行结点,并将其加入到第i+1个实际爬行结点所映射的虚拟爬行结点集合中;(21)设置i=i+1,j=j+1;(22)判断i是否等于rz,若是则转入步骤(23),否则转入步骤(24);(23)将i值置0;(24)重复上述步骤(19)至(23),直到j值等于vz为止;(25)判断是否有新的实际爬行结点加入,若有则转入步骤(26),否则返回步骤(2);(26)设定average=N/M,M为加入新实际爬行结点后实际爬行结点的总数,N为系统的虚拟爬行节点数,设定新实际爬行结点所映射的虚拟爬行结点集合为Q,其初始为空;(27)将原有实际爬行结点按照映射的虚拟爬行结点数从大到小排序;(28)初始化计数器s和t均为0,其中s指向排序后的实际爬行结点集合中第s+1个实际爬行结点,t为虚拟爬行结点集合Q中虚拟爬行结点个数;(29)判断t是否等于average,若是则返回步骤(2),否则转入步骤(30);(30)从第s+1个实际爬行结点所映射的虚拟爬行结点集合中取出一个虚拟爬行结点加入到Q中,并设置t=t+1,s=s+1;(31)判断s值是否等于M‑1,若是则转入步骤(32),否则转入步骤(33);(32)将s值置0;(33)重复执行上述步骤(29)至(32),直到t等于average为止。
地址 430074 湖北省武汉市洪山区珞喻路1037号