本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種任務(wù)分發(fā)方法及裝置。
背景技術(shù):
在網(wǎng)絡(luò)爬蟲技術(shù)中,如何在批量獲取目標(biāo)URL(Uniform Resource Locator,統(tǒng)一資源定位符)網(wǎng)頁集合內(nèi)容的同時,網(wǎng)絡(luò)爬蟲本身不被目標(biāo)網(wǎng)頁集合所在的服務(wù)器誤認(rèn)為是惡意網(wǎng)絡(luò)爬蟲,是一大難題。網(wǎng)絡(luò)爬蟲要保證爬取網(wǎng)頁的效率,就需要開啟多個下載線程對URL任務(wù)列表中的網(wǎng)頁并發(fā)發(fā)送訪問請求。但是,目標(biāo)網(wǎng)站服務(wù)器會通過檢測同一IP(Internet Protocol,互聯(lián)網(wǎng)協(xié)議)地址發(fā)出的URL訪問請求序列及頻率來對該地址請求是否為惡意網(wǎng)絡(luò)爬蟲發(fā)出做判斷。若某IP地址在某一較短時間內(nèi)段內(nèi)的URL訪問請求序列中頁面集合符合該網(wǎng)站對相鄰頁面定義,則認(rèn)定該IP地址運行惡意網(wǎng)絡(luò)爬蟲。為了避免這一情況發(fā)生,現(xiàn)在有多種技術(shù)或策略被采用。
現(xiàn)有技術(shù)中提供了一種使用優(yōu)先級積分排序任務(wù)列表的分布式網(wǎng)絡(luò)爬蟲技術(shù)。其在采用分布式網(wǎng)絡(luò)爬蟲爬取網(wǎng)頁時,為每個節(jié)點設(shè)置1個固定的IP地址,同時設(shè)置每個節(jié)點并發(fā)執(zhí)行的線程數(shù)量最大值為3個或以下,并在各個線程上執(zhí)行URL請求的時序控制;同時,在任務(wù)列表中添加一列名為積分的數(shù)據(jù)項,根據(jù)對網(wǎng)頁的URL或內(nèi)容進(jìn)行分析確定積分,按照積分從大到小對任務(wù)隊列進(jìn)行重新排序。采用這種方法,需要的IP地址資源數(shù)量大大降低。同時,由于對任務(wù)列表進(jìn)行了重新排列,父頁面相同的相鄰頁面的訪問順序有可能被打亂,并且各個從每個IP地址最大并發(fā)的爬取線程數(shù)為3,發(fā)出的訪問請求數(shù)最大值為3,這些訪問請求又有時序控制不至其過于密集,因此不易被誤識別為惡意網(wǎng)絡(luò)爬蟲。
采用這種方法,各節(jié)點并發(fā)線程數(shù)太少,導(dǎo)致網(wǎng)絡(luò)爬蟲的爬取效率(單位時間內(nèi)爬取網(wǎng)頁數(shù)量)很低;而且存在相鄰頁面在同一時間段被密集訪問而被識別為惡意網(wǎng)絡(luò)爬蟲的可能。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種任務(wù)分發(fā)方法及裝置,用于提高網(wǎng)絡(luò)爬蟲的爬取效率。
本發(fā)明第一方面提供了一種任務(wù)分發(fā)方法,包括:
將第一頁面的統(tǒng)一資源定位符URL和所述第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
判斷所述第一頁面的URL是否已被爬?。?/p>
當(dāng)所述第一頁面的URL未被爬取時,根據(jù)所述第一頁面的URL中的子域名和所述第一頁面的URL的父頁面的哈希hash值確定所述第一頁面與第二頁面是否為相鄰頁面;
當(dāng)確定所述第一頁面與所述第二頁面不為相鄰頁面時,將所述第一頁面分配到新線程中;
當(dāng)確定所述第一頁面與所述第二頁面為相鄰頁面時,將所述第一頁面分配到所述第二頁面所在的線程中;
按時序控制對分配后的線程執(zhí)行下載任務(wù)。
結(jié)合本發(fā)明的第一方面,在本發(fā)明第一方面的第一種實現(xiàn)方式中,所述判斷所述第一頁面的URL是否已被爬取具體包括:
根據(jù)已爬取頁的URL列表判斷所述第一頁面的URL是否已被爬取,若是,則將所述第一頁面的URL從所述任務(wù)列表中刪去。
結(jié)合本發(fā)明的第一方面,在本發(fā)明第一方面的第二種實現(xiàn)方式中,所述根據(jù)所述第一頁面的URL中的子域名和所述第一頁面的URL的父頁面的哈希hash值確定所述第一頁面與第二頁面是否為相鄰頁面具體包括:
判斷所述第一頁面的URL的子域名與所述第二頁面的URL的子域名是否相同,以及判斷所述第一頁面的URL的父頁面的哈希hash值與所述第二頁面的URL的父頁面的哈希hash值是否相同;
在所述子域名相同或所述哈希hash值相等時,確定所述第一頁面與所述第二頁面為相鄰頁面;
在所述子域名不相同且所述哈希hash值不相等時,確定所述第一頁面與所述第二頁面不為相鄰頁面。
結(jié)合本發(fā)明的第一方面、或第一方面的第一種實現(xiàn)方式、或第一方面的第二種實現(xiàn)方式,在本發(fā)明第一方面的第三種實現(xiàn)方式中,所述將所述第一 頁面分配到新線程中具體包括:
將所述第一頁面分配到新線程中,并將所述新線程對應(yīng)的線程號寫入所述第一頁面的URL的線程號項中;所述新線程保存所述第一頁面的URL的父頁面的哈希hash值和所述第一頁面的URL的名稱;
將所述第一頁面的URL從所述任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
結(jié)合本發(fā)明的第一方面、或第一方面的第一種實現(xiàn)方式、或第一方面的第二種實現(xiàn)方式,在本發(fā)明第一方面的第四種實現(xiàn)方式中,所述將所述第一頁面分配到所述第二頁面所在的線程中具體包括:
將所述第一頁面分配到所述第二頁面所在的線程中,并在所述第一頁面的URL的線程號項中寫入所述第二頁面所在的線程對應(yīng)的線程號;所述第二頁面所在的線程保存所述第一頁面的URL的父頁面的哈希hash值和所述第一頁面的URL的名稱;
將所述第一頁面的URL從所述任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
本發(fā)明第二方面提供了一種任務(wù)分發(fā)裝置,包括:
解析單元,用于將第一頁面的統(tǒng)一資源定位符URL和所述第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
判斷單元,用于判斷所述第一頁面的URL是否已被爬取;
確定單元,用于在所述第一頁面的URL未被爬取時,根據(jù)所述第一頁面的URL中的子域名和所述第一頁面的URL的父頁面的哈希hash值確定所述第一頁面與第二頁面是否為相鄰頁面;
第一分配單元,用于在確定所述第一頁面與所述第二頁面不為相鄰頁面后,將所述第一頁面分配到新線程中;
第二分配單元,用于在確定所述第一頁面與所述第二頁面為相鄰頁面后,將所述第一頁面分配到所述第二頁面所在的線程中;
執(zhí)行單元,用于按時序控制對分配后的線程執(zhí)行下載任務(wù)。
結(jié)合本發(fā)明的第二方面,在本發(fā)明第二方面的第一種實現(xiàn)方式中,所述判斷單元具體用于根據(jù)已爬取頁的URL列表判斷所述第一頁面的URL是否 已被爬取,若是,則將所述第一頁面的URL從所述任務(wù)列表中刪去。
結(jié)合本發(fā)明的第二方面,在本發(fā)明第二方面的第二種實現(xiàn)方式中,所述確定單元具體包括:
判斷模塊,用于在所述第一頁面的URL未被爬取時,判斷所述第一頁面的URL的子域名與所述第二頁面的URL的子域名是否相同,以及判斷所述第一頁面的URL的父頁面的哈希hash值與所述第二頁面的URL的父頁面的哈希hash值是否相同;
第一確定模塊,用于在所述子域名相同或所述哈希hash值相等時,確定所述第一頁面與所述第二頁面為相鄰頁面;
第二確定模塊,用于在所述子域名不相同且所述哈希hash值不相等時,確定所述第一頁面與所述第二頁面不為相鄰頁面。
結(jié)合本發(fā)明的第二方面、或第二方面的第一種實現(xiàn)方式、或第二方面的第二種實現(xiàn)方式,在本發(fā)明第二方面的第三種實現(xiàn)方式中,所述第一分配單元具體包括:
第一分發(fā)模塊,用于將所述第一頁面分配到新線程中,并將所述新線程對應(yīng)的線程號寫入所述第一頁面的URL的線程號項中;所述新線程保存所述第一頁面的URL的父頁面的哈希hash值和所述第一頁面的URL的名稱;
第一刪寫模塊,用于將所述第一頁面的URL從所述任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
結(jié)合本發(fā)明的第二方面、或第二方面的第一種實現(xiàn)方式、或第二方面的第二種實現(xiàn)方式,在本發(fā)明第二方面的第四種實現(xiàn)方式中,所述第二分配單元具體包括:
第二分發(fā)模塊,用于將所述第一頁面分配到所述第二頁面所在的線程中,并在所述第一頁面的URL的線程號項中寫入所述第二頁面所在的線程對應(yīng)的線程號;所述第二頁面所在的線程保存所述第一頁面的URL的父頁面的哈希hash值和所述第一頁面的URL的名稱;
第二刪寫模塊,用于將所述第一頁面的URL從所述任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:將第一頁面的 統(tǒng)一資源定位符URL和所述第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;并判斷所述第一頁面的URL是否已被爬取;且在所述第一頁面的URL未被爬取時,根據(jù)所述第一頁面的URL中的子域名和所述第一頁面的URL的父頁面的哈希hash值確定所述第一頁面與第二頁面是否為相鄰頁面;當(dāng)確定所述第一頁面與所述第二頁面不為相鄰頁面時,將所述第一頁面分配到新線程中,并按時序控制執(zhí)行下載任務(wù);當(dāng)確定所述第一頁面與所述第二頁面為相鄰頁面時,將所述第一頁面分配到所述第二頁面所在的線程中,并按時序控制執(zhí)行下載任務(wù)。由于本發(fā)明對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行了合理的分配,對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載,而不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
附圖說明
圖1為本發(fā)明所提供的任務(wù)分發(fā)方法的一個實施例流程示意圖;
圖2為本發(fā)明所提供的任務(wù)分發(fā)方法的另一實施例流程示意圖;
圖3為本發(fā)明所提供的任務(wù)分發(fā)方法的另一實施例流程示意圖;
圖4為本發(fā)明所提供的任務(wù)分發(fā)方法的另一實施例流程示意圖;
圖5為本發(fā)明所提供的任務(wù)分發(fā)裝置的一個實施例結(jié)構(gòu)示意圖;
圖6為本發(fā)明所提供的任務(wù)分發(fā)裝置的另一實施例結(jié)構(gòu)示意圖;
圖7為本發(fā)明所提供的任務(wù)分發(fā)裝置的另一實施例結(jié)構(gòu)示意圖;
圖8為本發(fā)明所提供的任務(wù)分發(fā)裝置的另一實施例結(jié)構(gòu)示意圖;
圖9為本發(fā)明所提供的任務(wù)分發(fā)裝置的另一實施例結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)當(dāng)理解,盡管在本發(fā)明實施例中可能采用術(shù)語第一、第二等來描述各個用戶或終端,但用戶或終端不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將用戶或 終端彼此區(qū)分開。例如,在不脫離本發(fā)明實施例范圍的情況下,第一用戶也可以被稱為第二用戶,類似地,第二用戶也可以被稱為第一用戶;同樣的,第二用戶也可以被稱為第三用戶等等,本發(fā)明實施例對此不做限制。
首先對本發(fā)明所涉及到的一些縮略語和關(guān)鍵術(shù)語進(jìn)行定義:
網(wǎng)絡(luò)爬蟲:一種按照一定的規(guī)則,自動的抓取萬維網(wǎng)信息的程序或者腳本。
URL:在WWW上,每一信息資源都有統(tǒng)一的且在網(wǎng)上唯一的地址,該地址就叫URL(Uniform Resource Locator,統(tǒng)一資源定位符),它是WWW的統(tǒng)一資源定位標(biāo)志,就是指網(wǎng)絡(luò)地址。
相鄰頁面:各個網(wǎng)站對相鄰頁面的定義不盡相同,通常包含:同一網(wǎng)頁中包含的多個URL鏈接分別指向的不同頁面、以及子域名相同的頁面(例:http://www.very.com/entries/793336/和http://www.very.com/entries/792442/)。
爬蟲線程內(nèi)時序控制:設(shè)定網(wǎng)絡(luò)爬蟲下載線程對目標(biāo)網(wǎng)站發(fā)送的URL訪問請求的時間間隔,該時間間隔大于人點擊網(wǎng)頁所需時間間隔,且必須是一個隨機(jī)值。
IP地址;給每個連接在互聯(lián)網(wǎng)上的主機(jī)分配的一個32位地址。
本發(fā)明實施例提供了一種任務(wù)分發(fā)方法,主要是任務(wù)分發(fā)裝置所執(zhí)行的方法,請參閱圖1,本發(fā)明所提供的任務(wù)分發(fā)方法一個實施例包括:
101、將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
需要說明的是,解析器負(fù)責(zé)向任務(wù)列表傳輸數(shù)據(jù)類型,具體為將獲取到的第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;因此,該數(shù)據(jù)類型不再僅僅是解析出的URL字符串,而是包含了該URL字符串和該URL的父頁面的hash值對應(yīng)起來的一個二元數(shù)組??梢岳斫獾氖牵谌蝿?wù)列表中,該任務(wù)列表的格式也由僅僅列出URL字符串,改為不僅列出URL字符串,并且列出標(biāo)志該URL的父頁面的hash數(shù)值。
102、判斷該第一頁面的URL是否已被爬??;
需要說明的是,當(dāng)任務(wù)列表中有新的URL任務(wù)進(jìn)入任務(wù)等待隊列時,先進(jìn)行去重處理;因此,首先需要判斷該第一頁面的URL是否已被爬取。
103、當(dāng)該第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;
當(dāng)該第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;其中,該第二頁面為與該第一頁面不同的在運行線程中的頁面。
104、當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中;
當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中。
105、當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中;
當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中。
106、按時序控制對分配后的線程執(zhí)行下載任務(wù)。
本發(fā)明實施例中,通過將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;并判斷該第一頁面的URL是否已被爬??;且當(dāng)所述第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中;當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中,并按時序控制對分配后的線程執(zhí)行下載任務(wù)。由于本發(fā)明對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行了合理的分配,對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載,而不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
請參閱圖2,本發(fā)明所提供的任務(wù)分發(fā)方法另一實施例包括:
201、將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
202、根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去;
需要說明的是,根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若該第一頁面的URL曾經(jīng)被爬取過,則將該第一頁面的URL從該任務(wù)列表中刪去。
203、當(dāng)該第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;
204、當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中;
205、當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中;
需要說明的是,步驟201、203~205的具體過程可分別對應(yīng)參考圖1所示實施例中的步驟101、103~105,此處不再贅述。
206、按時序控制對分配后的線程執(zhí)行下載任務(wù)。
需要說明的是,通過網(wǎng)絡(luò)爬蟲下載線程按照時序控制執(zhí)行下載任務(wù),并對已下載的頁面內(nèi)容進(jìn)行解析,將解析出的新的URL和該URL父頁面的hash值發(fā)送到URL任務(wù)列表中,去重后生成新的URL任務(wù)等待隊列。
本發(fā)明實施例中,根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去,以提高網(wǎng)絡(luò)爬蟲的爬取效率。
請參閱圖3,本發(fā)明所提供的任務(wù)分發(fā)方法另一實施例包括:
301、將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
302、根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去;
303、當(dāng)該第一頁面的URL未被爬取時,判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;
需要說明的是,當(dāng)所述第一頁面的URL未被爬取時,判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;其中,該第二頁面為與該第一頁面不同的在運行線程中的頁面,將該第一頁面的URL的子域名和該第一頁面的URL的父頁面的hash值分別與所有正在運行線程中的其他頁面進(jìn)行比較,并判斷是否相同。
304、在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;
需要說明的是,若通過步驟303判斷得到該第一頁面的URL的子域名與該第二頁面的URL的子域名相同,或者該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的hash值相等,則確定該第一頁面與該第二頁面為相鄰頁面。
305、在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面;
需要說明的是,若通過步驟303判斷得到該第一頁面的URL的子域名與該第二頁面的URL的子域名不相同,且該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的hash值不相等,則確定該第一頁面與該第二頁面不為相鄰頁面。
306、當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中;
307、當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中;
308、按時序控制對分配后的線程執(zhí)行下載任務(wù)。
需要說明的是,步驟301、302、306~308的具體過程可分別對應(yīng)參考圖2所示實施例中的步驟201、202、204~206,此處不再贅述。
本發(fā)明實施例中,當(dāng)該第一頁面的URL未被爬取時,通過判斷該第一頁 面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同來確定該第一頁面與該第二頁面是否為相鄰頁面;且在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面。從而對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行合理的分配,以提高網(wǎng)絡(luò)爬蟲的爬取效率。
請參閱圖4,本發(fā)明所提供的任務(wù)分發(fā)方法另一實施例包括:
401、將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
402、根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去;
403、當(dāng)該第一頁面的URL未被爬取時,判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;
404、在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;
405、在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面;
406、當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中,將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;該新線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
407、當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中,在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;該第二頁面所在的線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
408、按時序控制對分配后的線程執(zhí)行下載任務(wù)。
需要說明的是,步驟401~405、408的具體過程可分別對應(yīng)參考圖3所示實施例中的步驟301~305、308,此處不再贅述。
本發(fā)明實施例中,當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中,將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中,在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;同時,將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;從而對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載,而不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
為便于理解,下面以一具體應(yīng)用場景對本發(fā)明實施例中任務(wù)分發(fā)方法進(jìn)行具體描述:
向目標(biāo)網(wǎng)頁服務(wù)器發(fā)送獲取第一頁面的請求,同時將該第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
對該任務(wù)列表中的該第一頁面的URL進(jìn)行去重處理,具體為:根據(jù)已爬取頁的URL列表判斷該任務(wù)列表中的該第一頁面的URL是否已被爬取,若該第一頁面的URL曾經(jīng)被爬取過,則將該第一頁面的URL從該任務(wù)列表中刪去;
當(dāng)該第一頁面的URL未被爬取時,通過以下判斷條件以對該第一頁面進(jìn)行具體分配:判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;可以理解為將該第一頁面的URL的子域名和該第一頁面的URL的父頁面的hash值分別與所有正在運行線程中的其他頁面進(jìn)行比較,并判斷是否相同;
經(jīng)過上述判斷對得到結(jié)果進(jìn)行如下處理:若判斷得到該第一頁面的URL 的子域名與該第二頁面的URL的子域名相同,或者該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的hash值相等,則確定該第一頁面與該第二頁面為相鄰頁面;此時,將該第一頁面分配到該第二頁面所在的線程中,在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;其中,該第二頁面所在的線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
若判斷得到該第一頁面的URL的子域名與該第二頁面的URL的子域名不相同,且該第一頁面的URL的父頁面的hash值與該第二頁面的URL的父頁面的hash值不相等,則確定該第一頁面與該第二頁面不為相鄰頁面;此時,將該第一頁面分配到新線程中,將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;其中,該新線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
將上述相鄰頁面以及不相鄰頁面進(jìn)行合理分配后,通過網(wǎng)絡(luò)爬蟲下載線程按照時序控制執(zhí)行下載任務(wù),并對已下載的頁面內(nèi)容進(jìn)行解析,將解析出的新的URL和該URL父頁面的hash值發(fā)送到URL任務(wù)列表中,去重后生成新的URL任務(wù)等待隊列。
以上對該任務(wù)分發(fā)方法進(jìn)行了說明,下面將從任務(wù)分發(fā)裝置的角度進(jìn)行描述,該任務(wù)分發(fā)裝置具體可以集成在芯片中,該芯片可以裝載在終端中,請參閱圖5,該裝置包括:
解析單元501,用于將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
判斷單元502,用于判斷該第一頁面的URL是否已被爬??;
確定單元503,用于在該第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;
第一分配單元504,用于在確定該第一頁面與該第二頁面不為相鄰頁面后,將該第一頁面分配到新線程中;
第二分配單元505,用于在確定該第一頁面與該第二頁面為相鄰頁面后,將該第一頁面分配到該第二頁面所在的線程中;
執(zhí)行單元506,用于按時序控制對分配后的線程執(zhí)行下載任務(wù)。
本發(fā)明實施例中,解析單元501將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;判斷單元502判斷該第一頁面的URL是否已被爬?。辉谠摰谝豁撁娴腢RL未被爬取時,確定單元503根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,第一分配單元504將該第一頁面分配到新線程中;當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,第二分配單元505將該第一頁面分配到該第二頁面所在的線程中,執(zhí)行單元506按時序控制對分配后的線程執(zhí)行下載任務(wù)。由于本發(fā)明對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行了合理的分配,對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載,而不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
基于上述實施例中的任務(wù)分發(fā)裝置,可選的,該判斷單元502具體用于根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去,以提高網(wǎng)絡(luò)爬蟲的爬取效率。
基于上述實施例中的任務(wù)分發(fā)裝置,可選的,如圖6所示,上述確定單元503具體包括:
判斷模塊601,用于在該第一頁面的URL未被爬取時,判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;
第一確定模塊602,用于在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;
第二確定模塊603,用于在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面。
本發(fā)明實施例中,在該第一頁面的URL未被爬取時,判斷模塊601判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同來確定該第一頁面與該第二頁面是否為相鄰頁面;第一確定模塊602在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;第二確定模塊603在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面。從而對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行合理的分配,以提高網(wǎng)絡(luò)爬蟲的爬取效率。
基于上述實施例中的任務(wù)分發(fā)裝置,可選的,如圖7所示,上述第一分配單元504具體包括:
第一分發(fā)模塊701,用于將該第一頁面分配到新線程中,并將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;該新線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
第一刪寫模塊702,用于將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
本發(fā)明實施例中,當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,第一分發(fā)模塊701將該第一頁面分配到新線程中,并將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;第一刪寫模塊702將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;從而對不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
基于上述實施例中的任務(wù)分發(fā)裝置,可選的,如圖8所示,上述第二分配單元505具體包括:
第二分發(fā)模塊801,用于將該第一頁面分配到該第二頁面所在的線程中,并在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;該第二頁面所在的線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
第二刪寫模塊802,用于將該第一頁面的URL從該任務(wù)列表中刪去,并 寫入已爬取頁的URL列表中。
本發(fā)明實施例中,當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,第二分發(fā)模塊801將該第一頁面分配到該第二頁面所在的線程中,并在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;第二刪寫模塊802將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中;從而對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
圖5至圖8所示的實施例從功能單元的角度對任務(wù)分發(fā)裝置的具體結(jié)構(gòu)進(jìn)行了說明,以下結(jié)合圖9所示的實施例從硬件角度對任務(wù)分發(fā)裝置的具體結(jié)構(gòu)進(jìn)行說明:
如圖9所示,該任務(wù)分發(fā)裝置包括:接收器901、發(fā)射器902、處理器903和存儲器904。
本發(fā)明實施例涉及的任務(wù)分發(fā)裝置可以具有比圖9所示出的更多或更少的部件,可以組合兩個或更多個部件,或者可以具有不同的部件配置或設(shè)置,各個部件可以在包括一個或多個信號處理和/或?qū)S眉呻娐吩趦?nèi)的硬件、軟件或硬件和軟件的組合實現(xiàn)。
該處理器903用于用于讀取該存儲器904中所存儲的指令,以執(zhí)行如下操作:
將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;
判斷該第一頁面的URL是否已被爬取;
當(dāng)所述第一頁面的URL未被爬取時,根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面;
當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中;
當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中;
按時序控制對分配后的線程執(zhí)行下載任務(wù)。
該處理器903具體用于執(zhí)行如下操作:
根據(jù)已爬取頁的URL列表判斷該第一頁面的URL是否已被爬取,若是,則將該第一頁面的URL從該任務(wù)列表中刪去。
該處理器903具體用于執(zhí)行如下操作:
判斷該第一頁面的URL的子域名與該第二頁面的URL的子域名是否相同,以及判斷該第一頁面的URL的父頁面的哈希hash值與該第二頁面的URL的父頁面的哈希hash值是否相同;
在該子域名相同或該哈希hash值相等時,確定該第一頁面與該第二頁面為相鄰頁面;
在該子域名不相同且該哈希hash值不相等時,確定該第一頁面與該第二頁面不為相鄰頁面。
該處理器903具體用于執(zhí)行如下操作:
將該第一頁面分配到新線程中,并將該新線程對應(yīng)的線程號寫入該第一頁面的URL的線程號項中;該新線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
該處理器903具體用于執(zhí)行如下操作:
將該第一頁面分配到該第二頁面所在的線程中,并在該第一頁面的URL的線程號項中寫入該第二頁面所在的線程對應(yīng)的線程號;該第二頁面所在的線程保存該第一頁面的URL的父頁面的哈希hash值和該第一頁面的URL的名稱;
將該第一頁面的URL從該任務(wù)列表中刪去,并寫入已爬取頁的URL列表中。
本發(fā)明實施例中,該處理器903將第一頁面的統(tǒng)一資源定位符URL和該第一頁面的URL的父頁面的哈希hash值解析到任務(wù)列表中;并對該第一頁面的URL進(jìn)行去重處理;且根據(jù)該第一頁面的URL中的子域名和該第一頁面的URL的父頁面的哈希hash值確定該第一頁面與第二頁面是否為相鄰頁面; 當(dāng)確定該第一頁面與該第二頁面不為相鄰頁面時,將該第一頁面分配到新線程中,并按時序控制執(zhí)行下載任務(wù);當(dāng)確定該第一頁面與該第二頁面為相鄰頁面時,將該第一頁面分配到該第二頁面所在的線程中,并按時序控制執(zhí)行下載任務(wù)。由于本發(fā)明對分布式網(wǎng)絡(luò)爬蟲的URL任務(wù)進(jìn)行了合理的分配,對相鄰網(wǎng)頁分配到同一線程,保證在同一IP地址分到的每個相鄰頁面串行下載,而不相鄰的頁面則分配到不同的線程并發(fā)下載;因此,在IP數(shù)量受限的情況下,不僅提高了網(wǎng)絡(luò)爬蟲的爬取效率,而且可以有效避免IP數(shù)量有限的網(wǎng)絡(luò)爬蟲被識別為惡意網(wǎng)絡(luò)爬蟲。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的 全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。