网页标识抓取方法

文档序号:6651688阅读:146来源:国知局
专利名称:网页标识抓取方法
技术领域
本发明涉及互联网系统中的搜索引擎技术领域,尤其是涉及一种网页标识抓取方法。
背景技术
搜索引擎技术是近些年来非常热门的网络搜索技术,以其为核心基础的网页搜索、新闻搜索、音乐搜索、图片搜索和地图搜索等技术都分别具有较大的实用价值和商业价值。其中爬虫子系统(Crawler,指搜索引擎系统中负责抓取互联网原始数据资源的子系统)是搜索引擎系统中一个非常重要的组成部分,它的作用是为搜索引擎系统提供最原始的互联网数据来源,如提供网页、mp3、图片、电子邮件、文档或软件资源等等,来极大的扩展搜索引擎技术在各种场合下的应用。其中设计良好、结构合理的crawler是实现搜索性能优越的搜索引擎技术的前提条件和基础。
其中crawler通过如下的基本工作过程来实现在搜索引擎系统中抓取互联网原始数据资源crawler初始运行时,会首先抓取搜索引擎系统预先指定的种子统一资源定位符(URL,Uniform Resource Locator);然后通过对抓取到的URL所对应的网页内容进行分析,来提取其中的链接URL,并进而抓取这些链接URL,如此循环往复下去,直到抓取到搜索引擎系统预先所定义的规模数目的URL。
在上述crawler的工作过程中,需要判断各个准备抓取的URL是否在前面的抓取处理过程中已被抓取过,因为如果不对准备抓取的URL判断是否抓取过,而是对每个URL直接抓取,这样势必会造成循环多次抓取链接相互指向的网页内容,由此将会对整个搜索引擎系统资源造成极大的浪费,而且由于链接相互指向的URL会产生陷阱,由此可能会导致crawler在抓取URL的处理过程中掉进URL陷阱中,造成crawler不能抓取到更多的URL,这样将直接影响到搜索引擎的处理能力。
综上可见,在crawler的工作过程中不可避免的就会面临一个如何对准备抓取的URL判断是否为已被抓取的URL的问题,即如何判断某个URL是否在已经抓取的URL集合中,已经成为搜索引擎技术开发过程中面临的一个非常重要的技术问题。
其中如何判断某个URL是否在已被抓取的URL集合中,其实现难点在于已被抓取的URL集合包含URL的海量性和判断的快速性,这个已被抓取的URL集合包含的URL数量可能高达几亿甚至几十亿的级别(具体数量由互联网中包括的网页数量来决定,目前大致在百亿级别左右)。这样判断一个URL是否属于这个集合,就需要具有非常高的判断速度,如何使搜索引擎系统能够承担这样高速的判断速度,是搜索引擎技术开发过程中所面临的技术难点。
同时由于URL是以字符串形式存在的,这样如果只是通过单纯的比较用以表示URL的字符串是否相同来判断URL是否相同,将会导致判断效率非常的低。因此现在一般的处理办法是将URL字符串利用某种哈希算法计算转换成为一个64位的哈希数(包括32位的CNAME哈希数和32位的URL哈希数),这样不同URL字符串之间的比较问题就可以转换成为哈希数的比较问题,并且大致可以认为哈希数相同的URL,其字符串形式也是相同的,这样就可以较好的提高判断效率。同时由于64位哈希数的范围是0-1.8446×1019,所以对于不符合上述观点的例外情况可以从概率学上给予忽略。
目前在crawler的工作过程中,通常通过如下实现方式来判断一个URL是否在已被抓取的URL集合中,从而确定是否对这个URL进行抓取针对每个指定的URL,采用多哈希函数组合方式来生成对应的判决向量,并使用该对应的判决向量来判断该指定的URL是否在已抓取过的URL集合中,但是采用判决向量进行判断会造成一定程度的误判,如果要减小误判的发生概率,就需要选取多种性能良好的哈希函数进行组合,并且要求生成级数较大的判决向量,这样将使得判断URL是否在已抓取过的URL集合中的处理过程非常的耗时,并且级数较大的判决向量也会占用较多的内存。

发明内容
本发明要解决的技术问题在于提出一种网页标识抓取方法,以提高判断准备抓取的网页标识是否在已抓取的网页标识集合中的速度,并减少网页标识的抓取过程对内存资源的过多占用。
为解决上述问题,本发明提出的技术方案如下一种网页标识抓取方法,设置第一存储结构,用于存储规定数目的最新抓取的网页标识哈希值;和第二存储结构,用于存储所有已抓取的网页标识哈希值,所述第二存储结构包括初始子存储结构和分别对应初始子存储结构中每个节点的冲突避免子存储结构;针对每个欲抓取的网页标识执行步骤A、根据网页标识的哈希值计算第一存储结构的对应节点索引值;B、判断网页标识的哈希值与根据本次计算的节点索引值在第一存储结构中索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识;否则使用网页标识的哈希值更新本次索引到的节点中存储的内容,并C、根据网页标识的哈希值计算初始子存储结构的对应节点索引值;D、判断根据本次计算的节点索引值在初始子存储结构中索引到的节点中存储的内容是否为零,如果是,将网页标识的哈希值存储到本次索引到的节点中;否则判断网页标识的哈希值与本次索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识;否则E、判断网页标识的哈希值与本次索引到的节点所对应的冲突避免子存储结构中存储的内容是否存在相同情况,如果是,放弃抓取网页标识;否则将网页标识的哈希值存储到本次索引到的节点所对应的冲突避免子存储结构的对应节点中。
较佳地,所述存储结构为表存储结构。
较佳地,所述存储结构为树型存储结构。
较佳地,所述步骤A具体包括步骤A1、基于网页标识的哈希值对第一表存储结构包含的表项总数取余;并A2、将取余得到的余数值作为在第一表存储结构中的对应节点索引值。
较佳地,所述步骤C具体包括步骤C1、基于网页标识的哈希值对初始子表存储结构包含的表项总数取余;并C2、将取余得到的余数值作为在初始子表存储结构中的对应节点索引值。
较佳地,所述步骤C和D之间还包括步骤C-1、将网页标识的哈希值和计算的节点索引值进行关联缓存;并C-2、判断缓存的节点索引值个数是否达到规定个数,如果是,对于每组关联缓存的网页标识哈希值和节点索引值执行D;否则C-3、回至A继续执行对下一网页标识的抓取处理。
较佳地,所述步骤C-2中还包括在判断结果为是时,对缓存的节点索引值进行排序处理的步骤。
较佳地,所述步骤C-2中按照排序顺序,依次对每组关联缓存的网页标识哈希值和节点索引值执行D。
较佳地,通过地址偏移方式将初始子存储结构中的每个节点和相应冲突避免子存储结构进行关联对应。
较佳地,所述步骤E中基于地址偏移方式判断网页标识的哈希值与冲突避免子存储结构中存储的内容是否存在相同情况,并将网页标识的哈希值存储到冲突避免子存储结构的对应节点中。
较佳地,所述第二存储结构包括至少两个初始子存储结构,每个初始子存储结构分别用于存储不同范围内的已抓取的网页标识哈希值。
较佳地,所述第一存储结构设置在内存中;所述第二存储结构设置在磁盘中。
较佳地,所述网页标识为统一资源定位符。
本发明能够达到的有益效果如下本发明方案通过经由第一存储结构的判断处理,可以识别出大部分已抓取的网页标识,从而使得真正到第二存储结构中进行判断的网页标识数量大大减少,而同时在第二存储结构中的初始子存储结构中判断出现哈希冲突时,直接到对应的冲突避免子存储结构中进行哈希冲突问题的解决,而无需对初始子存储结构进行频繁的修改和重建,因此较好的提高了判断准备抓取的网页标识是否在已抓取的网页标识集合中的速度,从而相应提高了对网页标识抓取的处理速度,并较好的减少了网页标识的抓取过程对内存资源的过多占用。
此外,本发明方案对在第二存储结构中的初始子存储结构中进行网页标识判断处理时,提出缓存每个判断命令对应得到的节点索引值,只有在缓存的节点索引值到达一定数量后,才对缓存的节点索引值对应的各个判断命令执行有序的批量处理,从而也提高了判断准备抓取的网页标识是否在已抓取的网页标识集合中的速度,由此相应提高了对网页标识抓取的处理速度。


图1为本发明网页标识抓取方法的主要实现原理流程图;图2为应用于本发明方法原理进行实施的实施例中,预先设置的三张哈希映射表对欲抓取的URL进行判断处理的顺序示意图;图3为应用本发明方法原理进行实施的实施例中,使用磁盘哈希冲突映射表来解决在磁盘哈希映射表中所发生的哈希冲突的处理过程示意图;图4为应用本发明方法原理实施的实施例中,对命中的每个URL哈希值进行判断处理及抓取URL的处理过程流程图。
具体实施例方式
下面将结合各个附图对本发明的主要实现原理、具体实施过程及有益效果进行详细的阐述。
请参照图1,该图是本发明网页标识抓取方法的主要实现原理流程图,其中在本发明方法的实现过程中,需要预先设置至少一个第一存储结构,用来存储规定数目的最新近抓取过的网页标识哈希值,较佳地,要求将该设置的第一存储结构设置于处理速度较高、价格较贵的存储介质中,如内存等存储介质;还同时需要设置至少一个第二存储结构,用来存储所有已经抓取过的网页标识哈希值,其中该设置的第二存储结构进一步包括初始子存储结构和分别对应该初始子存储结构中每个节点的冲突避免子存储结构,其中可以通过地址偏移方式来将初始子存储结构中的每个节点和相应的冲突避免子存储结构进行关联对应,并且分别对应初始子存储结构中每个节点的各个冲突避免子存储结构可以是连接在一起的整体存储结构、也可以是分别独立的存储结构,较佳地,要求将该设置的第二存储结构设置于处理速度不是相当高、且价格较便宜的存储介质中,如磁盘、硬盘等存储介质;其中第一存储结构和第二存储结构中包括的初始子存储结构和冲突避免子存储结构可以分别采用表存储结构,也可以分别采用树型存储结构。此外设置的第二存储结构可以包括至少两个初始子存储结构,其中每个初始子存储结构分别用来存储不同范围内的已抓取过的网页标识哈希值。
基于上述预先设置好的第一存储结构和第二存储结构,后续针对每个欲抓取的网页标识,就可以执行如下处理过程步骤S10,将网页标识利用某种哈希算法计算转换成为对应的哈希值,并根据计算得到的网页标识哈希值来进而计算在第一存储结构中的对应节点索引值;下面以第一存储结构采用表存储结构为例,对根据网页标识哈希值计算在第一存储结构中的对应节点索引值的过程进行说明
首先,基于网页标识的哈希值对第一表存储结构所包含的表项总数进行取余处理;然后就可以将上述取余处理后得到的余数值作为在第一表存储结构中的对应节点索引值。
步骤S20,根据上述在步骤S10中计算得到的节点索引值,在第一存储结构中索引得到对应节点。
步骤S30,判断网页标识的哈希值与上述在步骤S20中索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识,准备执行对下一网页标识的抓取处理;否则执行步骤S40。
步骤S40,使用网页标识的哈希值来更新上述在步骤S20中索引到的节点中存储的内容,达到抓取网页标识的目的。
步骤S50,进一步根据网页标识的哈希值来计算在初始子存储结构中的对应节点索引值;同理,下面以初始子存储结构采用表存储结构为例,对根据网页标识哈希值计算在初始子存储结构中的对应节点索引值的过程进行说明首先,基于网页标识的哈希值对初始子表存储结构所包含的表项总数进行取余处理;然后将上述取余处理后得到的余数值作为在初始子表存储结构中的对应节点索引值。
步骤S60,根据上述在步骤S50中计算得到的节点索引值,在初始子存储结构中索引到对应节点。
步骤S70,判断上述在步骤S60中索引到的节点中存储的内容是否为零,如果是,执行步骤S80;否则执行步骤S90。
步骤S80,将网页标识的哈希值存储到上述在步骤S60中索引到的节点中,达到抓取网页标识的目的。
步骤S90,判断网页标识的哈希值与上述在步骤S60中索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识,准备执行对下一网页标识的抓取处理;否则执行步骤S100。
步骤S100,判断网页标识的哈希值与上述在步骤S60中索引到的节点所对应的冲突避免子存储结构中存储的内容是否存在相同情况,如果是,放弃抓取网页标识,准备执行对下一网页标识的抓取处理;否则执行步骤S110。
步骤S110,将网页标识的哈希值存储到上述在步骤S60中索引到的节点所对应的冲突避免子存储结构的对应节点中,达到抓取网页标识的目的。
其中在上述步骤S100和S110中,可以基于地址偏移方式来判断网页标识的哈希值与对应冲突避免子存储结构中存储的内容是否存在相同情况,并实现将网页标识的哈希值存储到对应冲突避免子存储结构的对应节点中。
此外,为了提高在第二存储结构中(尤其是在初始子存储结构中)的判断速度,较佳地,可以选择将欲判断处理的个数积累到一定程度,然后对积累下来的各个判断处理进行批量处理,由此来提高在第二存储结构中(尤其是在初始子存储结构中)的判断处理速度。这样在上述处理过程中,在步骤S50和S60之间就还要增加如下处理进程将网页标识的哈希值和计算得到的对应节点索引值进行关联缓存;并判断上述缓存的节点索引值个数是否达到规定的个数,如果是,对上述缓存的各个节点索引值进行排序处理,并按照排序结果顺序,依次对每组关联缓存的网页标识哈希值和对应的节点索引值执行后续步骤S60及其之后的处理;否则回至上述步骤S10中继续执行对下一网页标识的抓取处理。
其中在本发明方法的上述处理过程中所提及的网页标识可以但不限于为统一资源定位符URL。
下面将以一个具体实施例的具体实施过程来详细阐述本发明方法的主要实现原理。
本实施例通过对每个欲抓取的URL,分别经由内存哈希映射表(对应于上述本发明原理中所阐述的第一存储结构)、磁盘哈希映射表(对应于上述本发明原理中所阐述的初始子存储结构)和磁盘哈希冲突映射表(对应于上述本发明原理中所阐述的冲突避免子存储结构)的判断处理,来决定是否对每个欲抓取的URL进行抓取,并在磁盘哈希映射表的判断过程中结合批量处理和磁头偏移等处理方式,从而较好的提高判断准备抓取的URL是否在已抓取的URL集合中的速度,并减少URL的抓取过程对内存资源的过多占用。
请参照图2,该图是应用于本发明方法原理进行实施的实施例中,预先设置的三张哈希映射表对欲抓取的URL进行判断处理的顺序示意图,其中hashmap in disk是磁盘哈希映射表,hash map in memory(cache)是内存哈希映射表(以下将简称cache)、conflict map in disk是磁盘哈希冲突映射表。在抓取URL的过程中,对于任何URL判断请求,都需要先到内存哈希映射表中进行查找,如果找到相同URL哈希值,则表明该URL已经抓取过;如果没有找到相同的URL哈希值,则进而到磁盘哈希映射表中进行查找,并更新内存哈希映射表中的URL哈希值记录。如果在磁盘哈希映射表中经查找发现存在有哈希冲突,则进而通过磁盘哈希冲突映射表来解决所发生的URL哈希冲突情况,详细过程将在后续过程进行说明。
首先介绍内存哈希映射表的属性首先要在内存中生成一个大容量(如表项包含有16777213项)的内存哈希映射表,表结构为64位的哈希值,表项共为16777213项(接近于224=16777216的一个大质数),则内存哈希映射表的总共容量为64×16777213/8/1024/1024=128MBytes。
其中表项的寻址方式以URL的64位哈希值对16777213取余作为内存哈希映射表的索引值(对应于上述本发明原理中所阐述的节点索引值)。例如某个URL的64位哈希值为64539945249362485,则根据这个URL哈希值可以确定内存哈希映射表的表项索引值为64539945249362485%16777213=4821311,即针对该URL哈希值,需查找内存哈希映射表中的第4821311项,并对该项中的64位哈希值进行处理。内存哈希映射表的表项取16777213项而不取16777216项的原因在于以大质数作模的话,能极大地减少根据不同URL哈希值而索引到相同表项的冲突情况的发生概率(即尽量避免不同64位哈希值对上述大质数取余后得到相同余数的情况发生)。其中内存哈希映射表的各表项中存储的64位哈希值的初始值均为零。
设立大容量cache的好处在于可以用于记录一段范围内的历史URL抓取情况,对于新来的URL判断请求,如果发现在cache中已经记录,即可迅速做出判断结果为URL已经抓取过,可以放弃重复抓取,而不用到磁盘哈希映射表中真正去判断是否存在相同的URL哈希值,这样可以极大地节省判断时间,提高URL的抓取效率。
对于新来的URL判断请求,根据其URL的64位哈希值,计算在cache中的表项索引值,根据计算得到的表项索引值在cache中索引到对应的表项,并比较URL哈希值和该索引到的表项中存储的64位哈希值是否相同,如果相同,则表明该URL以前抓取过;如果不相同,则将该URL的64位哈希值保存在该索引到的表项中,并将该URL哈希值转到磁盘哈希映射表中去作进一步的判断处理。实际试验数据表明,通过cache命中的URL判断请求可能占总URL判断请求比例的85%以上,对提高判断效率和URL的抓取效率起到了非常好的作用。
接下来介绍磁盘哈希映射表的属性在磁盘中生成一个大容量的磁盘哈希映射表,表结构由64位的哈希值和32位的用以解决哈希冲突的偏移地址组成,表项共有67108859(接近于226=67108864的一个大质数),则磁盘哈希映射表的总共容量为(64+32)×67108859/8/1024/1024=768MBytes。
其中表项的寻址方式以URL的64位哈希值对67108859取余作为磁盘哈希映射表的索引值((对应于上述本发明原理中所阐述的节点索引值)。例如某个URL的64位哈希值为64539945249362485,则根据这个URL哈希值可以确定在磁盘哈希映射表中的表项索引值为64539945249362485%67108859=17219544,即针对该URL值,需要查找磁盘哈希映射表中第17219544项,并对该项中的64位哈希值进行处理。磁盘哈希映射表的表项取67108859项而不取67108864项的原因在于以大质数作模的话,能极大地减少根据不同URL哈希值而索引到相同表项的冲突情况的发生概率(即尽量避免不同64位哈希值对上述大质数取余后得到相同余数的情况发生)。其中磁盘哈希映射表的各表项中存储的64位哈希值和用以解决哈希冲突的偏移地址的初始值均为零。
如果抓取范围内的URL数量太多的话,可以在磁盘中生成多个这样的磁盘哈希映射表,每张表分别分担不同范围内的URL集合,这样可以实现磁盘哈希映射表良好的可伸缩性。
对于新来的URL判断请求,根据其URL的64位哈希值,计算在磁盘哈希映射表中的表项索引值,并根据计算得到的表项索引值在磁盘哈希映射表中索引到对应的表项,如果索引到的表项中所保存的内容为零,则表明该URL没有被抓取过,将该URL哈希值保存在该索引到的表项中;如果索引到的表项中所保存的内容不为零,则比较URL哈希值和索引到的表项中保存的64位哈希值是否相同,如果两哈希值相同且不为零,则表明该URL以前被抓取过,放弃对该URL进行抓取;如果两哈希值不相同且不为零,则表明出现哈希冲突,这样就将会利用后续的磁盘哈希冲突映射表来解决出现的哈希冲突情况,并更新磁盘哈希映射表中该索引到的表项对应的偏移地址。
同时,由于对以前没有抓取过的URL进行判断过程中,因为对内存哈希映射表操作很快,并且利用磁盘哈希冲突映射表来解决出现的哈希冲突情况也比较少,所以这样就导致大部分的判断时间都消耗在对磁盘哈希映射表的处理操作上。其中磁头频繁的偏移导致磁盘哈希映射表的读写速度成为整个搜索引擎系统速度缓慢的瓶颈所在,并且随着磁盘哈希映射表表项数目的增长,这种情况将会更加严重。
利用本发明方法原理,这里在实施本实施例的过程中,可以采取将对每个欲抓取的URL的64位哈希值取余后得到的表项索引值进行缓存,直到数量达到65536个,再对缓存的表项索引值进行快速排序,然后按照排序顺序批量对缓存的URL判断请求进行判断处理。这样对于磁头而言,是一次顺序偏移,将大大减少随机访问的偏移时间和位移,因此大幅度提高了URL的判断速度。
最后介绍磁盘哈希冲突映射表的属性尽管采用很多方法都能降低哈希冲突的发生概率,但是却无法完全避免哈希冲突的发生。为了解决在前述磁盘哈希映射表中所发生的哈希冲突问题,需要在磁盘哈希映射表后,设置一个可变长度的磁盘哈希冲突映射表,表结构同磁盘哈希映射表一样,由64位的哈希值和32位的用以解决哈希冲突的偏移地址组成,并且64位的用以存储哈希值的表项和32位的用以解决哈希冲突的偏移地址项初始值均为零。
请参照图3,该图是应用本发明方法原理进行实施的实施例中,使用磁盘哈希冲突映射表来解决在磁盘哈希映射表中所发生的哈希冲突的处理过程示意图,其中当在前述磁盘哈希映射表中对欲抓取的URL哈希值进行判断处理时,若出现哈希冲突情况,则需要在磁盘哈希冲突映射表尾部追加一项,填入该欲抓取的URL的64位哈希值,并在磁盘哈希映射表中对应发生哈希冲突的表项后的用以解决哈希冲突的偏移地址项中填入新增加的用于解决哈希冲突表项的地址。如图3,在磁盘哈希映射表中的0018表项中出现了一次哈希冲突(即欲判断的URL哈希值和该0018表项中存储的64位哈希值不相同),则需要在磁盘哈希冲突映射表中增加一项01B2FE00,并将该欲抓取的URL的哈希值存放在该新增加的表项01B2FE00中,并在磁盘哈希映射表的0018表项后面对应的偏移地址项中写入偏移地址01B2FE00,用于指向磁盘哈希冲突映射表的相应表项;又如在磁盘哈希映射表中的0030表项中出现了哈希冲突(即欲判断的URL哈希值和该0030表项中存储的64位哈希值不相同),通过该0030表项后面的对应偏移地址项中记录的偏移地址01B2FE0C,转到磁盘哈希冲突映射表中的01B2FE0C项,判断欲抓取的URL的哈希值和磁盘哈希冲突映射表中01B2FE0C项存储的64位哈希值是否相同,如果相同,则放弃对该URL进行抓取,否则在磁盘哈希冲突映射表中01B2FE0C项下面再增加一项01B2FE18,并将欲抓取的URL的哈希值记录在新增加的表项01B2FE18中,并在01B2FE0C项后面对应的偏移地址项中填入01B2FE18,用以指向磁盘哈希冲突映射表中的01B2FE18项,以上这种情况可以称之为二次哈希冲突的解决。同理,本发明方法可以解决多次哈希冲突的情况发生。
如果在磁盘哈希映射表中对欲抓取的URL进行判断时,没有发生哈希冲突问题,则直接在对应表项后面的偏移地址项中填入零,整个磁盘哈希冲突映射表的表项总数与出现哈希冲突的次数一样。由于其它一些辅助方法,使得哈希冲突情况的发生概率并不是很高,所以在实际运行过程中磁盘哈希冲突映射表所占用的运行空间相对较小。
基于上述创建的三张哈希映射表,对命中的每个URL哈希值进行判断处理及抓取URL的处理过程如图4所示步骤S120,命中欲抓取的URL;步骤S130,根据命中的URL的哈希值计算在cache映射表中的表项索引值;步骤S140,根据上述计算得到的表项索引值在cache映射表中索引到对应的表项;步骤S150,判断命中的URL的哈希值是否和上述索引到的表项中存储的64位哈希值相同,如果是,确认已经抓取过该URL,继续下一URL的抓取处理;否则步骤S160,使用该命中的URL的哈希值更新上述索引到的表项中存储的哈希值;并步骤S170,根据命中的URL的哈希值计算在磁盘哈希映射表中的表项索引值;步骤S180,缓存上述命中的URL的哈希值和对应计算得到的在磁盘哈希映射表中的表项索引值;
步骤S190,判断缓存的表项索引值数量是否达到65536个,如果是,对缓存的表项索引值进行快速排序处理,并按照排序顺序,依次对每组缓存的URL哈希值和表项索引值执行下述步骤S200的处理;否则回至步骤S120继续对下一欲抓取的URL进行抓取处理;步骤S200,根据缓存的表项索引值在磁盘哈希映射表中索引到对应的表项;步骤S210,判断上述索引到的表项中存储的内容是否为零,如果是,确认没有抓取过该URL,将该URL的哈希值存储到索引到的表项中;否则步骤S220,判断命中的URL的哈希值和上述索引到的表项中存储的内容是否相同,如果是,确认已经抓取过该URL,继续下一URL的抓取处理;否则步骤S230,确认命中的URL的哈希值和上述在磁盘哈希映射表中索引到的表项中存储的哈希值不相同且不为零,表明出现哈希冲突,通过该索引到的表项中后面对应的偏移地址项中记录的偏移地址到磁盘哈希冲突映射表的对应项中解决哈希冲突;步骤S240,判断命中的URL的哈希值和磁盘哈希冲突映射表中对应项存储的哈希值是否存在相同情形,如果是,确认已经抓取过该URL,继续下一URL的抓取处理;否则步骤S250,通过地址偏移方式将命中的URL的哈希值存储到磁盘哈希冲突映射表的对应表项中。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种网页标识抓取方法,其特征在于,设置第一存储结构,用于存储规定数目的最新抓取的网页标识哈希值;和第二存储结构,用于存储所有已抓取的网页标识哈希值,所述第二存储结构包括初始子存储结构和分别对应初始子存储结构中每个节点的冲突避免子存储结构;针对每个欲抓取的网页标识执行步骤A、根据网页标识的哈希值计算第一存储结构的对应节点索引值;B、判断网页标识的哈希值与根据本次计算的节点索引值在第一存储结构中索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识;否则使用网页标识的哈希值更新本次索引到的节点中存储的内容,并C、根据网页标识的哈希值计算初始子存储结构的对应节点索引值;D、判断根据本次计算的节点索引值在初始子存储结构中索引到的节点中存储的内容是否为零,如果是,将网页标识的哈希值存储到本次索引到的节点中;否则判断网页标识的哈希值与本次索引到的节点中存储的内容是否相同,如果是,放弃抓取网页标识;否则E、判断网页标识的哈希值与本次索引到的节点所对应的冲突避免子存储结构中存储的内容是否存在相同情况,如果是,放弃抓取网页标识;否则将网页标识的哈希值存储到本次索引到的节点所对应的冲突避免子存储结构的对应节点中。
2.如权利要求1所述的方法,其特征在于,所述存储结构为表存储结构。
3.如权利要求1所述的方法,其特征在于,所述存储结构为树型存储结构。
4.如权利要求2所述的方法,其特征在于,所述步骤A具体包括步骤A1、基于网页标识的哈希值对第一表存储结构包含的表项总数取余;并A2、将取余得到的余数值作为在第一表存储结构中的对应节点索引值。
5.如权利要求2所述的方法,其特征在于,所述步骤C具体包括步骤C1、基于网页标识的哈希值对初始子表存储结构包含的表项总数取余;并C2、将取余得到的余数值作为在初始子表存储结构中的对应节点索引值。
6.如权利要求1所述的方法,其特征在于,所述步骤C和D之间还包括步骤C-1、将网页标识的哈希值和计算的节点索引值进行关联缓存;并C-2、判断缓存的节点索引值个数是否达到规定个数,如果是,对于每组关联缓存的网页标识哈希值和节点索引值执行D;否则C-3、回至A继续执行对下一网页标识的抓取处理。
7.如权利要求6所述的方法,其特征在于,所述步骤C-2中还包括在判断结果为是时,对缓存的节点索引值进行排序处理的步骤。
8.如权利要求7所述的方法,其特征在于,所述步骤C-2中按照排序顺序,依次对每组关联缓存的网页标识哈希值和节点索引值执行D。
9.如权利要求1所述的方法,其特征在于,通过地址偏移方式将初始子存储结构中的每个节点和相应冲突避免子存储结构进行关联对应。
10.如权利要求1所述的方法,其特征在于,所述步骤E中基于地址偏移方式判断网页标识的哈希值与冲突避免子存储结构中存储的内容是否存在相同情况,并将网页标识的哈希值存储到冲突避免子存储结构的对应节点中。
11.如权利要求1所述的方法,其特征在于,所述第二存储结构包括至少两个初始子存储结构,每个初始子存储结构分别用于存储不同范围内的已抓取的网页标识哈希值。
12.如权利要求1所述的方法,其特征在于,所述第一存储结构设置在内存中。
13.如权利要求1所述的方法,其特征在于,所述第二存储结构设置在磁盘中。
14.如1~13任一权利要求所述的方法,其特征在于,所述网页标识为统一资源定位符。
全文摘要
本发明公开了一种网页标识抓取方法,包括设置第一存储结构,用于存储规定数目的最新抓取的网页标识哈希值;和第二存储结构,用于存储所有已抓取的网页标识哈希值,第二存储结构包括初始子存储结构和分别对应初始子存储结构中每个节点的冲突避免子存储结构;其中对于在初始子存储结构中发生冲突的网页标识哈希值通过对应的冲突避免子存储结构来解决哈希冲突问题。本发明可以提高判断准备抓取的网页标识是否在已抓取的网页标识集合中的速度,并减少网页标识的抓取过程对内存资源的过多占用。
文档编号G06F17/30GK1991830SQ20051013542
公开日2007年7月4日 申请日期2005年12月28日 优先权日2005年12月28日
发明者杨卫 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1