基于动态可分裂BloomFilter的网络爬虫URL去重方法

文档序号:8487847阅读:551来源:国知局
基于动态可分裂Bloom Filter的网络爬虫URL去重方法
【技术领域】
[0001] 本发明涉及一种网络爬虫的URL去重方法,该方法可用于实现大规模、分布式的 高性能网络爬虫应用,具体是一种基于动态可分裂Bloom Filter的网络爬虫URL去重方 法,属于互联网技术领域。
【背景技术】
[0002] 网络爬虫(Web Crawler)是很多互联网信息采集系统的重要组成部分,它以网页 的URL基础,能够依据一定的规则自动爬行互联网中的网页。由于互联网中的URL数量数 以亿计,并且不同URL之间相互链接,所以为了避免重复爬行相同的URL,网络爬虫在爬行 过程中需要判断当前待爬行URL是否已经被爬行过,该过程称为URL去重。实现URL去重 的关键在于,如何将已经爬行过的URL信息存储到一个集合中,并保证该集合具有良好的 查询性能。URL去重是否高效是影响信息采集系统效率的一个关键因素。
[0003] Bloom Filter是支持URL去重的一种有效解决方案。经典的Bloom Filter由1 个二进制数组和k个哈希映射函数(记为MapHash)组成,其结构如图1所示,它可用来快 速检测一个元素是否属于给定集合。图1是一个经典的Bloom Filter,其二进制数组长度 为12,用到3个哈希映射函数,当向该Bloom Filter插入xjt,首先用3个哈希映射函数 对Xi进行3次哈希计算,假定计算结果分别是0、3和6,则只需要把二进制数组中的第0位、 3位和6位置为1 ;插入&的过程与之类似。当查询x ^寸,同样用3个哈希映射函数对x i 进行3次哈希计算,然后查询二进制数组中的相应位是否都是1。由图可知,Xi在该Bloom Filter之中,而x k不在该Bloom Filter之中。若一个Bloom Filter的二进制数组长度为 m,则它的每一个哈希映射函数的值域都是S = {0, 1,2, ,哈希映射函数可以直接通 过常见的哈希函数(如MD5、SHA、MurmurHash、BKDRHash等)对m取模来实现。一般在向 一个数据集合插入某数据元素时,对应地在Bloom Filter中使用k个哈希映射函数对该数 据元素进行k次哈希计算,并且将二进制数组中以这k个哈希计算结果为下标的所有二进 制位置为1。那么,当查询某数据元素是否在数据集合中时,只需使用k个哈希映射函数对 该数据元素进行k次哈希计算,然后查看Bloom Filter的二进制数组中与这k个哈希计算 结果对应的二进制位的取值,只有当它们都为1时才判定该数据元素在集合中。总的来说, Bloom Filter是一个空间效率和时间效率都很高的数据结构。但是,如果某个元素经k次 哈希计算结果所对应的k个二进制位,已经被集合中之前插入的其他元素置为1时,查询该 元素时会发生假阳性误判。Bloom Filter的假阳性误判率的大小,主要取决于集合的大小、 二进制数组的长度以及哈希映射函数的个数等因素。
[0004] 目前已有的一些基于Bloom Filter的URL去重方案,在效率、可扩展性和性能等 方面存在欠缺。如Internet Archive爬虫使用32KB的Bloom Filter来存储每个网站的 所有URL。Apoide爬虫使用8KB的Bloom Filter来存储每个网站的所有URL,并且根据网 站域名的哈希值来决定某一条URL具体存储在哪一个Bloom Filter中。总的来说,这些方 案中的Bloom Filter组织方式相对比较固定。对于一些大型门户网站(如新浪网、新华 网等)而言,由于该域名下的URL数目众多,常常难以使用一个长度有限的固定大小Bloom Filter来存储;而对于一些小规模的网站,采用过大的Bloom Filter势必引起存储空间的 浪费。另外,一些对处理性能要求较高的信息采集系统,往往会在网络分布环境中同时部署 大量网络爬虫进行网页的并行爬行。针对这种应用场景中的URL去重问题,现有的Bloom Filter及它的一些改进方案大多难以适应。

【发明内容】

[0005] 发明目的:针对现有技术中存在的问题与不足,本发明提供了一种基于动态可 分裂Bloom Filter的网络爬虫URL去重方法。该方法的基础是一个动态可分裂Bloom Filter (简记DSBF),它与Interner Archive爬虫和Apoide爬虫中均勾负担URL存取任务 的固定结构Bloom Filter不同,而是具有可按需灵活分裂成多层的动态可扩展结构。基于 动态可分裂Bloom Filter实现网络爬虫URL去重,既可保证当已处理的URL数目不断增大 时,仍然能够把Bloom Filter的假阳性误判率控制在给定范围内,又能将让Bloom Filter 具有易于分布实现的灵活存储结构,从而更加适合于构造大规模、分布式、多网络爬虫的并 行处理环境,支持互联网海量网页信息的高效采集和处理。
[0006] 技术方案:一种基于动态可分裂Bloom Filter的网络爬虫URL去重方法,包括:
[0007] (1)动态可分裂Bloom Filter采用树状的分层存储结构,动态可分裂Bloom Filter中用到两种哈希函数,一种是经典Bloom Filter中的哈希映射函数,另一种是新引 入的哈希定位函数(记为LocHash)。树根(记为第0层)中存放一个哈希定位函数。在除树 根外的各层中,每一个叶结点中存放一个经典的Bloom Filter (称为叶片Bloom Filter), 它用于记录网络爬虫已经爬取过的URL信息;每一个非叶结点中存放一个哈希定位函数, 非叶结点通过它把URL进一步导向其下一层的对应子结点。在动态可分裂Bloom Filter 中,为支持叶结点的灵活分裂,每个叶片Bloom Filter都会关联一个URL集合,它的元素是 已经插入到该叶片Bloom Filter中的所有URL。基于动态可分裂Bloom Filter的网络爬 虫URL去重方法主要涉及4种操作,包括初始化、插入过程、分裂过程和查询过程等。
[0008] (2)动态可分裂Bloom Filter的初始化过程。首先,根据待处理的URL数目的预 估值,确定树的第一层结点的个数。计算方法如下:假设需要存储的URL个数为n,而每一 个叶片Bloom Filter中的二进制数组长度是m,并且要求假阳性误判率低于f。则动态可 分裂Bloom Filter的第一层的结点个数c :
【主权项】
1. 一种基于动态可分裂BloomFilter的网络爬虫URL去重方法,其特征在于,包括如 下步骤: (1) 首先要构造一个动态可分裂BloomFilter,它的各个叶片BloomFilter的二进 制数组采用Redis数据库进行存储,根据网络爬虫应用的规模和特征,确定适合叶片Bloom Filter的二进制数组的长度m,使之小于运行网络爬虫的计算机的内存大小; (2) 结合网络爬虫的应用需求和爬取策略,分析互联网中待爬网站及Web页面的组织 规律,从而预估网络爬虫应用所需处理的URL数量n;然后,根据m、n、以及假阳性误判率上 限f,计算出动态可分裂Bloom Filter的第一层结点个数c、每个叶片Bloom Filter所需 的哈希映射函数个数k以及它最大能存储的URL个数u; (3) 根据参数m的值,选取k个值域为{0,1,2,…,m-1}的哈希函数,它们充当第一层 c个叶片BloomFilter的哈希映射函数;同时,为动态可分裂BloomFilter的根结点选取 一个值域为{〇, 1
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1