.3 (URL模式重復(fù)):給定URL模式Γι和r2,以及對應(yīng)的實例集合S (Γι)和S (r2)。如果從實例集合S(A)中,任取一條URL實例U1,在S(r2)都能找到與之重復(fù)的U2,則稱Γι和r2重復(fù);
定義1.4 (重復(fù)URL模式集合):給定URL模式集合,如果其中任意的兩個URL模式重復(fù)的,那么該URL模式集合是重復(fù)URL模式集合;
從以上的定義可知,URL重復(fù)和URL模式重復(fù)滿足傳遞性質(zhì),例如,如果U1與U2是重復(fù)的,U1與U3是重復(fù)的,那么U2與U3也重復(fù)。
[0019]上述說明及定義僅針對于本發(fā)明的優(yōu)選實施例,并不在于限制本發(fā)明的保護范圍。本領(lǐng)域技術(shù)人員可作出各種變形設(shè)計,而不脫離本發(fā)明的思想及附隨的權(quán)利要求。
[0020]如圖1所示,本發(fā)明第一實施例提供一種檢測重復(fù)URL的方法,用于檢測一網(wǎng)絡(luò)爬蟲獲得的一 URL地址對應(yīng)的網(wǎng)頁是否與網(wǎng)絡(luò)爬蟲已下載過的網(wǎng)頁內(nèi)容重復(fù)或接近,該方法包括如下步驟:
步驟SlO (分組步驟):對第一 URL地址集合中的各URL地址進行分組,以使同一組別中各URL地址對應(yīng)的網(wǎng)頁間的差異度小于第一設(shè)定閾值。
[0021]該步驟中,將相同或接近相同的網(wǎng)頁對應(yīng)的URL地址放在同一個桶(組別的一種數(shù)據(jù)結(jié)構(gòu)表達方式)中,即每個桶包括若干個URL地址,且同一個桶中的各URL地址“URL重復(fù)”(如定義1.1)。桶的數(shù)據(jù)結(jié)構(gòu)可定義為b = {b.U1, b.u2, b.U3...b.Un },其中Lu1,b.U2等元素分別分別為一個URL地址,η為分組的數(shù)量。桶池存儲了多個桶,對應(yīng)于分組后的第一 URL地址集合。
[0022]其中,第一 URL地址集合可由網(wǎng)絡(luò)爬蟲的已下載網(wǎng)頁的歷史數(shù)據(jù)提供,作為本實施例提供的檢測重復(fù)URL方法的訓練學習數(shù)據(jù)。
[0023]本領(lǐng)域技術(shù)人員理解,網(wǎng)頁本質(zhì)上是一種文本,目前計算文本間相似度的算法有很多,包括:基于空間向量模型的余弦相似度、Dice相似度和Jaccard相似度等等。以上方法的準確度較高,但是隨之帶來較大的計算復(fù)雜度。
[0024]本發(fā)明的實施例中采用SimHash算法。SimHash是一種局部敏感的哈希算法,η位SimHash算法能夠為文檔生成η位二進制串,即η位SimHash編碼。文檔間的差異度等于兩篇文檔對應(yīng)SimHash編碼的差異位數(shù)。例如,四位的SimHash編碼0011與SimHash編碼0010的差異位數(shù)等于I ;差異位數(shù)越多,表示兩篇文檔區(qū)別越大。兩篇完全相同的文檔之間的SimHash編碼完全相同,差異度為O。
[0025]對于電商類網(wǎng)站的網(wǎng)頁,其通常包括動態(tài)廣告,不同時間下載的同一地址的網(wǎng)頁會出現(xiàn)細微差異。因此,可采用64位SimHash算法,例如,在文檔間的差異度小于等于3時,判定網(wǎng)頁相同或者接近相同。
[0026]步驟Sll (URL模式抽取步驟):針對每一組別,分別對其中每個URL地址的第一特性部分進行泛化表示,并以泛化后的各URL地址共同作為第二 URL地址集合中的一個元素,以形成為第二 URL地址集合。
[0027]URL模式抽取步驟的基本思想是對同一個組別(桶)中的各URL地址進行比對,盡可能找到其最大的公用部分,對其各自的第一特性部分則進行泛化表示,并可能將多個不同的URL地址泛化表示為一條URL地址。該步驟中,例如,可采用正則表達式表示泛化的結(jié)果O
[0028]其中,第一特性部分使得同一組別中每一 URL地址相異于其他URL地址。
[0029]URL模式抽取步驟的主要工作是對同一個組別內(nèi)各URL地址的第一特性部分進行泛化表示后,由第一 URL地址集合生成第二 URL地址集合。第二 URL地址集合中的每個元素均為一個次一級的URL地址集合,可包括一個或多個URL地址(即URL模式,如定義1.2),第二 URL地址中的每個元素包含的各URL模式滿足“URL模式重復(fù)”(如定義1.3)。
[0030]步驟S12 (URL模式生成步驟):針對第二 URL地址集合,分別對其每個元素包含的各URL地址的第二特性部分進行泛化表示,并以泛化后的各URL地址共同作為第三URL地址集合中的一個元素,以形成為第三URL地址集合。
[0031]其中,第二特性部分使得第二 URL地址集合中的每個元素所包含的各URL地址相異于其他元素所包含的各URL地址。
[0032]在電商類網(wǎng)站上,商品詳細介紹網(wǎng)頁和評論網(wǎng)頁通常占據(jù)了中網(wǎng)頁的很大部分,這部分網(wǎng)頁是出現(xiàn)重復(fù)URL問題的多發(fā)地。為了區(qū)別不同商品的網(wǎng)頁,一般會在URL地址中包含商品標示符的字段,URL模式生成步驟以該商品標識符作為第二特性部分,其主要工作就是針對第二 URL地址集合,找出其每個元素所包含的一條或多條URL地址中商品標示符出現(xiàn)的位置,并將商品標識符進行泛化表示,多個不同的URL地址可能經(jīng)泛化表示為一條URL地址,并由第二 URL地址集合生成第三URL地址集合。第三URL地址集合中的每個元素均為一個次一級的URL地址集合,可包括一個或多個URL地址(即URL模式,如定義1.2),第三URL地址中的每個元素包含的各URL模式滿足“URL模式重復(fù)”(如定義1.3)。
[0033]步驟S13 (主URL模式構(gòu)建步驟):針對第三URL地址集合的每個元素,分別提取其包含的各URL地址的共性部分,并以共性部分作為第四URL地址集合中的一個元素,以形成為第四URL地址集合。
[0034]第四URL地址集合中的元素與第三URL地址集合中的元素一一對應(yīng),第四URL地址集合中的每一元素均由第三URL地址集合中的對應(yīng)元素進行共性提取后形成,并將該共性定義為主URL模式,從而,第四URL地址集合中每個元素均僅包括一個URL地址。
[0035]為簡便快速起見,各所述URL地址的共性部分為該些URL地址中字符長度最短的一個。各所述URL地址的共性部分也可由現(xiàn)有技術(shù)中提供的其他共性提取方法獲得。
[0036]具體地,可以URL模式索引表示第三URL地址集合和第四URL地址集合之間的對應(yīng)關(guān)系,URL模式索引是一個簡單高效的數(shù)據(jù)結(jié)構(gòu),其結(jié)構(gòu)例如為一個長度為m的二元數(shù)組<字符串,指針 > 向量,其中字符串存儲上述URL模式生成步驟中獲得的第三URL地址集合中一元素所包含的一 URL地址,指針指向第四URL地址集合中的一個元素(定義為URL主模式)。可以理解,第三URL地址集合中任一元素所包含的各URL地址均指向同一個第四URL地址集合中的元素,即它們具有共同的主URL模式。
[0037]步驟S14 (重復(fù)URL檢測步驟):對于網(wǎng)絡(luò)爬蟲獲得的一待下載URL地址,若該待下載URL地址與第四URL地址集合中任一元素匹配,則判定該待下載URL地址對應(yīng)的網(wǎng)頁已被下載;否則,則判定該待下載URL地址對應(yīng)的網(wǎng)頁未被下載。
[0038]根據(jù)該步驟的一具體實現(xiàn),對于網(wǎng)絡(luò)爬蟲獲得的一條新URL地址U,首先,提取其第一、第二特性部分,得到其對應(yīng)的URL模式。然后,若能在第四URL地址集合中以匹配算法找到其對應(yīng)的主URL模式,則判定該URL地址u已由網(wǎng)絡(luò)爬蟲下載,否則,則判定為未下載。
[0039]為進一步對其驗證以便將未下載的URL地址加入第一 URL地址集合中以備后續(xù)訓練學習,可由其主URL模式和第一、第二特性部分,將上述URL地址u轉(zhuǎn)換為一條新的URL地址U’。然后,檢查網(wǎng)絡(luò)爬蟲是否已下載URL地址u’對應(yīng)的網(wǎng)頁。如果無下載記錄,系統(tǒng)則返回消息稱“該URL地址對應(yīng)的網(wǎng)頁尚未訪問下載”,可在下載該網(wǎng)頁的同時,將URL地址u存入第一 URL地址集合中。
[0040]根據(jù)上述第一實施例的進一步改進,在步驟SlO之后、步驟Sll之前,還包括一預(yù)處理步驟:將第一URL地址集合中的各URL地址以數(shù)據(jù)結(jié)構(gòu)形式進行表達,以便由計算機程序?qū)崿F(xiàn)該實施例提供的檢測重復(fù)URL的方法,以及由數(shù)據(jù)庫進行存儲。
[0041]具體地,預(yù)處理步驟可包括下列分步驟:
i)、刪除各URL地址中傳送協(xié)議部分字符串,例如“http://”和“https: //”等;
ii)、識別第一URL地址集合中任意一 URL地址所包含的地址字符串與參數(shù)字符串,例如,以“?”字符將URL地址分隔成兩部分,即地址字符串與參數(shù)字符串;
iii)、對于地址字符串,以“/”字符為分隔點,將其分割成至少一地址子字符串,并形成為一地址列表;對于參數(shù)字符串,以“&”字符為分隔點,將其分割成至少一參數(shù)子字符串,可使參數(shù)字符串變?yōu)橐粎?shù)列表,其包含至少一個參數(shù)項;其中,一參數(shù)子字符串例如“pcode=123” ;參數(shù)項包括了一個參數(shù)標示和一個參數(shù)值(如上例參數(shù)子字符串對應(yīng)的參數(shù)項中,pcode為參數(shù)標示,123為參數(shù)值);
iv)、分別提取各地址子字符串以形成一地址數(shù)組,分別提取各參數(shù)子字符串以形成一參數(shù)數(shù)組,以地址數(shù)組和參數(shù)數(shù)組共