一種基于網(wǎng)頁爬取的爬蟲技術(shù)的制作方法
【專利摘要】本發(fā)明涉及【技術(shù)領(lǐng)域】,具體涉及一種基于網(wǎng)頁爬取的爬蟲技術(shù),初始化URL鏈接地址后,包括:1)均衡分配爬蟲線程從給定的入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址;2)判斷所述URL鏈接地址是否存在,是則停止爬取,否則,爬取所述URL鏈接地址放入完成隊(duì)列;3)對(duì)放入所述完成隊(duì)列的所述URL鏈接地址對(duì)應(yīng)的網(wǎng)頁進(jìn)行提取;4)對(duì)所述提取的網(wǎng)頁中的URL鏈接地址過濾,留取有效URL鏈接地址寫入運(yùn)行隊(duì)列,返回步驟1)重復(fù)以上步驟。本發(fā)明基于用戶設(shè)定的對(duì)象,根據(jù)用戶創(chuàng)建的任務(wù),從互聯(lián)網(wǎng)爬取對(duì)應(yīng)的資源、重寫URL并進(jìn)行存儲(chǔ),實(shí)現(xiàn)有針對(duì)性的對(duì)互聯(lián)網(wǎng)信息進(jìn)行采集;同時(shí),能夠?qū)崿F(xiàn)多機(jī)并行爬取、多任務(wù)調(diào)度、斷點(diǎn)續(xù)抓、分布式爬蟲管理以及爬蟲控制。
【專利說明】一種基于網(wǎng)頁爬取的爬蟲技術(shù)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)信息采集【技術(shù)領(lǐng)域】,具體涉及一種用于檔案館、圖書館、文化館等領(lǐng)域中互聯(lián)網(wǎng)信息采集的一種基于網(wǎng)頁爬取的爬蟲技術(shù)。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體。搜索引擎作為一個(gè)輔助人們檢索信息的工具,成為用戶訪問萬維網(wǎng)的入口和指南,目前的通用搜索引擎在信息獲取方面均存在著一定的局限性,即無法提供服務(wù)定制,如不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的內(nèi)容。商業(yè)搜索引擎由于面向社會(huì)提供服務(wù),追求大而全,無法按用戶的需求進(jìn)行定制,反饋給用戶的信息過多,噪聲太大難以人工處理。
[0003]網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成,傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,并保存該網(wǎng)頁信息。在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件,如層數(shù)、連接數(shù)等。
[0004]要在搜索引擎中盡可能地找到用戶所需信息,就要求搜索引擎索引盡可能多的網(wǎng)頁。采用分布式技術(shù)在盡可能短的時(shí)間內(nèi)搜集盡可能多的網(wǎng)頁,到目前為止,分布式網(wǎng)絡(luò)爬蟲系統(tǒng)已經(jīng)有了不少應(yīng)用。
[0005]網(wǎng)絡(luò)爬蟲的主過程由控制器、解析器、資源庫組成。控制器是網(wǎng)絡(luò)爬蟲的中央控制器,主要是負(fù)責(zé)根據(jù)傳過來的URL鏈接,分配一線程,然后啟動(dòng)線程調(diào)用爬蟲爬取網(wǎng)頁的過程。解析器是負(fù)責(zé)網(wǎng)絡(luò)爬蟲(從web中發(fā)現(xiàn),下載以及存儲(chǔ)內(nèi)容)的主要部分,主要是下載網(wǎng)頁,進(jìn)行頁面文本的處理,如過濾功能,抽取特殊HTML標(biāo)簽的功能,分析數(shù)據(jù)功能,將一些JS腳本標(biāo)簽、CSS代碼內(nèi)容、空格字符、HTML標(biāo)簽等內(nèi)容處理掉,爬蟲的基本工作是由解析器完成。資源庫是用來存放網(wǎng)頁中下載到的網(wǎng)頁資源數(shù)據(jù),一般都采用大型的數(shù)據(jù)庫存儲(chǔ),并對(duì)其建立索引。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)中的缺點(diǎn)而提供一種基于網(wǎng)頁爬取的爬蟲技術(shù),旨在解決目前通用搜索引擎不能基于用戶定制提供搜索服務(wù),所返回的搜索結(jié)果包含大量用戶不關(guān)心的內(nèi)容不能滿足用戶需要的技術(shù)問題。
[0007]本發(fā)明是這樣實(shí)現(xiàn)的,一種基于網(wǎng)頁爬取的爬蟲技術(shù),初始化URL鏈接地址后,包括以下步驟:
[0008]I)均衡分配爬蟲線程從給定的入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址;
[0009]2)判斷所述URL鏈接地址是否存在,是則停止爬取,否則,爬取所述URL鏈接地址放入完成隊(duì)列;[0010]3)對(duì)放入所述完成隊(duì)列的所述URL鏈接地址對(duì)應(yīng)的網(wǎng)頁進(jìn)行提??;
[0011]4)對(duì)所述提取的網(wǎng)頁中的URL鏈接地址過濾,留取有效URL鏈接地址寫入運(yùn)行隊(duì)列,返回步驟I)重復(fù)以上步驟。
[0012]當(dāng)所述排列在隊(duì)首的URL長度超過預(yù)設(shè)閾值時(shí),所述爬蟲線程停止對(duì)所述對(duì)排列在隊(duì)首的URL進(jìn)行爬取。
[0013]所述爬蟲線程從運(yùn)行隊(duì)列爬取排列在隊(duì)首的URL時(shí),采取廣度優(yōu)先法進(jìn)行爬取,即先從所述URL的起始網(wǎng)頁開始,抓取所述起始網(wǎng)頁中所有鏈接的網(wǎng)頁,然后從抓取的所述所有鏈接的網(wǎng)頁中再選擇一個(gè)網(wǎng)頁,抓取所述選擇的網(wǎng)頁中的所有鏈接頁面,直至所述所有鏈接的網(wǎng)頁中所有網(wǎng)頁中的所有鏈接頁面全部抓取完畢。
[0014]所述步驟2)中,所述爬取所述URL鏈接地址的具體步驟如下:
[0015]爬蟲線程開啟后,首先由中心爬蟲將待爬取的起始頁URL鏈接地址讀取到爬蟲緩存,然后根據(jù)爬取優(yōu)先順序?qū)Ψ湃氲剿雠老x緩存中所述起始頁URL鏈接地址中的內(nèi)容進(jìn)行抓取、解析、抽取所述內(nèi)容中的詳細(xì)URL鏈接地址放入U(xiǎn)RL存儲(chǔ)容器中,最后將抽取到的詳細(xì)URL鏈接地址進(jìn)行再次爬取。
[0016]所述對(duì)抽取的詳細(xì)URL鏈接地址進(jìn)行抽取時(shí),對(duì)抽取到的所述詳細(xì)URL鏈接地址進(jìn)行去重、增量操作,以免出現(xiàn)重復(fù)爬取同一個(gè)詳細(xì)URL網(wǎng)址的情況。
[0017]所述對(duì)抽取到的詳細(xì)URL鏈接地址進(jìn)行抽取的步驟如下:
[0018]A、從所述URL存儲(chǔ)容器中讀取待爬取的詳細(xì)URL鏈接地址,并對(duì)所述詳細(xì)URL鏈接地址進(jìn)行正確性校驗(yàn),將校驗(yàn)正確的待爬取詳細(xì)URL鏈接地址放入爬蟲緩存中;
[0019]B、從互聯(lián)網(wǎng)中爬取指定詳細(xì)URL鏈接地址,將爬取到的網(wǎng)頁信息內(nèi)容進(jìn)行相應(yīng)解碼、解壓縮;
[0020]C、解析爬取到的所述網(wǎng)頁信息,抽取出網(wǎng)頁中的URL鏈接地址,并對(duì)所述網(wǎng)頁中的URL鏈接地址進(jìn)行校驗(yàn)、去重操作;然后重復(fù)以上步驟A-C。,所述爬蟲線程從給定的入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址的步驟之前,還包括以下步驟:
[0021]在接收任務(wù)請(qǐng)求后,把任務(wù)拆分成任務(wù)分片,每個(gè)任務(wù)分片僅包含一個(gè)網(wǎng)站,每個(gè)任務(wù)分片均衡分配給多個(gè)爬蟲并行執(zhí)行。
[0022]在爬蟲線程執(zhí)行任務(wù)過程中,為每個(gè)爬蟲線程的處理進(jìn)度保存狀態(tài),每取一批網(wǎng)頁都要記錄本線程最大的網(wǎng)頁ID,記錄到數(shù)據(jù)庫里,進(jìn)程重啟后讀取ID,恢復(fù)爬蟲系統(tǒng)的爬取環(huán)境,接著抓后面的頁面。
[0023]采用Hash算法均衡分配爬蟲線程的任務(wù),即每一個(gè)URL經(jīng)過Hash函數(shù)計(jì)算得哈希值,不同的哈希值對(duì)應(yīng)不同的爬蟲,將一個(gè)URL交給Hash函數(shù)計(jì)算出的對(duì)應(yīng)爬蟲進(jìn)行處理。
[0024]本發(fā)明基于用戶設(shè)定的互聯(lián)網(wǎng)對(duì)象,根據(jù)用戶創(chuàng)建的任務(wù),從互聯(lián)網(wǎng)爬取對(duì)應(yīng)的資源、重寫URL并進(jìn)行存儲(chǔ),實(shí)現(xiàn)有針對(duì)性的對(duì)互聯(lián)網(wǎng)信息進(jìn)行采集;同時(shí),本發(fā)明能夠?qū)崿F(xiàn)多機(jī)并行爬取、多任務(wù)調(diào)度、斷點(diǎn)續(xù)抓、分布式爬蟲管理以及爬蟲控制。
【專利附圖】
【附圖說明】
[0025]圖1所示為本發(fā)明實(shí)施例提供的一種基于網(wǎng)頁爬取的爬蟲技術(shù)的流程圖;
[0026]圖2所示為本發(fā)明實(shí)施例提供的爬蟲的爬取過程示意圖?!揪唧w實(shí)施方式】
[0027]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。
[0028]本發(fā)明基于用戶設(shè)定的互聯(lián)網(wǎng)對(duì)象,根據(jù)用戶創(chuàng)建的任務(wù),從互聯(lián)網(wǎng)爬取對(duì)應(yīng)的資源、重寫URL對(duì)互聯(lián)網(wǎng)信息進(jìn)行有針對(duì)性的采集并進(jìn)行存儲(chǔ)。
[0029]參見圖1,該圖示出了本發(fā)明提供的一種基于網(wǎng)頁爬取的爬蟲技術(shù)的流程。為了便于說明,僅示出了本發(fā)明有關(guān)的部分。
[0030]一種基于網(wǎng)頁爬取的爬蟲技術(shù),初始化URL鏈接地址后,包括以下步驟:
[0031]I)均衡分配爬蟲線程從給定的URL入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址;
[0032]2)判斷所述URL鏈接地址是否存在,是則停止爬取,否則,爬取所述URL鏈接地址放入完成隊(duì)列;
[0033]3)對(duì)放入所述完成隊(duì)列的所述URL鏈接地址對(duì)應(yīng)的網(wǎng)頁進(jìn)行提取;
[0034]4)對(duì)所述提取的網(wǎng)頁中的URL鏈接地址過濾,留取有效URL鏈接地址寫入運(yùn)行隊(duì)列,返回步驟I)重復(fù)以上步驟。
[0035]本發(fā)明 實(shí)施例中,在進(jìn)行步驟I)時(shí),首先從一個(gè)給定的URL作為入口,開始爬取萬維網(wǎng)的呈蝴蝶型的可視圖,網(wǎng)絡(luò)爬蟲一般從蝴蝶型可視圖左邊機(jī)構(gòu)出發(fā)按上述步驟進(jìn)行爬取。由于本發(fā)明實(shí)施例采用運(yùn)行隊(duì)列和完成隊(duì)列來保存不同狀態(tài)的鏈接,既可以進(jìn)行海量的數(shù)據(jù)抓取,還可以擁有斷點(diǎn)續(xù)抓功能。另外,在每處理完一個(gè)URL,將其放入完成隊(duì)列,可防止重復(fù)訪問,并在每次抓取網(wǎng)頁之后分析所述網(wǎng)面中的URL進(jìn)行過濾,將經(jīng)過過濾的合法鏈接寫入運(yùn)行隊(duì)列,等待提取。
[0036]本發(fā)明實(shí)施例中,當(dāng)所述讀取的URL長度超過預(yù)設(shè)閾值時(shí),所述爬蟲線程停止對(duì)所述讀取的URL進(jìn)行爬取。
[0037]由于網(wǎng)絡(luò)爬蟲訪問的是后臺(tái)html代碼,網(wǎng)絡(luò)爬蟲在分析出URL之后,對(duì)URL進(jìn)行過濾并將過濾后得到結(jié)果放入運(yùn)行隊(duì)列。因此,在取得URL時(shí)要提防一種“爬蟲陷阱”。因?yàn)榧词挂粋€(gè)URL能訪問到相應(yīng)內(nèi)容,也不能保證存儲(chǔ)服務(wù)器端有一個(gè)的相應(yīng)頁面存在,例如動(dòng)態(tài)網(wǎng)頁的應(yīng)用可能會(huì)使網(wǎng)站中存在一些無法窮盡的地址,讓爬蟲在一個(gè)位置上無限循環(huán)而無法終結(jié)。
[0038]為此,本發(fā)明實(shí)施例中,在檢查出一個(gè)URL的長度或“/”的數(shù)量超出設(shè)定的閾值時(shí),控制網(wǎng)絡(luò)爬蟲不再獲取該URL。
[0039]本發(fā)明實(shí)施例中,所述爬蟲線程從運(yùn)行隊(duì)列爬取排列在隊(duì)首的URL時(shí),采取廣度優(yōu)先法進(jìn)行爬取,即先從所述URL的起始網(wǎng)頁開始,抓取所述起始網(wǎng)頁中所有鏈接的網(wǎng)頁,然后從抓取的所述所有鏈接的網(wǎng)頁中再選擇一個(gè)網(wǎng)頁,抓取所述選擇的網(wǎng)頁中的所有鏈接頁面,直至所述所有鏈接的網(wǎng)頁中所有網(wǎng)頁中的所有鏈接頁面全部抓取完畢。
[0040]參見圖2所示,本發(fā)明實(shí)施例中,所述步驟2)中,所述爬取所述URL鏈接地址的具體步驟如下:
[0041]爬蟲線程開啟后,首先由若干個(gè)中心爬蟲1、2、3....N,將待爬取對(duì)象I,對(duì)象2、對(duì)象3……對(duì)象N的起始頁URL鏈接地址讀取到爬蟲緩存,爬蟲緩存是圖2中的“中心網(wǎng)頁URLS待爬取庫”,系統(tǒng)在依據(jù)URL本身的特性區(qū)分出中心網(wǎng)頁和詳細(xì)頁面,爬蟲直接對(duì)中心網(wǎng)頁進(jìn)行爬取并存儲(chǔ)到文件系統(tǒng)中;詳細(xì)URL則存儲(chǔ)到緩存器(URL)中,該緩存器中存儲(chǔ)未去重的臨時(shí)詳細(xì)URL緩存器;然后去重模塊在將詳細(xì)URL進(jìn)行去重,同時(shí)改寫模塊從“URL去重庫”中讀取詳細(xì)頁面URL地址,依據(jù)詳細(xì)頁面URL的域名屬性,細(xì)節(jié)爬蟲1、2、3....N依據(jù)規(guī)則找到對(duì)應(yīng)的詳細(xì)URL地址,然后將詳細(xì)頁面存儲(chǔ)到文件記錄系統(tǒng)中。
[0042]本發(fā)明實(shí)施例中,所述對(duì)抽取的詳細(xì)URL鏈接地址進(jìn)行抽取時(shí),對(duì)抽取到的所述詳細(xì)URL鏈接地址進(jìn)行去重、增量操作,以免出現(xiàn)重復(fù)爬取同一個(gè)詳細(xì)URL網(wǎng)址的情況。
[0043]本發(fā)明實(shí)施例中,所述對(duì)抽取到的詳細(xì)URL鏈接地址進(jìn)行抽取的步驟如下:
[0044]A、中心爬蟲從所述URL存儲(chǔ)容器中讀取待爬取的URL鏈接地址,并將從URL頁面中抽取出來的鏈接地址存儲(chǔ)到“中心頁面URLS待爬取庫”、“緩存器”中,其中“中心頁面URLS待爬取庫”主要存儲(chǔ)中心頁面URL地址,“緩存器”中主要存儲(chǔ)詳細(xì)頁面的URL地址;
[0045]B、中心爬蟲根據(jù)中心網(wǎng)頁的地址將網(wǎng)頁內(nèi)容從互聯(lián)網(wǎng)中爬取下來并存儲(chǔ)到文件記錄系統(tǒng)中,并將抽取出來的詳細(xì)頁面URL地址放入到“緩存器”中;
[0046]C、去重模塊從詳細(xì)URL緩存庫中取出待爬取的詳細(xì)頁面的URL地址,依據(jù)去重規(guī)則將詳細(xì)頁面的URL地址進(jìn)行去重,并將去重后的URL地址存儲(chǔ)到“Url去重庫”;
[0047]D、改寫模塊從“Url去重庫”中拿到去重后的URL地址,根據(jù)現(xiàn)有的應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器配置,將網(wǎng)頁中的URL地址改寫成本應(yīng)用能夠訪問的地址后,存儲(chǔ)到“詳細(xì)網(wǎng)頁URL待爬取庫”;
[0048]E、細(xì)節(jié)爬蟲1、2、3....N依據(jù)規(guī)則找到對(duì)應(yīng)的詳細(xì)URL地址,然后將詳細(xì)頁面存儲(chǔ)到文件記錄系統(tǒng)中;然后重復(fù)以上步驟A-E。
[0049]本發(fā)明實(shí)施例中,為達(dá)到對(duì)整體信息采集速度和質(zhì)量的控制,對(duì)爬蟲數(shù)量、爬取速度進(jìn)行調(diào)配,并支持爬蟲任務(wù)轉(zhuǎn)移,當(dāng)某一個(gè)爬蟲不能工作時(shí),選擇或自動(dòng)將本爬蟲任務(wù)轉(zhuǎn)移給其他爬蟲。
[0050]本發(fā)明實(shí)施例中,所述多個(gè)爬蟲可以同時(shí)對(duì)多個(gè)任務(wù)進(jìn)行爬取,均衡的爬取多個(gè)任務(wù)中的鏈接地址,以便每個(gè)任務(wù)都有快速的響應(yīng)時(shí)間。
[0051]由于用戶依次下發(fā)的任務(wù)往往包含若干個(gè)網(wǎng)站,這些網(wǎng)站之間并沒有先后執(zhí)行的依賴關(guān)系,這樣會(huì)造成系統(tǒng)的吞吐量和資源利用率低。本發(fā)明實(shí)施例中,為了提高系統(tǒng)的吞吐量和資源利用率,在接收任務(wù)請(qǐng)求后,還把任務(wù)拆分成任務(wù)分片,每個(gè)任務(wù)分片僅包含一個(gè)網(wǎng)站,每個(gè)任務(wù)分片由多個(gè)爬蟲進(jìn)行并行執(zhí)行,這樣,任務(wù)調(diào)度粒度實(shí)際上是任務(wù)分片,這樣可以提高系統(tǒng)的吞吐量和資源利用率。例如,資源用戶A下發(fā)的任務(wù)包含網(wǎng)站http://www.163.com、http: //www.yahoo, com.cn、http: //news.qq.com,用戶 B 下發(fā)的任務(wù)包括網(wǎng)站 http://news, baidu.com>http://news, google.com、http: //www.163.com。如果系統(tǒng)的調(diào)度粒度是任務(wù),那么同一時(shí)刻只允許一個(gè)用戶的任務(wù)執(zhí)行,因?yàn)锳和B的任務(wù)都包含相同的網(wǎng)站http://www.163.com,更糟的是A的任務(wù)只能給一個(gè)爬蟲執(zhí)行,不利于爬蟲間的負(fù)載均衡。而如果調(diào)度粒度是任務(wù)分片,那么A和B下發(fā)的任務(wù)就被差分成了六個(gè)任務(wù)分片,其中只有兩個(gè)任務(wù)分片存在互斥的關(guān)系,換句話說只有一個(gè)任務(wù)分片需要等待,其他五個(gè)任務(wù)分片都可以并行執(zhí)行,同時(shí),這五個(gè)任務(wù)分片可以根據(jù)調(diào)度算法分配給若干個(gè)不同爬蟲執(zhí)行,從而提高了系統(tǒng)的吞吐量和資源利用率。
[0052]為了提高系統(tǒng)吞吐量,系統(tǒng)要保證不同用戶下發(fā)的任務(wù)并行執(zhí)行,同時(shí),為了避免對(duì)網(wǎng)站負(fù)載過重以及避免無謂的重復(fù)抓取,本發(fā)明實(shí)施例中,采用相同網(wǎng)站串行執(zhí)行法進(jìn)行任務(wù)的爬取,即在同一時(shí)刻針對(duì)同一網(wǎng)站的抓取任務(wù)只允許有一個(gè)爬蟲在執(zhí)行。
[0053]具體的,由于不同任務(wù)中包含有相同的網(wǎng)站,經(jīng)過運(yùn)算會(huì)映射到相同的爬蟲上。如果爬蟲對(duì)此網(wǎng)站已經(jīng)開始信息采集工作,為了保證網(wǎng)站的負(fù)載不至過重,后續(xù)的任務(wù)將處于阻塞狀態(tài)除非前一工作已經(jīng)完成,即“相同的網(wǎng)站串行執(zhí)行”。
[0054]由于是并行爬蟲,不可避免的會(huì)遇到爬蟲加入退出的情況,本發(fā)明實(shí)施例根據(jù)分配算法減少爬蟲節(jié)點(diǎn)增減時(shí)的任務(wù)重新分配。
[0055]本發(fā)明實(shí)施例中,爬蟲的任務(wù)分配算法可以采用Hash算法的思想,即每一個(gè)URL經(jīng)過Hash函數(shù)計(jì)算得哈希值,不同的哈希值對(duì)應(yīng)不同的爬蟲,將URL交給Hash函數(shù)計(jì)算出的爬蟲處理。具體處理方法如下:若最初有20個(gè)爬蟲處于等待狀態(tài),那么一個(gè)可能的Hash函數(shù)方案為:
[0056]Keyi = Transfer(host (URLi))mod20
[0057]host O函數(shù)取每一個(gè)URL的主機(jī)地址。如對(duì)http://sport, qq.com/使用host()函數(shù)的得到http://www.qq.com.這樣的取值可以使一個(gè)服務(wù)其上的所有文檔由一個(gè)爬蟲下載并存儲(chǔ)。TransferO函數(shù)對(duì)主機(jī)地址進(jìn)行計(jì)算:將host O函數(shù)得到的字符串的每一個(gè)字符轉(zhuǎn)化為相應(yīng)的整數(shù)并累加,最后對(duì)20取模,得到Keyi值。Keyi取值為0_19,分別對(duì)應(yīng)20個(gè)處于等待狀態(tài)的爬蟲,URLi根據(jù)以上Hash函數(shù)計(jì)算出對(duì)應(yīng)的爬蟲并將任務(wù)傳遞給該對(duì)應(yīng)爬蟲進(jìn)行處理。
[0058]本發(fā)明實(shí)施例中,當(dāng)爬蟲服務(wù)器因?yàn)槟撤N原因出現(xiàn)了故障之后,在爬蟲再次重啟之后,爬蟲能夠智能的判斷爬蟲上次任務(wù)的狀態(tài),根據(jù)任務(wù)的狀態(tài)繼續(xù)爬取沒有爬完的鏈接地址。
[0059]為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例中,在執(zhí)行任務(wù)過程中,為每個(gè)爬蟲線程的處理進(jìn)度保存狀態(tài),每取一批網(wǎng)頁都要記錄本線程最大的網(wǎng)頁ID,記錄到數(shù)據(jù)庫里,進(jìn)程重啟后可以讀取這個(gè)ID,從而恢復(fù)爬蟲系統(tǒng)的爬取環(huán)境,接著抓取后面的頁面。
[0060]本發(fā)明實(shí)施例中,在爬蟲一個(gè)節(jié)點(diǎn)上采用多線程同步1/0或者單線程異步1/0以實(shí)現(xiàn)并行爬取。由于本發(fā)明實(shí)施例采用分布式網(wǎng)絡(luò)爬蟲方案,因而通過總線控制,可以實(shí)現(xiàn)多個(gè)網(wǎng)絡(luò)爬蟲并行爬取,從而有效的保證網(wǎng)絡(luò)爬蟲的爬取性能。但由于多機(jī)并行爬取的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)需要考慮各節(jié)點(diǎn)之間的通信和調(diào)度,因此,在一個(gè)爬蟲節(jié)點(diǎn)上采用多線程同步I/o或者單線程異步1/0以實(shí)現(xiàn)并行爬取。
[0061]在采用本發(fā)明實(shí)施例的方法進(jìn)行工作時(shí),可采用下述的系統(tǒng)結(jié)構(gòu)進(jìn)行,如一臺(tái)中央主機(jī),多臺(tái)負(fù)責(zé)爬行網(wǎng)頁爬蟲機(jī)器,并且只與中央主機(jī)通信。中央主機(jī)從一個(gè)文件里讀取URL,并把他們分發(fā)給爬蟲機(jī)器的Crawler進(jìn)程。爬蟲采用異步1/0同時(shí)從若干個(gè)網(wǎng)站上獲取數(shù)據(jù)。所有的Crawler將下載來的HTML頁面壓縮并存放在磁盤上,然后索引器進(jìn)程從所述HTML頁面中將URL提取出來并存放在另一個(gè)磁盤文件中,URL解析器進(jìn)程讀取這個(gè)存放鏈接的文件,將其中的相對(duì)鏈接轉(zhuǎn)化為絕對(duì)鏈接,然后存入一個(gè)文件供中央主機(jī)讀取。
[0062]本發(fā)明基于用戶設(shè)定的互聯(lián)網(wǎng)對(duì)象,根據(jù)用戶創(chuàng)建的任務(wù),從互聯(lián)網(wǎng)爬取對(duì)應(yīng)的資源、過濾URL并進(jìn)行存儲(chǔ),實(shí)現(xiàn)有針對(duì)性的對(duì)互聯(lián)網(wǎng)信息進(jìn)行采集;同時(shí),本發(fā)明能夠?qū)崿F(xiàn)多機(jī)并行爬取、多任務(wù)調(diào)度、斷點(diǎn)續(xù)抓、分布式爬蟲管理以及爬蟲控制。
[0063]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,初始化URL鏈接地址后,包括以下步驟:1)均衡分配爬蟲線程從給定的入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址; 2)判斷所述URL鏈接地址是否存在,是則停止爬取,否則,爬取所述URL鏈接地址放入完成隊(duì)列; 3)對(duì)放入所述完成隊(duì)列的所述URL鏈接地址對(duì)應(yīng)的網(wǎng)頁進(jìn)行提??; 4)對(duì)所述提取的網(wǎng)頁中的URL鏈接地址過濾,留取有效URL鏈接地址寫入運(yùn)行隊(duì)列,返回步驟I)重復(fù)以上步驟。
2.根據(jù)權(quán)利要求1所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,當(dāng)所述排列在隊(duì)首的URL長度超過預(yù)設(shè)閾值時(shí),所述爬蟲線程停止對(duì)所述對(duì)排列在隊(duì)首的URL進(jìn)行爬取。
3.根據(jù)權(quán)利要求1或2所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,所述爬蟲線程從運(yùn)行隊(duì)列爬取排列在隊(duì)首的URL時(shí),采取廣度優(yōu)先法進(jìn)行爬取,即先從所述URL的起始網(wǎng)頁開始,抓取所述起始網(wǎng)頁中所有鏈接的網(wǎng)頁,然后從抓取的所述所有鏈接的網(wǎng)頁中再選擇一個(gè)網(wǎng)頁,抓取所述選擇的網(wǎng)頁中的所有鏈接頁面,直至所述所有鏈接的網(wǎng)頁中所有網(wǎng)頁中的所有鏈接頁面全部抓取完畢。
4.根據(jù)權(quán)利要求1所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,所述步驟2)中,所述爬取所述URL鏈接地址的具體步驟如下: 爬蟲線程開啟后,首先由中心爬蟲將待爬取的起始頁URL鏈接地址讀取到爬蟲緩存,然后根據(jù)爬取優(yōu)先順序?qū)Ψ湃氲剿雠老x緩存中所述起始頁URL鏈接地址中的內(nèi)容進(jìn)行抓取、解析、抽取所述內(nèi)容中的詳細(xì)URL鏈接地址放入U(xiǎn)RL存儲(chǔ)容器中,最后將抽取到的詳細(xì)URL鏈接地址進(jìn)行再次爬取。
5.根據(jù)權(quán)利要求4所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,所述對(duì)抽取的詳細(xì)URL鏈接地址進(jìn)行抽取時(shí),對(duì)抽取到的所述詳細(xì)URL鏈接地址進(jìn)行去重、增量操作,以免出現(xiàn)重復(fù)爬取同一個(gè)詳細(xì)URL網(wǎng)址的情況。
6.根據(jù)權(quán)利要求4所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,所述對(duì)抽取到的詳細(xì)URL鏈接地址進(jìn)行抽取的步驟如下: A、從所述URL存儲(chǔ)容器中讀取待爬取的詳細(xì)URL鏈接地址,并對(duì)所述詳細(xì)URL鏈接地址進(jìn)行正確性校驗(yàn),將校驗(yàn)正確的待爬取詳細(xì)URL鏈接地址放入爬蟲緩存中; B、從互聯(lián)網(wǎng)中爬取指定詳細(xì)URL鏈接地址,將爬取到的網(wǎng)頁信息內(nèi)容進(jìn)行相應(yīng)解碼、解壓縮; C、解析爬取到的所述網(wǎng)頁信息,抽取出網(wǎng)頁中的URL鏈接地址,并對(duì)所述網(wǎng)頁中的URL鏈接地址進(jìn)行校驗(yàn)、去重操作;然后重復(fù)以上步驟A-C。
7.根據(jù)權(quán)利要求1所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,所述爬蟲線程從給定的入口起在運(yùn)行隊(duì)列讀取排列在隊(duì)首的URL鏈接地址的步驟之前,還包括以下步驟: 在接收任務(wù)請(qǐng)求后,把任務(wù)拆分成任務(wù)分片,每個(gè)任務(wù)分片僅包含一個(gè)網(wǎng)站,每個(gè)任務(wù)分片均衡分配給由多個(gè)爬蟲并行執(zhí)行。
8.根據(jù)權(quán)利要求1所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,在爬蟲線程執(zhí)行任務(wù)過程中,為每個(gè)爬蟲線程的處理進(jìn)度保存狀態(tài),每取一批網(wǎng)頁都要記錄本線程最大的網(wǎng)頁ID,記錄到數(shù)據(jù)庫里,進(jìn)程重啟后讀取IDID,恢復(fù)爬蟲系統(tǒng)的爬取環(huán)境,接著抓后面的頁面。
9.根據(jù)權(quán)利要求1所述一種基于網(wǎng)頁爬取的爬蟲技術(shù),其特征在于,采用Hash算法均衡分配爬蟲線程的任務(wù),即每一個(gè)URL經(jīng)過Hash函數(shù)計(jì)算得哈希值,不同的哈希值對(duì)應(yīng)不同的爬蟲,將一個(gè)URL交給Hash函數(shù)計(jì)算出的對(duì)應(yīng)爬蟲進(jìn)行處理。
【文檔編號(hào)】G06F17/30GK103970788SQ201310040090
【公開日】2014年8月6日 申請(qǐng)日期:2013年2月1日 優(yōu)先權(quán)日:2013年2月1日
【發(fā)明者】尹科 申請(qǐng)人:北京英富森信息技術(shù)有限公司