專(zhuān)利名稱(chēng):網(wǎng)頁(yè)標(biāo)識(shí)抓取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)系統(tǒng)中的搜索引擎技術(shù)領(lǐng)域,尤其是涉及一種網(wǎng)頁(yè)標(biāo)識(shí)抓取方法。
背景技術(shù):
搜索引擎技術(shù)是近些年來(lái)非常熱門(mén)的網(wǎng)絡(luò)搜索技術(shù),以其為核心基礎(chǔ)的網(wǎng)頁(yè)搜索、新聞搜索、音樂(lè)搜索、圖片搜索和地圖搜索等技術(shù)都分別具有較大的實(shí)用價(jià)值和商業(yè)價(jià)值。其中爬蟲(chóng)子系統(tǒng)(Crawler,指搜索引擎系統(tǒng)中負(fù)責(zé)抓取互聯(lián)網(wǎng)原始數(shù)據(jù)資源的子系統(tǒng))是搜索引擎系統(tǒng)中一個(gè)非常重要的組成部分,它的作用是為搜索引擎系統(tǒng)提供最原始的互聯(lián)網(wǎng)數(shù)據(jù)來(lái)源,如提供網(wǎng)頁(yè)、mp3、圖片、電子郵件、文檔或軟件資源等等,來(lái)極大的擴(kuò)展搜索引擎技術(shù)在各種場(chǎng)合下的應(yīng)用。其中設(shè)計(jì)良好、結(jié)構(gòu)合理的crawler是實(shí)現(xiàn)搜索性能優(yōu)越的搜索引擎技術(shù)的前提條件和基礎(chǔ)。
其中crawler通過(guò)如下的基本工作過(guò)程來(lái)實(shí)現(xiàn)在搜索引擎系統(tǒng)中抓取互聯(lián)網(wǎng)原始數(shù)據(jù)資源crawler初始運(yùn)行時(shí),會(huì)首先抓取搜索引擎系統(tǒng)預(yù)先指定的種子統(tǒng)一資源定位符(URL,Uniform Resource Locator);然后通過(guò)對(duì)抓取到的URL所對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容進(jìn)行分析,來(lái)提取其中的鏈接URL,并進(jìn)而抓取這些鏈接URL,如此循環(huán)往復(fù)下去,直到抓取到搜索引擎系統(tǒng)預(yù)先所定義的規(guī)模數(shù)目的URL。
在上述crawler的工作過(guò)程中,需要判斷各個(gè)準(zhǔn)備抓取的URL是否在前面的抓取處理過(guò)程中已被抓取過(guò),因?yàn)槿绻粚?duì)準(zhǔn)備抓取的URL判斷是否抓取過(guò),而是對(duì)每個(gè)URL直接抓取,這樣勢(shì)必會(huì)造成循環(huán)多次抓取鏈接相互指向的網(wǎng)頁(yè)內(nèi)容,由此將會(huì)對(duì)整個(gè)搜索引擎系統(tǒng)資源造成極大的浪費(fèi),而且由于鏈接相互指向的URL會(huì)產(chǎn)生陷阱,由此可能會(huì)導(dǎo)致crawler在抓取URL的處理過(guò)程中掉進(jìn)URL陷阱中,造成crawler不能抓取到更多的URL,這樣將直接影響到搜索引擎的處理能力。
綜上可見(jiàn),在crawler的工作過(guò)程中不可避免的就會(huì)面臨一個(gè)如何對(duì)準(zhǔn)備抓取的URL判斷是否為已被抓取的URL的問(wèn)題,即如何判斷某個(gè)URL是否在已經(jīng)抓取的URL集合中,已經(jīng)成為搜索引擎技術(shù)開(kāi)發(fā)過(guò)程中面臨的一個(gè)非常重要的技術(shù)問(wèn)題。
其中如何判斷某個(gè)URL是否在已被抓取的URL集合中,其實(shí)現(xiàn)難點(diǎn)在于已被抓取的URL集合包含URL的海量性和判斷的快速性,這個(gè)已被抓取的URL集合包含的URL數(shù)量可能高達(dá)幾億甚至幾十億的級(jí)別(具體數(shù)量由互聯(lián)網(wǎng)中包括的網(wǎng)頁(yè)數(shù)量來(lái)決定,目前大致在百億級(jí)別左右)。這樣判斷一個(gè)URL是否屬于這個(gè)集合,就需要具有非常高的判斷速度,如何使搜索引擎系統(tǒng)能夠承擔(dān)這樣高速的判斷速度,是搜索引擎技術(shù)開(kāi)發(fā)過(guò)程中所面臨的技術(shù)難點(diǎn)。
同時(shí)由于URL是以字符串形式存在的,這樣如果只是通過(guò)單純的比較用以表示URL的字符串是否相同來(lái)判斷URL是否相同,將會(huì)導(dǎo)致判斷效率非常的低。因此現(xiàn)在一般的處理辦法是將URL字符串利用某種哈希算法計(jì)算轉(zhuǎn)換成為一個(gè)64位的哈希數(shù)(包括32位的CNAME哈希數(shù)和32位的URL哈希數(shù)),這樣不同URL字符串之間的比較問(wèn)題就可以轉(zhuǎn)換成為哈希數(shù)的比較問(wèn)題,并且大致可以認(rèn)為哈希數(shù)相同的URL,其字符串形式也是相同的,這樣就可以較好的提高判斷效率。同時(shí)由于64位哈希數(shù)的范圍是0-1.8446×1019,所以對(duì)于不符合上述觀點(diǎn)的例外情況可以從概率學(xué)上給予忽略。
目前在crawler的工作過(guò)程中,通常通過(guò)如下實(shí)現(xiàn)方式來(lái)判斷一個(gè)URL是否在已被抓取的URL集合中,從而確定是否對(duì)這個(gè)URL進(jìn)行抓取針對(duì)每個(gè)指定的URL,采用多哈希函數(shù)組合方式來(lái)生成對(duì)應(yīng)的判決向量,并使用該對(duì)應(yīng)的判決向量來(lái)判斷該指定的URL是否在已抓取過(guò)的URL集合中,但是采用判決向量進(jìn)行判斷會(huì)造成一定程度的誤判,如果要減小誤判的發(fā)生概率,就需要選取多種性能良好的哈希函數(shù)進(jìn)行組合,并且要求生成級(jí)數(shù)較大的判決向量,這樣將使得判斷URL是否在已抓取過(guò)的URL集合中的處理過(guò)程非常的耗時(shí),并且級(jí)數(shù)較大的判決向量也會(huì)占用較多的內(nèi)存。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題在于提出一種網(wǎng)頁(yè)標(biāo)識(shí)抓取方法,以提高判斷準(zhǔn)備抓取的網(wǎng)頁(yè)標(biāo)識(shí)是否在已抓取的網(wǎng)頁(yè)標(biāo)識(shí)集合中的速度,并減少網(wǎng)頁(yè)標(biāo)識(shí)的抓取過(guò)程對(duì)內(nèi)存資源的過(guò)多占用。
為解決上述問(wèn)題,本發(fā)明提出的技術(shù)方案如下一種網(wǎng)頁(yè)標(biāo)識(shí)抓取方法,設(shè)置第一存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)規(guī)定數(shù)目的最新抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值;和第二存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)所有已抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值,所述第二存儲(chǔ)結(jié)構(gòu)包括初始子存儲(chǔ)結(jié)構(gòu)和分別對(duì)應(yīng)初始子存儲(chǔ)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)的沖突避免子存儲(chǔ)結(jié)構(gòu);針對(duì)每個(gè)欲抓取的網(wǎng)頁(yè)標(biāo)識(shí)執(zhí)行步驟A、根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)的哈希值計(jì)算第一存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)索引值;B、判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與根據(jù)本次計(jì)算的節(jié)點(diǎn)索引值在第一存儲(chǔ)結(jié)構(gòu)中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則使用網(wǎng)頁(yè)標(biāo)識(shí)的哈希值更新本次索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容,并C、根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)的哈希值計(jì)算初始子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)索引值;D、判斷根據(jù)本次計(jì)算的節(jié)點(diǎn)索引值在初始子存儲(chǔ)結(jié)構(gòu)中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否為零,如果是,將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到本次索引到的節(jié)點(diǎn)中;否則判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與本次索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則E、判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與本次索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到本次索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中。
較佳地,所述存儲(chǔ)結(jié)構(gòu)為表存儲(chǔ)結(jié)構(gòu)。
較佳地,所述存儲(chǔ)結(jié)構(gòu)為樹(shù)型存儲(chǔ)結(jié)構(gòu)。
較佳地,所述步驟A具體包括步驟A1、基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)第一表存儲(chǔ)結(jié)構(gòu)包含的表項(xiàng)總數(shù)取余;并A2、將取余得到的余數(shù)值作為在第一表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
較佳地,所述步驟C具體包括步驟C1、基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)初始子表存儲(chǔ)結(jié)構(gòu)包含的表項(xiàng)總數(shù)取余;并C2、將取余得到的余數(shù)值作為在初始子表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
較佳地,所述步驟C和D之間還包括步驟C-1、將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值和計(jì)算的節(jié)點(diǎn)索引值進(jìn)行關(guān)聯(lián)緩存;并C-2、判斷緩存的節(jié)點(diǎn)索引值個(gè)數(shù)是否達(dá)到規(guī)定個(gè)數(shù),如果是,對(duì)于每組關(guān)聯(lián)緩存的網(wǎng)頁(yè)標(biāo)識(shí)哈希值和節(jié)點(diǎn)索引值執(zhí)行D;否則C-3、回至A繼續(xù)執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理。
較佳地,所述步驟C-2中還包括在判斷結(jié)果為是時(shí),對(duì)緩存的節(jié)點(diǎn)索引值進(jìn)行排序處理的步驟。
較佳地,所述步驟C-2中按照排序順序,依次對(duì)每組關(guān)聯(lián)緩存的網(wǎng)頁(yè)標(biāo)識(shí)哈希值和節(jié)點(diǎn)索引值執(zhí)行D。
較佳地,通過(guò)地址偏移方式將初始子存儲(chǔ)結(jié)構(gòu)中的每個(gè)節(jié)點(diǎn)和相應(yīng)沖突避免子存儲(chǔ)結(jié)構(gòu)進(jìn)行關(guān)聯(lián)對(duì)應(yīng)。
較佳地,所述步驟E中基于地址偏移方式判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,并將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到?jīng)_突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中。
較佳地,所述第二存儲(chǔ)結(jié)構(gòu)包括至少兩個(gè)初始子存儲(chǔ)結(jié)構(gòu),每個(gè)初始子存儲(chǔ)結(jié)構(gòu)分別用于存儲(chǔ)不同范圍內(nèi)的已抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值。
較佳地,所述第一存儲(chǔ)結(jié)構(gòu)設(shè)置在內(nèi)存中;所述第二存儲(chǔ)結(jié)構(gòu)設(shè)置在磁盤(pán)中。
較佳地,所述網(wǎng)頁(yè)標(biāo)識(shí)為統(tǒng)一資源定位符。
本發(fā)明能夠達(dá)到的有益效果如下本發(fā)明方案通過(guò)經(jīng)由第一存儲(chǔ)結(jié)構(gòu)的判斷處理,可以識(shí)別出大部分已抓取的網(wǎng)頁(yè)標(biāo)識(shí),從而使得真正到第二存儲(chǔ)結(jié)構(gòu)中進(jìn)行判斷的網(wǎng)頁(yè)標(biāo)識(shí)數(shù)量大大減少,而同時(shí)在第二存儲(chǔ)結(jié)構(gòu)中的初始子存儲(chǔ)結(jié)構(gòu)中判斷出現(xiàn)哈希沖突時(shí),直接到對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)中進(jìn)行哈希沖突問(wèn)題的解決,而無(wú)需對(duì)初始子存儲(chǔ)結(jié)構(gòu)進(jìn)行頻繁的修改和重建,因此較好的提高了判斷準(zhǔn)備抓取的網(wǎng)頁(yè)標(biāo)識(shí)是否在已抓取的網(wǎng)頁(yè)標(biāo)識(shí)集合中的速度,從而相應(yīng)提高了對(duì)網(wǎng)頁(yè)標(biāo)識(shí)抓取的處理速度,并較好的減少了網(wǎng)頁(yè)標(biāo)識(shí)的抓取過(guò)程對(duì)內(nèi)存資源的過(guò)多占用。
此外,本發(fā)明方案對(duì)在第二存儲(chǔ)結(jié)構(gòu)中的初始子存儲(chǔ)結(jié)構(gòu)中進(jìn)行網(wǎng)頁(yè)標(biāo)識(shí)判斷處理時(shí),提出緩存每個(gè)判斷命令對(duì)應(yīng)得到的節(jié)點(diǎn)索引值,只有在緩存的節(jié)點(diǎn)索引值到達(dá)一定數(shù)量后,才對(duì)緩存的節(jié)點(diǎn)索引值對(duì)應(yīng)的各個(gè)判斷命令執(zhí)行有序的批量處理,從而也提高了判斷準(zhǔn)備抓取的網(wǎng)頁(yè)標(biāo)識(shí)是否在已抓取的網(wǎng)頁(yè)標(biāo)識(shí)集合中的速度,由此相應(yīng)提高了對(duì)網(wǎng)頁(yè)標(biāo)識(shí)抓取的處理速度。
圖1為本發(fā)明網(wǎng)頁(yè)標(biāo)識(shí)抓取方法的主要實(shí)現(xiàn)原理流程圖;圖2為應(yīng)用于本發(fā)明方法原理進(jìn)行實(shí)施的實(shí)施例中,預(yù)先設(shè)置的三張哈希映射表對(duì)欲抓取的URL進(jìn)行判斷處理的順序示意圖;圖3為應(yīng)用本發(fā)明方法原理進(jìn)行實(shí)施的實(shí)施例中,使用磁盤(pán)哈希沖突映射表來(lái)解決在磁盤(pán)哈希映射表中所發(fā)生的哈希沖突的處理過(guò)程示意圖;圖4為應(yīng)用本發(fā)明方法原理實(shí)施的實(shí)施例中,對(duì)命中的每個(gè)URL哈希值進(jìn)行判斷處理及抓取URL的處理過(guò)程流程圖。
具體實(shí)施例方式
下面將結(jié)合各個(gè)附圖對(duì)本發(fā)明的主要實(shí)現(xiàn)原理、具體實(shí)施過(guò)程及有益效果進(jìn)行詳細(xì)的闡述。
請(qǐng)參照?qǐng)D1,該圖是本發(fā)明網(wǎng)頁(yè)標(biāo)識(shí)抓取方法的主要實(shí)現(xiàn)原理流程圖,其中在本發(fā)明方法的實(shí)現(xiàn)過(guò)程中,需要預(yù)先設(shè)置至少一個(gè)第一存儲(chǔ)結(jié)構(gòu),用來(lái)存儲(chǔ)規(guī)定數(shù)目的最新近抓取過(guò)的網(wǎng)頁(yè)標(biāo)識(shí)哈希值,較佳地,要求將該設(shè)置的第一存儲(chǔ)結(jié)構(gòu)設(shè)置于處理速度較高、價(jià)格較貴的存儲(chǔ)介質(zhì)中,如內(nèi)存等存儲(chǔ)介質(zhì);還同時(shí)需要設(shè)置至少一個(gè)第二存儲(chǔ)結(jié)構(gòu),用來(lái)存儲(chǔ)所有已經(jīng)抓取過(guò)的網(wǎng)頁(yè)標(biāo)識(shí)哈希值,其中該設(shè)置的第二存儲(chǔ)結(jié)構(gòu)進(jìn)一步包括初始子存儲(chǔ)結(jié)構(gòu)和分別對(duì)應(yīng)該初始子存儲(chǔ)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)的沖突避免子存儲(chǔ)結(jié)構(gòu),其中可以通過(guò)地址偏移方式來(lái)將初始子存儲(chǔ)結(jié)構(gòu)中的每個(gè)節(jié)點(diǎn)和相應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)進(jìn)行關(guān)聯(lián)對(duì)應(yīng),并且分別對(duì)應(yīng)初始子存儲(chǔ)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)的各個(gè)沖突避免子存儲(chǔ)結(jié)構(gòu)可以是連接在一起的整體存儲(chǔ)結(jié)構(gòu)、也可以是分別獨(dú)立的存儲(chǔ)結(jié)構(gòu),較佳地,要求將該設(shè)置的第二存儲(chǔ)結(jié)構(gòu)設(shè)置于處理速度不是相當(dāng)高、且價(jià)格較便宜的存儲(chǔ)介質(zhì)中,如磁盤(pán)、硬盤(pán)等存儲(chǔ)介質(zhì);其中第一存儲(chǔ)結(jié)構(gòu)和第二存儲(chǔ)結(jié)構(gòu)中包括的初始子存儲(chǔ)結(jié)構(gòu)和沖突避免子存儲(chǔ)結(jié)構(gòu)可以分別采用表存儲(chǔ)結(jié)構(gòu),也可以分別采用樹(shù)型存儲(chǔ)結(jié)構(gòu)。此外設(shè)置的第二存儲(chǔ)結(jié)構(gòu)可以包括至少兩個(gè)初始子存儲(chǔ)結(jié)構(gòu),其中每個(gè)初始子存儲(chǔ)結(jié)構(gòu)分別用來(lái)存儲(chǔ)不同范圍內(nèi)的已抓取過(guò)的網(wǎng)頁(yè)標(biāo)識(shí)哈希值。
基于上述預(yù)先設(shè)置好的第一存儲(chǔ)結(jié)構(gòu)和第二存儲(chǔ)結(jié)構(gòu),后續(xù)針對(duì)每個(gè)欲抓取的網(wǎng)頁(yè)標(biāo)識(shí),就可以執(zhí)行如下處理過(guò)程步驟S10,將網(wǎng)頁(yè)標(biāo)識(shí)利用某種哈希算法計(jì)算轉(zhuǎn)換成為對(duì)應(yīng)的哈希值,并根據(jù)計(jì)算得到的網(wǎng)頁(yè)標(biāo)識(shí)哈希值來(lái)進(jìn)而計(jì)算在第一存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值;下面以第一存儲(chǔ)結(jié)構(gòu)采用表存儲(chǔ)結(jié)構(gòu)為例,對(duì)根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)哈希值計(jì)算在第一存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值的過(guò)程進(jìn)行說(shuō)明
首先,基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)第一表存儲(chǔ)結(jié)構(gòu)所包含的表項(xiàng)總數(shù)進(jìn)行取余處理;然后就可以將上述取余處理后得到的余數(shù)值作為在第一表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
步驟S20,根據(jù)上述在步驟S10中計(jì)算得到的節(jié)點(diǎn)索引值,在第一存儲(chǔ)結(jié)構(gòu)中索引得到對(duì)應(yīng)節(jié)點(diǎn)。
步驟S30,判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與上述在步驟S20中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí),準(zhǔn)備執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理;否則執(zhí)行步驟S40。
步驟S40,使用網(wǎng)頁(yè)標(biāo)識(shí)的哈希值來(lái)更新上述在步驟S20中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容,達(dá)到抓取網(wǎng)頁(yè)標(biāo)識(shí)的目的。
步驟S50,進(jìn)一步根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)的哈希值來(lái)計(jì)算在初始子存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值;同理,下面以初始子存儲(chǔ)結(jié)構(gòu)采用表存儲(chǔ)結(jié)構(gòu)為例,對(duì)根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)哈希值計(jì)算在初始子存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值的過(guò)程進(jìn)行說(shuō)明首先,基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)初始子表存儲(chǔ)結(jié)構(gòu)所包含的表項(xiàng)總數(shù)進(jìn)行取余處理;然后將上述取余處理后得到的余數(shù)值作為在初始子表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
步驟S60,根據(jù)上述在步驟S50中計(jì)算得到的節(jié)點(diǎn)索引值,在初始子存儲(chǔ)結(jié)構(gòu)中索引到對(duì)應(yīng)節(jié)點(diǎn)。
步驟S70,判斷上述在步驟S60中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否為零,如果是,執(zhí)行步驟S80;否則執(zhí)行步驟S90。
步驟S80,將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到上述在步驟S60中索引到的節(jié)點(diǎn)中,達(dá)到抓取網(wǎng)頁(yè)標(biāo)識(shí)的目的。
步驟S90,判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與上述在步驟S60中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí),準(zhǔn)備執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理;否則執(zhí)行步驟S100。
步驟S100,判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與上述在步驟S60中索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí),準(zhǔn)備執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理;否則執(zhí)行步驟S110。
步驟S110,將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到上述在步驟S60中索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中,達(dá)到抓取網(wǎng)頁(yè)標(biāo)識(shí)的目的。
其中在上述步驟S100和S110中,可以基于地址偏移方式來(lái)判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與對(duì)應(yīng)沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,并實(shí)現(xiàn)將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到對(duì)應(yīng)沖突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中。
此外,為了提高在第二存儲(chǔ)結(jié)構(gòu)中(尤其是在初始子存儲(chǔ)結(jié)構(gòu)中)的判斷速度,較佳地,可以選擇將欲判斷處理的個(gè)數(shù)積累到一定程度,然后對(duì)積累下來(lái)的各個(gè)判斷處理進(jìn)行批量處理,由此來(lái)提高在第二存儲(chǔ)結(jié)構(gòu)中(尤其是在初始子存儲(chǔ)結(jié)構(gòu)中)的判斷處理速度。這樣在上述處理過(guò)程中,在步驟S50和S60之間就還要增加如下處理進(jìn)程將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值和計(jì)算得到的對(duì)應(yīng)節(jié)點(diǎn)索引值進(jìn)行關(guān)聯(lián)緩存;并判斷上述緩存的節(jié)點(diǎn)索引值個(gè)數(shù)是否達(dá)到規(guī)定的個(gè)數(shù),如果是,對(duì)上述緩存的各個(gè)節(jié)點(diǎn)索引值進(jìn)行排序處理,并按照排序結(jié)果順序,依次對(duì)每組關(guān)聯(lián)緩存的網(wǎng)頁(yè)標(biāo)識(shí)哈希值和對(duì)應(yīng)的節(jié)點(diǎn)索引值執(zhí)行后續(xù)步驟S60及其之后的處理;否則回至上述步驟S10中繼續(xù)執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理。
其中在本發(fā)明方法的上述處理過(guò)程中所提及的網(wǎng)頁(yè)標(biāo)識(shí)可以但不限于為統(tǒng)一資源定位符URL。
下面將以一個(gè)具體實(shí)施例的具體實(shí)施過(guò)程來(lái)詳細(xì)闡述本發(fā)明方法的主要實(shí)現(xiàn)原理。
本實(shí)施例通過(guò)對(duì)每個(gè)欲抓取的URL,分別經(jīng)由內(nèi)存哈希映射表(對(duì)應(yīng)于上述本發(fā)明原理中所闡述的第一存儲(chǔ)結(jié)構(gòu))、磁盤(pán)哈希映射表(對(duì)應(yīng)于上述本發(fā)明原理中所闡述的初始子存儲(chǔ)結(jié)構(gòu))和磁盤(pán)哈希沖突映射表(對(duì)應(yīng)于上述本發(fā)明原理中所闡述的沖突避免子存儲(chǔ)結(jié)構(gòu))的判斷處理,來(lái)決定是否對(duì)每個(gè)欲抓取的URL進(jìn)行抓取,并在磁盤(pán)哈希映射表的判斷過(guò)程中結(jié)合批量處理和磁頭偏移等處理方式,從而較好的提高判斷準(zhǔn)備抓取的URL是否在已抓取的URL集合中的速度,并減少URL的抓取過(guò)程對(duì)內(nèi)存資源的過(guò)多占用。
請(qǐng)參照?qǐng)D2,該圖是應(yīng)用于本發(fā)明方法原理進(jìn)行實(shí)施的實(shí)施例中,預(yù)先設(shè)置的三張哈希映射表對(duì)欲抓取的URL進(jìn)行判斷處理的順序示意圖,其中hashmap in disk是磁盤(pán)哈希映射表,hash map in memory(cache)是內(nèi)存哈希映射表(以下將簡(jiǎn)稱(chēng)cache)、conflict map in disk是磁盤(pán)哈希沖突映射表。在抓取URL的過(guò)程中,對(duì)于任何URL判斷請(qǐng)求,都需要先到內(nèi)存哈希映射表中進(jìn)行查找,如果找到相同URL哈希值,則表明該URL已經(jīng)抓取過(guò);如果沒(méi)有找到相同的URL哈希值,則進(jìn)而到磁盤(pán)哈希映射表中進(jìn)行查找,并更新內(nèi)存哈希映射表中的URL哈希值記錄。如果在磁盤(pán)哈希映射表中經(jīng)查找發(fā)現(xiàn)存在有哈希沖突,則進(jìn)而通過(guò)磁盤(pán)哈希沖突映射表來(lái)解決所發(fā)生的URL哈希沖突情況,詳細(xì)過(guò)程將在后續(xù)過(guò)程進(jìn)行說(shuō)明。
首先介紹內(nèi)存哈希映射表的屬性首先要在內(nèi)存中生成一個(gè)大容量(如表項(xiàng)包含有16777213項(xiàng))的內(nèi)存哈希映射表,表結(jié)構(gòu)為64位的哈希值,表項(xiàng)共為16777213項(xiàng)(接近于224=16777216的一個(gè)大質(zhì)數(shù)),則內(nèi)存哈希映射表的總共容量為64×16777213/8/1024/1024=128MBytes。
其中表項(xiàng)的尋址方式以URL的64位哈希值對(duì)16777213取余作為內(nèi)存哈希映射表的索引值(對(duì)應(yīng)于上述本發(fā)明原理中所闡述的節(jié)點(diǎn)索引值)。例如某個(gè)URL的64位哈希值為64539945249362485,則根據(jù)這個(gè)URL哈希值可以確定內(nèi)存哈希映射表的表項(xiàng)索引值為64539945249362485%16777213=4821311,即針對(duì)該URL哈希值,需查找內(nèi)存哈希映射表中的第4821311項(xiàng),并對(duì)該項(xiàng)中的64位哈希值進(jìn)行處理。內(nèi)存哈希映射表的表項(xiàng)取16777213項(xiàng)而不取16777216項(xiàng)的原因在于以大質(zhì)數(shù)作模的話(huà),能極大地減少根據(jù)不同URL哈希值而索引到相同表項(xiàng)的沖突情況的發(fā)生概率(即盡量避免不同64位哈希值對(duì)上述大質(zhì)數(shù)取余后得到相同余數(shù)的情況發(fā)生)。其中內(nèi)存哈希映射表的各表項(xiàng)中存儲(chǔ)的64位哈希值的初始值均為零。
設(shè)立大容量cache的好處在于可以用于記錄一段范圍內(nèi)的歷史URL抓取情況,對(duì)于新來(lái)的URL判斷請(qǐng)求,如果發(fā)現(xiàn)在cache中已經(jīng)記錄,即可迅速做出判斷結(jié)果為URL已經(jīng)抓取過(guò),可以放棄重復(fù)抓取,而不用到磁盤(pán)哈希映射表中真正去判斷是否存在相同的URL哈希值,這樣可以極大地節(jié)省判斷時(shí)間,提高URL的抓取效率。
對(duì)于新來(lái)的URL判斷請(qǐng)求,根據(jù)其URL的64位哈希值,計(jì)算在cache中的表項(xiàng)索引值,根據(jù)計(jì)算得到的表項(xiàng)索引值在cache中索引到對(duì)應(yīng)的表項(xiàng),并比較URL哈希值和該索引到的表項(xiàng)中存儲(chǔ)的64位哈希值是否相同,如果相同,則表明該URL以前抓取過(guò);如果不相同,則將該URL的64位哈希值保存在該索引到的表項(xiàng)中,并將該URL哈希值轉(zhuǎn)到磁盤(pán)哈希映射表中去作進(jìn)一步的判斷處理。實(shí)際試驗(yàn)數(shù)據(jù)表明,通過(guò)cache命中的URL判斷請(qǐng)求可能占總URL判斷請(qǐng)求比例的85%以上,對(duì)提高判斷效率和URL的抓取效率起到了非常好的作用。
接下來(lái)介紹磁盤(pán)哈希映射表的屬性在磁盤(pán)中生成一個(gè)大容量的磁盤(pán)哈希映射表,表結(jié)構(gòu)由64位的哈希值和32位的用以解決哈希沖突的偏移地址組成,表項(xiàng)共有67108859(接近于226=67108864的一個(gè)大質(zhì)數(shù)),則磁盤(pán)哈希映射表的總共容量為(64+32)×67108859/8/1024/1024=768MBytes。
其中表項(xiàng)的尋址方式以URL的64位哈希值對(duì)67108859取余作為磁盤(pán)哈希映射表的索引值((對(duì)應(yīng)于上述本發(fā)明原理中所闡述的節(jié)點(diǎn)索引值)。例如某個(gè)URL的64位哈希值為64539945249362485,則根據(jù)這個(gè)URL哈希值可以確定在磁盤(pán)哈希映射表中的表項(xiàng)索引值為64539945249362485%67108859=17219544,即針對(duì)該URL值,需要查找磁盤(pán)哈希映射表中第17219544項(xiàng),并對(duì)該項(xiàng)中的64位哈希值進(jìn)行處理。磁盤(pán)哈希映射表的表項(xiàng)取67108859項(xiàng)而不取67108864項(xiàng)的原因在于以大質(zhì)數(shù)作模的話(huà),能極大地減少根據(jù)不同URL哈希值而索引到相同表項(xiàng)的沖突情況的發(fā)生概率(即盡量避免不同64位哈希值對(duì)上述大質(zhì)數(shù)取余后得到相同余數(shù)的情況發(fā)生)。其中磁盤(pán)哈希映射表的各表項(xiàng)中存儲(chǔ)的64位哈希值和用以解決哈希沖突的偏移地址的初始值均為零。
如果抓取范圍內(nèi)的URL數(shù)量太多的話(huà),可以在磁盤(pán)中生成多個(gè)這樣的磁盤(pán)哈希映射表,每張表分別分擔(dān)不同范圍內(nèi)的URL集合,這樣可以實(shí)現(xiàn)磁盤(pán)哈希映射表良好的可伸縮性。
對(duì)于新來(lái)的URL判斷請(qǐng)求,根據(jù)其URL的64位哈希值,計(jì)算在磁盤(pán)哈希映射表中的表項(xiàng)索引值,并根據(jù)計(jì)算得到的表項(xiàng)索引值在磁盤(pán)哈希映射表中索引到對(duì)應(yīng)的表項(xiàng),如果索引到的表項(xiàng)中所保存的內(nèi)容為零,則表明該URL沒(méi)有被抓取過(guò),將該URL哈希值保存在該索引到的表項(xiàng)中;如果索引到的表項(xiàng)中所保存的內(nèi)容不為零,則比較URL哈希值和索引到的表項(xiàng)中保存的64位哈希值是否相同,如果兩哈希值相同且不為零,則表明該URL以前被抓取過(guò),放棄對(duì)該URL進(jìn)行抓??;如果兩哈希值不相同且不為零,則表明出現(xiàn)哈希沖突,這樣就將會(huì)利用后續(xù)的磁盤(pán)哈希沖突映射表來(lái)解決出現(xiàn)的哈希沖突情況,并更新磁盤(pán)哈希映射表中該索引到的表項(xiàng)對(duì)應(yīng)的偏移地址。
同時(shí),由于對(duì)以前沒(méi)有抓取過(guò)的URL進(jìn)行判斷過(guò)程中,因?yàn)閷?duì)內(nèi)存哈希映射表操作很快,并且利用磁盤(pán)哈希沖突映射表來(lái)解決出現(xiàn)的哈希沖突情況也比較少,所以這樣就導(dǎo)致大部分的判斷時(shí)間都消耗在對(duì)磁盤(pán)哈希映射表的處理操作上。其中磁頭頻繁的偏移導(dǎo)致磁盤(pán)哈希映射表的讀寫(xiě)速度成為整個(gè)搜索引擎系統(tǒng)速度緩慢的瓶頸所在,并且隨著磁盤(pán)哈希映射表表項(xiàng)數(shù)目的增長(zhǎng),這種情況將會(huì)更加嚴(yán)重。
利用本發(fā)明方法原理,這里在實(shí)施本實(shí)施例的過(guò)程中,可以采取將對(duì)每個(gè)欲抓取的URL的64位哈希值取余后得到的表項(xiàng)索引值進(jìn)行緩存,直到數(shù)量達(dá)到65536個(gè),再對(duì)緩存的表項(xiàng)索引值進(jìn)行快速排序,然后按照排序順序批量對(duì)緩存的URL判斷請(qǐng)求進(jìn)行判斷處理。這樣對(duì)于磁頭而言,是一次順序偏移,將大大減少隨機(jī)訪(fǎng)問(wèn)的偏移時(shí)間和位移,因此大幅度提高了URL的判斷速度。
最后介紹磁盤(pán)哈希沖突映射表的屬性盡管采用很多方法都能降低哈希沖突的發(fā)生概率,但是卻無(wú)法完全避免哈希沖突的發(fā)生。為了解決在前述磁盤(pán)哈希映射表中所發(fā)生的哈希沖突問(wèn)題,需要在磁盤(pán)哈希映射表后,設(shè)置一個(gè)可變長(zhǎng)度的磁盤(pán)哈希沖突映射表,表結(jié)構(gòu)同磁盤(pán)哈希映射表一樣,由64位的哈希值和32位的用以解決哈希沖突的偏移地址組成,并且64位的用以存儲(chǔ)哈希值的表項(xiàng)和32位的用以解決哈希沖突的偏移地址項(xiàng)初始值均為零。
請(qǐng)參照?qǐng)D3,該圖是應(yīng)用本發(fā)明方法原理進(jìn)行實(shí)施的實(shí)施例中,使用磁盤(pán)哈希沖突映射表來(lái)解決在磁盤(pán)哈希映射表中所發(fā)生的哈希沖突的處理過(guò)程示意圖,其中當(dāng)在前述磁盤(pán)哈希映射表中對(duì)欲抓取的URL哈希值進(jìn)行判斷處理時(shí),若出現(xiàn)哈希沖突情況,則需要在磁盤(pán)哈希沖突映射表尾部追加一項(xiàng),填入該欲抓取的URL的64位哈希值,并在磁盤(pán)哈希映射表中對(duì)應(yīng)發(fā)生哈希沖突的表項(xiàng)后的用以解決哈希沖突的偏移地址項(xiàng)中填入新增加的用于解決哈希沖突表項(xiàng)的地址。如圖3,在磁盤(pán)哈希映射表中的0018表項(xiàng)中出現(xiàn)了一次哈希沖突(即欲判斷的URL哈希值和該0018表項(xiàng)中存儲(chǔ)的64位哈希值不相同),則需要在磁盤(pán)哈希沖突映射表中增加一項(xiàng)01B2FE00,并將該欲抓取的URL的哈希值存放在該新增加的表項(xiàng)01B2FE00中,并在磁盤(pán)哈希映射表的0018表項(xiàng)后面對(duì)應(yīng)的偏移地址項(xiàng)中寫(xiě)入偏移地址01B2FE00,用于指向磁盤(pán)哈希沖突映射表的相應(yīng)表項(xiàng);又如在磁盤(pán)哈希映射表中的0030表項(xiàng)中出現(xiàn)了哈希沖突(即欲判斷的URL哈希值和該0030表項(xiàng)中存儲(chǔ)的64位哈希值不相同),通過(guò)該0030表項(xiàng)后面的對(duì)應(yīng)偏移地址項(xiàng)中記錄的偏移地址01B2FE0C,轉(zhuǎn)到磁盤(pán)哈希沖突映射表中的01B2FE0C項(xiàng),判斷欲抓取的URL的哈希值和磁盤(pán)哈希沖突映射表中01B2FE0C項(xiàng)存儲(chǔ)的64位哈希值是否相同,如果相同,則放棄對(duì)該URL進(jìn)行抓取,否則在磁盤(pán)哈希沖突映射表中01B2FE0C項(xiàng)下面再增加一項(xiàng)01B2FE18,并將欲抓取的URL的哈希值記錄在新增加的表項(xiàng)01B2FE18中,并在01B2FE0C項(xiàng)后面對(duì)應(yīng)的偏移地址項(xiàng)中填入01B2FE18,用以指向磁盤(pán)哈希沖突映射表中的01B2FE18項(xiàng),以上這種情況可以稱(chēng)之為二次哈希沖突的解決。同理,本發(fā)明方法可以解決多次哈希沖突的情況發(fā)生。
如果在磁盤(pán)哈希映射表中對(duì)欲抓取的URL進(jìn)行判斷時(shí),沒(méi)有發(fā)生哈希沖突問(wèn)題,則直接在對(duì)應(yīng)表項(xiàng)后面的偏移地址項(xiàng)中填入零,整個(gè)磁盤(pán)哈希沖突映射表的表項(xiàng)總數(shù)與出現(xiàn)哈希沖突的次數(shù)一樣。由于其它一些輔助方法,使得哈希沖突情況的發(fā)生概率并不是很高,所以在實(shí)際運(yùn)行過(guò)程中磁盤(pán)哈希沖突映射表所占用的運(yùn)行空間相對(duì)較小。
基于上述創(chuàng)建的三張哈希映射表,對(duì)命中的每個(gè)URL哈希值進(jìn)行判斷處理及抓取URL的處理過(guò)程如圖4所示步驟S120,命中欲抓取的URL;步驟S130,根據(jù)命中的URL的哈希值計(jì)算在cache映射表中的表項(xiàng)索引值;步驟S140,根據(jù)上述計(jì)算得到的表項(xiàng)索引值在cache映射表中索引到對(duì)應(yīng)的表項(xiàng);步驟S150,判斷命中的URL的哈希值是否和上述索引到的表項(xiàng)中存儲(chǔ)的64位哈希值相同,如果是,確認(rèn)已經(jīng)抓取過(guò)該URL,繼續(xù)下一URL的抓取處理;否則步驟S160,使用該命中的URL的哈希值更新上述索引到的表項(xiàng)中存儲(chǔ)的哈希值;并步驟S170,根據(jù)命中的URL的哈希值計(jì)算在磁盤(pán)哈希映射表中的表項(xiàng)索引值;步驟S180,緩存上述命中的URL的哈希值和對(duì)應(yīng)計(jì)算得到的在磁盤(pán)哈希映射表中的表項(xiàng)索引值;
步驟S190,判斷緩存的表項(xiàng)索引值數(shù)量是否達(dá)到65536個(gè),如果是,對(duì)緩存的表項(xiàng)索引值進(jìn)行快速排序處理,并按照排序順序,依次對(duì)每組緩存的URL哈希值和表項(xiàng)索引值執(zhí)行下述步驟S200的處理;否則回至步驟S120繼續(xù)對(duì)下一欲抓取的URL進(jìn)行抓取處理;步驟S200,根據(jù)緩存的表項(xiàng)索引值在磁盤(pán)哈希映射表中索引到對(duì)應(yīng)的表項(xiàng);步驟S210,判斷上述索引到的表項(xiàng)中存儲(chǔ)的內(nèi)容是否為零,如果是,確認(rèn)沒(méi)有抓取過(guò)該URL,將該URL的哈希值存儲(chǔ)到索引到的表項(xiàng)中;否則步驟S220,判斷命中的URL的哈希值和上述索引到的表項(xiàng)中存儲(chǔ)的內(nèi)容是否相同,如果是,確認(rèn)已經(jīng)抓取過(guò)該URL,繼續(xù)下一URL的抓取處理;否則步驟S230,確認(rèn)命中的URL的哈希值和上述在磁盤(pán)哈希映射表中索引到的表項(xiàng)中存儲(chǔ)的哈希值不相同且不為零,表明出現(xiàn)哈希沖突,通過(guò)該索引到的表項(xiàng)中后面對(duì)應(yīng)的偏移地址項(xiàng)中記錄的偏移地址到磁盤(pán)哈希沖突映射表的對(duì)應(yīng)項(xiàng)中解決哈希沖突;步驟S240,判斷命中的URL的哈希值和磁盤(pán)哈希沖突映射表中對(duì)應(yīng)項(xiàng)存儲(chǔ)的哈希值是否存在相同情形,如果是,確認(rèn)已經(jīng)抓取過(guò)該URL,繼續(xù)下一URL的抓取處理;否則步驟S250,通過(guò)地址偏移方式將命中的URL的哈希值存儲(chǔ)到磁盤(pán)哈希沖突映射表的對(duì)應(yīng)表項(xiàng)中。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種網(wǎng)頁(yè)標(biāo)識(shí)抓取方法,其特征在于,設(shè)置第一存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)規(guī)定數(shù)目的最新抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值;和第二存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)所有已抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值,所述第二存儲(chǔ)結(jié)構(gòu)包括初始子存儲(chǔ)結(jié)構(gòu)和分別對(duì)應(yīng)初始子存儲(chǔ)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)的沖突避免子存儲(chǔ)結(jié)構(gòu);針對(duì)每個(gè)欲抓取的網(wǎng)頁(yè)標(biāo)識(shí)執(zhí)行步驟A、根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)的哈希值計(jì)算第一存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)索引值;B、判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與根據(jù)本次計(jì)算的節(jié)點(diǎn)索引值在第一存儲(chǔ)結(jié)構(gòu)中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則使用網(wǎng)頁(yè)標(biāo)識(shí)的哈希值更新本次索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容,并C、根據(jù)網(wǎng)頁(yè)標(biāo)識(shí)的哈希值計(jì)算初始子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)索引值;D、判斷根據(jù)本次計(jì)算的節(jié)點(diǎn)索引值在初始子存儲(chǔ)結(jié)構(gòu)中索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否為零,如果是,將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到本次索引到的節(jié)點(diǎn)中;否則判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與本次索引到的節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容是否相同,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則E、判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與本次索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,如果是,放棄抓取網(wǎng)頁(yè)標(biāo)識(shí);否則將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到本次索引到的節(jié)點(diǎn)所對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中。
2.如權(quán)利要求1所述的方法,其特征在于,所述存儲(chǔ)結(jié)構(gòu)為表存儲(chǔ)結(jié)構(gòu)。
3.如權(quán)利要求1所述的方法,其特征在于,所述存儲(chǔ)結(jié)構(gòu)為樹(shù)型存儲(chǔ)結(jié)構(gòu)。
4.如權(quán)利要求2所述的方法,其特征在于,所述步驟A具體包括步驟A1、基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)第一表存儲(chǔ)結(jié)構(gòu)包含的表項(xiàng)總數(shù)取余;并A2、將取余得到的余數(shù)值作為在第一表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
5.如權(quán)利要求2所述的方法,其特征在于,所述步驟C具體包括步驟C1、基于網(wǎng)頁(yè)標(biāo)識(shí)的哈希值對(duì)初始子表存儲(chǔ)結(jié)構(gòu)包含的表項(xiàng)總數(shù)取余;并C2、將取余得到的余數(shù)值作為在初始子表存儲(chǔ)結(jié)構(gòu)中的對(duì)應(yīng)節(jié)點(diǎn)索引值。
6.如權(quán)利要求1所述的方法,其特征在于,所述步驟C和D之間還包括步驟C-1、將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值和計(jì)算的節(jié)點(diǎn)索引值進(jìn)行關(guān)聯(lián)緩存;并C-2、判斷緩存的節(jié)點(diǎn)索引值個(gè)數(shù)是否達(dá)到規(guī)定個(gè)數(shù),如果是,對(duì)于每組關(guān)聯(lián)緩存的網(wǎng)頁(yè)標(biāo)識(shí)哈希值和節(jié)點(diǎn)索引值執(zhí)行D;否則C-3、回至A繼續(xù)執(zhí)行對(duì)下一網(wǎng)頁(yè)標(biāo)識(shí)的抓取處理。
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟C-2中還包括在判斷結(jié)果為是時(shí),對(duì)緩存的節(jié)點(diǎn)索引值進(jìn)行排序處理的步驟。
8.如權(quán)利要求7所述的方法,其特征在于,所述步驟C-2中按照排序順序,依次對(duì)每組關(guān)聯(lián)緩存的網(wǎng)頁(yè)標(biāo)識(shí)哈希值和節(jié)點(diǎn)索引值執(zhí)行D。
9.如權(quán)利要求1所述的方法,其特征在于,通過(guò)地址偏移方式將初始子存儲(chǔ)結(jié)構(gòu)中的每個(gè)節(jié)點(diǎn)和相應(yīng)沖突避免子存儲(chǔ)結(jié)構(gòu)進(jìn)行關(guān)聯(lián)對(duì)應(yīng)。
10.如權(quán)利要求1所述的方法,其特征在于,所述步驟E中基于地址偏移方式判斷網(wǎng)頁(yè)標(biāo)識(shí)的哈希值與沖突避免子存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容是否存在相同情況,并將網(wǎng)頁(yè)標(biāo)識(shí)的哈希值存儲(chǔ)到?jīng)_突避免子存儲(chǔ)結(jié)構(gòu)的對(duì)應(yīng)節(jié)點(diǎn)中。
11.如權(quán)利要求1所述的方法,其特征在于,所述第二存儲(chǔ)結(jié)構(gòu)包括至少兩個(gè)初始子存儲(chǔ)結(jié)構(gòu),每個(gè)初始子存儲(chǔ)結(jié)構(gòu)分別用于存儲(chǔ)不同范圍內(nèi)的已抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值。
12.如權(quán)利要求1所述的方法,其特征在于,所述第一存儲(chǔ)結(jié)構(gòu)設(shè)置在內(nèi)存中。
13.如權(quán)利要求1所述的方法,其特征在于,所述第二存儲(chǔ)結(jié)構(gòu)設(shè)置在磁盤(pán)中。
14.如1~13任一權(quán)利要求所述的方法,其特征在于,所述網(wǎng)頁(yè)標(biāo)識(shí)為統(tǒng)一資源定位符。
全文摘要
本發(fā)明公開(kāi)了一種網(wǎng)頁(yè)標(biāo)識(shí)抓取方法,包括設(shè)置第一存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)規(guī)定數(shù)目的最新抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值;和第二存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)所有已抓取的網(wǎng)頁(yè)標(biāo)識(shí)哈希值,第二存儲(chǔ)結(jié)構(gòu)包括初始子存儲(chǔ)結(jié)構(gòu)和分別對(duì)應(yīng)初始子存儲(chǔ)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)的沖突避免子存儲(chǔ)結(jié)構(gòu);其中對(duì)于在初始子存儲(chǔ)結(jié)構(gòu)中發(fā)生沖突的網(wǎng)頁(yè)標(biāo)識(shí)哈希值通過(guò)對(duì)應(yīng)的沖突避免子存儲(chǔ)結(jié)構(gòu)來(lái)解決哈希沖突問(wèn)題。本發(fā)明可以提高判斷準(zhǔn)備抓取的網(wǎng)頁(yè)標(biāo)識(shí)是否在已抓取的網(wǎng)頁(yè)標(biāo)識(shí)集合中的速度,并減少網(wǎng)頁(yè)標(biāo)識(shí)的抓取過(guò)程對(duì)內(nèi)存資源的過(guò)多占用。
文檔編號(hào)G06F17/30GK1991830SQ20051013542
公開(kāi)日2007年7月4日 申請(qǐng)日期2005年12月28日 優(yōu)先權(quán)日2005年12月28日
發(fā)明者楊衛(wèi) 申請(qǐng)人:騰訊科技(深圳)有限公司