網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版_第1頁(yè)
網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版_第2頁(yè)
網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版_第3頁(yè)
網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版_第4頁(yè)
網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

年4月19日網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)完整版文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)摘要網(wǎng)絡(luò)爬蟲(chóng)將下載的網(wǎng)頁(yè)和收集到的網(wǎng)頁(yè)信息存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中以供搜索引擎使用,它是一個(gè)專(zhuān)門(mén)從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)并分析網(wǎng)頁(yè)的程序。隨著網(wǎng)絡(luò)的快速發(fā)展,人們對(duì)搜索引擎的要求也越來(lái)越高,而網(wǎng)絡(luò)爬蟲(chóng)的效率直接影響著搜索引擎的質(zhì)量。本課題研究的是通用網(wǎng)絡(luò)爬蟲(chóng),它是從一個(gè)或若干個(gè)初始網(wǎng)頁(yè)的鏈接開(kāi)始進(jìn)而得到一個(gè)鏈接隊(duì)列。伴隨著網(wǎng)頁(yè)的抓取又不斷從抓取到的網(wǎng)頁(yè)中抽取新鏈接放入到鏈接隊(duì)列中,直到爬蟲(chóng)系統(tǒng)滿(mǎn)足了停止條件。該課題主要涉及到了緩沖池技術(shù),多線程技術(shù),套接字技術(shù),HTTP和SSL協(xié)議,正則表示式,Linux網(wǎng)絡(luò)編程技術(shù),PHP+Apache的使用等相關(guān)技術(shù)。本說(shuō)明書(shū)敘述的網(wǎng)絡(luò)爬蟲(chóng)是以LinuxC實(shí)現(xiàn)的,加以PHP語(yǔ)言編寫(xiě)的界面使用戶(hù)更加方面的操作,利用Shell腳本和Apache服務(wù)器使得爬蟲(chóng)系統(tǒng)和界面很好的結(jié)合在一起。關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng)緩沖池正則表示式SSL協(xié)議多線程

目次1引言 11.1課題選題背景 11.2課題研究的意義 22需求分析 32.1功能需求分析 32.2系統(tǒng)性能分析 43系統(tǒng)設(shè)計(jì) 53.1系統(tǒng)工作流程圖 53.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 63.3系統(tǒng)各功能流程圖 74系統(tǒng)實(shí)現(xiàn) 104.1相關(guān)技術(shù)分析 104.2系統(tǒng)功能模塊的實(shí)現(xiàn) 115測(cè)試與結(jié)果 17結(jié)論 23致謝 24參考文獻(xiàn) 251引言隨著網(wǎng)絡(luò)技術(shù)日新月異的發(fā)展,互聯(lián)網(wǎng)儼然已成為信息的最大載體。為了能夠在浩瀚的信息海洋中精確地查詢(xún)用戶(hù)所需要的信息,搜索引擎技術(shù)應(yīng)運(yùn)而生。當(dāng)前比較流行的搜索引擎是Google和百度,她們擁有著龐大的用戶(hù)數(shù)量。作為搜索引擎的重要組成部分,網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)直接影響著搜索引擎的質(zhì)量。網(wǎng)絡(luò)爬蟲(chóng)是一個(gè)專(zhuān)門(mén)從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)并分析網(wǎng)頁(yè)的程序。它將下載的網(wǎng)頁(yè)和采集到的網(wǎng)頁(yè)信息存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中以供搜索引擎使用。網(wǎng)絡(luò)爬蟲(chóng)的工作原理是從一個(gè)或若干初始網(wǎng)頁(yè)的鏈接開(kāi)始進(jìn)而得到一個(gè)鏈接隊(duì)列。伴隨著網(wǎng)頁(yè)的抓取又不斷從抓取到的網(wǎng)頁(yè)里抽取新的鏈接放入到鏈接隊(duì)列中,直到爬蟲(chóng)程序滿(mǎn)足系統(tǒng)的某一條件時(shí)停止。本說(shuō)明書(shū)對(duì)課題背景進(jìn)行簡(jiǎn)單介紹的同時(shí),又對(duì)研究網(wǎng)絡(luò)爬蟲(chóng)的意義進(jìn)行了敘述,在此基礎(chǔ)上,詳細(xì)的介紹來(lái)了利用C語(yǔ)言在linux系統(tǒng)上開(kāi)發(fā)出多線程網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)步驟。1.1課題選題背景搜索引擎是用戶(hù)在網(wǎng)上沖浪時(shí)經(jīng)常使用的一種工具,毫無(wú)疑問(wèn),每個(gè)用戶(hù)都能夠經(jīng)過(guò)搜索引擎得到自己所需要的網(wǎng)絡(luò)資源。搜索引擎一詞在互聯(lián)網(wǎng)領(lǐng)域得到廣泛的應(yīng)用,可是每個(gè)地區(qū)對(duì)它又有著不同的理解。在一些歐美國(guó)家搜索引擎常常是基于因特網(wǎng)的,它們經(jīng)過(guò)網(wǎng)絡(luò)爬蟲(chóng)程序采集網(wǎng)頁(yè),而且索引網(wǎng)頁(yè)的每個(gè)詞語(yǔ),也就是全文檢索。而在一些亞洲國(guó)家,搜索引擎一般是基于網(wǎng)站目錄的搜索服務(wù)??偟膩?lái)說(shuō):搜索引擎只是一種檢索信息的工具。它的檢索方式分為以下兩種:一種是目錄型的方式,爬蟲(chóng)程序把網(wǎng)絡(luò)的資源采集在一起,再根據(jù)資源類(lèi)型的不同而分成不同的目錄,然后繼續(xù)一層層地進(jìn)行分類(lèi),人們查詢(xún)信息時(shí)就是按分類(lèi)一層層進(jìn)入的,最后得到自己所需求的信息。另一種是用戶(hù)經(jīng)常使用的關(guān)鍵字方式,搜索引擎根據(jù)用戶(hù)輸入的關(guān)鍵詞檢索用戶(hù)所需資源的地址,然后把這些地址反饋給用戶(hù)。1.2課題研究的意義網(wǎng)絡(luò)在我們的生活中越來(lái)越重要,網(wǎng)絡(luò)的信息量也越來(lái)越大,研究該課題能夠更好的理解網(wǎng)絡(luò)爬蟲(chóng)在搜索引擎中的作用以及網(wǎng)絡(luò)爬蟲(chóng)的原理?,F(xiàn)實(shí)中,一般的服務(wù)器大多是linux系統(tǒng)該課題更好的配合了linux系統(tǒng)上運(yùn)行爬蟲(chóng)程序,加上界面更容易操作。21世紀(jì)是一個(gè)講究信息安全的時(shí)代,于是網(wǎng)站上出現(xiàn)了越來(lái)越多的https(超文本傳輸安全協(xié)議)協(xié)議的鏈接,該課題很好的利用了SSL協(xié)議解決了下載https協(xié)議鏈接的問(wèn)題。設(shè)備的內(nèi)存是珍貴的,如何更加合理有效地利用內(nèi)存提高內(nèi)存的利用率是值得研究的,該課題為了解決內(nèi)存的利用使用了內(nèi)存池來(lái)提高內(nèi)存的使用率。2需求分析網(wǎng)絡(luò)爬蟲(chóng)是一個(gè)專(zhuān)門(mén)從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)并分析網(wǎng)頁(yè)的程序。它將下載的網(wǎng)頁(yè)和收集到的信息存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中以供搜索引擎使用。網(wǎng)絡(luò)爬蟲(chóng)的工作原理是從一個(gè)或若干初始網(wǎng)頁(yè)的鏈接開(kāi)始進(jìn)而得到一個(gè)鏈接隊(duì)列。伴隨著網(wǎng)頁(yè)的抓取又不斷從抓取到的網(wǎng)頁(yè)里抽取新的鏈接放入到鏈接隊(duì)列中,直到爬蟲(chóng)程序滿(mǎn)足系統(tǒng)的某一條件時(shí)停止。它是搜索引擎的重要組成部分。2.1功能需求分析網(wǎng)頁(yè)下載功能能夠下載任何http協(xié)議和https協(xié)議的鏈接的網(wǎng)頁(yè)。構(gòu)造HTTP請(qǐng)求中的GET請(qǐng)求。分析HTTP響應(yīng)請(qǐng)求。網(wǎng)頁(yè)分析功能提取網(wǎng)頁(yè)標(biāo)題。提取網(wǎng)頁(yè)關(guān)鍵字。提取網(wǎng)頁(yè)摘要。提取網(wǎng)頁(yè)鏈接并統(tǒng)計(jì)數(shù)量。把新鏈接加入到URL隊(duì)列。內(nèi)存池功能能夠分配固定大小的內(nèi)存。能夠回收內(nèi)存對(duì)象。能夠釋放內(nèi)存對(duì)象。能夠銷(xiāo)毀內(nèi)存池。能夠分配固定大小的內(nèi)存。保存功能能夠正確保存網(wǎng)頁(yè)以及網(wǎng)頁(yè)信息到文件。功能把系統(tǒng)運(yùn)行中的異常寫(xiě)入日志文件。界面能夠配置參數(shù)和運(yùn)行后臺(tái)的爬蟲(chóng)系統(tǒng)。能夠查看運(yùn)行結(jié)果。2.2系統(tǒng)性能分析當(dāng)用戶(hù)使用系統(tǒng)時(shí),系統(tǒng)需要能夠?qū)τ谝恍┊惓顩r系統(tǒng)能夠記錄并跳過(guò)此異常繼續(xù)執(zhí)行。系統(tǒng)需要具有較高的可移植性和可靠性。系統(tǒng)需要具有很好的可測(cè)試性和可維護(hù)性。網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)是不停的從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)和采集網(wǎng)頁(yè)信息的系統(tǒng)。由于網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)是搜索引擎的組成部分,搜索引擎要利用到爬蟲(chóng)系統(tǒng)的信息,因此系統(tǒng)要設(shè)計(jì)合理的存儲(chǔ)文件并建立索引。3系統(tǒng)設(shè)計(jì)3.1系統(tǒng)工作流程圖本系統(tǒng)經(jīng)過(guò)IE共同訪問(wèn)Apache服務(wù)器的發(fā)布的頁(yè)面、Apache服務(wù)器返回頁(yè)面方便用戶(hù)操作。系統(tǒng)物理結(jié)構(gòu)如圖3-1:圖3-1系統(tǒng)物理結(jié)構(gòu)圖界面的流程如圖3-2:圖3-2頁(yè)面結(jié)構(gòu)圖.網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)流程如圖3-3:圖3-3系統(tǒng)流程圖3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)中主要是使用了鏈表作為URL隊(duì)列,而鏈表中的每個(gè)結(jié)構(gòu)體是一個(gè)數(shù)據(jù)單元,數(shù)據(jù)單元中的元素及其含義如表3-1:表3-1數(shù)據(jù)結(jié)構(gòu)表字段類(lèi)型含義hostchar*網(wǎng)頁(yè)所在的主機(jī)portint網(wǎng)絡(luò)服務(wù)器所使用的端口dirchar*網(wǎng)頁(yè)所在的目錄pagechar*網(wǎng)頁(yè)文件名filechar*本地保存的文件名pageinfochar*保存網(wǎng)頁(yè)信息的文件名urlchar*存儲(chǔ)網(wǎng)頁(yè)鏈接titlechar*網(wǎng)頁(yè)的標(biāo)題keywordschar*網(wǎng)頁(yè)的關(guān)鍵字bodychar*網(wǎng)頁(yè)的摘要protocalchar連接使用的協(xié)議0-http1--httpsurl_countint網(wǎng)頁(yè)中的鏈接數(shù)目typechar*網(wǎng)頁(yè)類(lèi)型codechar*網(wǎng)頁(yè)編碼page_sizeint網(wǎng)頁(yè)大小is_handledchar是否處理過(guò)brotherstrcut*兄弟節(jié)點(diǎn)鏈表指針childstruct*子節(jié)點(diǎn)鏈表指針系統(tǒng)把初始的鏈接保存在了init_url文件中;把一些異常情況保存在了crawl.log文件中;把下載的網(wǎng)頁(yè)文件保存在了page_db文件夾中;把網(wǎng)頁(yè)信息文件保存在page_info文件夾中;把網(wǎng)頁(yè)中鏈接文件保存在了page_url文件夾中;把網(wǎng)頁(yè)文件名稱(chēng),網(wǎng)頁(yè)信息文件名稱(chēng),網(wǎng)頁(yè)鏈接文件名稱(chēng)保存在link.db文件中。3.3系統(tǒng)各功能流程圖主模塊功能流程圖如圖3-5:圖3-4主模塊流程圖需要說(shuō)明的問(wèn)題:指向內(nèi)存池的是一個(gè)全局變量指針。初始的URL必須從文件中讀取,然后調(diào)用函數(shù)get_host()解析出URL的host,page,dir,port。必須要有全局變量指向URL隊(duì)列的頭。功能模塊流程圖如圖3-6:圖3-5下載模塊流程圖需要說(shuō)明的問(wèn)題:?jiǎn)?dòng)線程下載。對(duì)于GET請(qǐng)求不變動(dòng)的部分使用宏定義。在鏈接服務(wù)器前需要建立socket套接字并進(jìn)行域名解析。注意HTTP報(bào)文頭的接受。功能模塊流程圖如圖3-7:圖3-6解析模塊流程圖需要說(shuō)明的問(wèn)題:利用系統(tǒng)函數(shù)把網(wǎng)頁(yè)讀入內(nèi)存。利用正則表示式提取相關(guān)信息。把一個(gè)網(wǎng)頁(yè)的URL寫(xiě)入文件保存。功能模塊流程圖如圖3-8:圖3-7界面流程圖需要說(shuō)明的問(wèn)題:配置界面配置爬行深度的參數(shù)必須大于0。每個(gè)界面必須有返回按鈕和返回首頁(yè)的按鈕。配置界面輸入的URL不能為空。4系統(tǒng)實(shí)現(xiàn)4.1相關(guān)技術(shù)分析4.1.1操作系統(tǒng)能夠運(yùn)行多線程還不到40年,但線程的出現(xiàn)帶來(lái)了很多正面影響,使用多線程具有以下好處:和進(jìn)程相比,多線程是多任務(wù)操作中十分“節(jié)儉”的方式。在Linux操作系統(tǒng)中,開(kāi)啟新進(jìn)程來(lái)達(dá)到多任務(wù)工作的目的是十分"昂貴"的,因?yàn)楸仨毥o新進(jìn)程分配獨(dú)立的地址空間以及用來(lái)維護(hù)代碼段的眾多數(shù)據(jù)表、堆棧段、數(shù)據(jù)段。而多個(gè)線程共享相同的內(nèi)存空間和大部分?jǐn)?shù)據(jù),因此啟動(dòng)一個(gè)線程跟啟動(dòng)一個(gè)進(jìn)程在所花費(fèi)的空間上有很大的差別,同時(shí),在啟動(dòng)需要的時(shí)間上線程要遠(yuǎn)遠(yuǎn)小于進(jìn)程。通信機(jī)制。由于進(jìn)程具有獨(dú)立的數(shù)據(jù)空間,因此進(jìn)程間只能經(jīng)過(guò)通信的方式進(jìn)行數(shù)據(jù)傳遞,顯然這種方式是耗時(shí)又不方便的。由于線程共享數(shù)據(jù)空間的特性,因此線程與線程通信更加方便。當(dāng)然共享特性也帶了一定的數(shù)據(jù)不一致的風(fēng)險(xiǎn),但能夠經(jīng)過(guò)鎖機(jī)制來(lái)解決。4.1申請(qǐng)內(nèi)存空間幾乎是每個(gè)系統(tǒng)必須涉及到的,而直接使用系統(tǒng)函數(shù)malloc和free進(jìn)行內(nèi)存分配和釋放會(huì)產(chǎn)生額外的開(kāi)銷(xiāo)而且頻繁使用還會(huì)產(chǎn)生大量?jī)?nèi)存碎片從而降低程序運(yùn)行效率,同時(shí)還容易造成內(nèi)存泄漏。內(nèi)存池很好的解決了直接調(diào)用系統(tǒng)函數(shù)所帶來(lái)的問(wèn)題。也就說(shuō)使用內(nèi)存池進(jìn)行內(nèi)存申請(qǐng)、釋放要比使用malloc和free方式快,系統(tǒng)開(kāi)銷(xiāo)??;不會(huì)造成內(nèi)存碎片或有很少的內(nèi)存碎片同時(shí)內(nèi)存池很好的避免了內(nèi)存泄漏。4.1.3正則表示式在本說(shuō)明書(shū)所敘述的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)中在提取網(wǎng)頁(yè)中鏈接、提取網(wǎng)頁(yè)標(biāo)題等功能函數(shù)中使用了正則表示式。正則表示式是Linux系統(tǒng)中一種非常重要的字符串搜索模式,是一組規(guī)則字符的集合。這些規(guī)則字符能夠組成我們所需要的搜索規(guī)則,效率高、功能強(qiáng),能夠極大地簡(jiǎn)化處理字符串時(shí)的復(fù)雜度。雖然標(biāo)準(zhǔn)C是不支持正則表示式的,可是能夠在POSIX函數(shù)庫(kù)中的regex系列函數(shù)的輔助下在程序中運(yùn)用它們。4.1SSL的全稱(chēng)是SecureSocketsLayer,它是一個(gè)為基于TCP的應(yīng)用層協(xié)議提供安全連接的安全協(xié)議,為網(wǎng)絡(luò)上數(shù)據(jù)的傳輸提供安全性保證,因而被廣泛應(yīng)用于網(wǎng)上銀行、電子商務(wù)等金融領(lǐng)域。SSL提供的安全連接(如https)能夠?qū)崿F(xiàn):連接的私密性:傳輸?shù)臄?shù)據(jù)是利用對(duì)稱(chēng)密鑰進(jìn)行加密,并利用RSA加密傳輸對(duì)稱(chēng)密鑰算法中使用的密鑰。身份驗(yàn)證:對(duì)服務(wù)器和客戶(hù)端進(jìn)行身份驗(yàn)證的方法是基于證書(shū)利用數(shù)字簽名實(shí)現(xiàn)的。SSL服務(wù)器和客戶(hù)端經(jīng)過(guò)公鑰基礎(chǔ)設(shè)施提供的機(jī)制從認(rèn)證機(jī)構(gòu)獲取證書(shū)。連接的可靠性:使用基于密鑰的消息驗(yàn)證碼來(lái)檢驗(yàn)傳輸消息的完整性。消息驗(yàn)證碼是將密鑰和隨機(jī)數(shù)轉(zhuǎn)換為定長(zhǎng)數(shù)據(jù)的一種算法。SSL協(xié)議本身能夠分為兩層:底層為SSL記錄協(xié)議(SSLrecordprotocol);上層為SSL握手協(xié)議(SSLhandshakeprotocol)、SSL密碼變化協(xié)議(SSLchangecipherspecprotocol)和SSL警告協(xié)議(SSLalertprotocol)。4.2系統(tǒng)功能模塊的實(shí)現(xiàn)主模塊主要事件流:調(diào)用內(nèi)存池模塊創(chuàng)立內(nèi)存池返回指向內(nèi)存池的指針并在程序結(jié)尾銷(xiāo)毀內(nèi)存池。初始URL隊(duì)列。調(diào)用下載模塊和分析模塊。異常事件流:創(chuàng)立內(nèi)存池失敗。初始URL隊(duì)列失敗。重要編碼實(shí)現(xiàn): cache=object_cache_create(sizeof(WEBNODE),OBJECT_COUNT); confp=fopen(CONF_PATH,"r"); crawl_deep=atoi(buf); rfp=fopen(FILE_PATH,"r"); while() { get_host(); add_init_node(); }handle_init_node(nodeheader,FIRST); object_cache_destroy(cache);內(nèi)存池模塊主要事件流:創(chuàng)立內(nèi)存池。銷(xiāo)毀內(nèi)存池。分配內(nèi)存對(duì)象?;厥諆?nèi)存對(duì)象。釋放內(nèi)存對(duì)象。異常事件流:申請(qǐng)大塊內(nèi)存失敗。分配內(nèi)存對(duì)象失敗。釋放內(nèi)存塊失敗。模塊重要函數(shù)接口:intobject_cache_init(object_cache_t*cache,size_tunit_size,unsignedcount);接口功能:初始化對(duì)象緩存。針對(duì)已有的緩存結(jié)構(gòu)進(jìn)行初始化;若count為0,則初始化后緩存中不包含可用對(duì)象在第一次申請(qǐng)時(shí)創(chuàng)立OBJECT_CACHE_DEFAULT_COUNT數(shù)目的對(duì)象。voidobject_cache_free(object_cache_t*cache);接口功能:釋放對(duì)象緩存內(nèi)部存儲(chǔ)。object_cache_t*object_cache_create(size_tunit_size,unsignedcount);接口功能:創(chuàng)立對(duì)象緩存池。unit_size單個(gè)對(duì)象大??;count初始對(duì)象數(shù)目,同樣作為自動(dòng)擴(kuò)大的數(shù)目。voidobject_cache_destroy(object_cache_t*cache);接口功能:銷(xiāo)毀對(duì)象緩存池,同時(shí)銷(xiāo)毀緩存中的所有對(duì)象。void*object_new(object_cache_t*cache);接口功能:從緩存中獲取一個(gè)新對(duì)象intobject_del(object_cache_t*cache,void*object);接口功能:將對(duì)象釋放到緩存中。下載模塊主要事件流:構(gòu)造GET請(qǐng)求。鏈接服務(wù)器。發(fā)送GET請(qǐng)求。接受網(wǎng)站返回的數(shù)據(jù)。異常事件流:鏈接網(wǎng)站服務(wù)器失敗。發(fā)送請(qǐng)失敗。接受網(wǎng)站返回?cái)?shù)據(jù)失敗重要代碼實(shí)現(xiàn):staticintget_https_page(intsockfd,WEBNODE*node,char*request){ SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); ctx=SSL_CTX_new(SSLv23_client_method()); ssl=SSL_new(ctx); SSL_set_fd(ssl,sockfd); if(SSL_connect(ssl)) else SSL_get_cipher(ssl); len=SSL_write(ssl,request,strlen(request)); while() {。。。接受報(bào)文頭。。。 } while() fclose(localfp);} 解析模塊主要事件流:把網(wǎng)頁(yè)讀入內(nèi)存。提取網(wǎng)頁(yè)標(biāo)題。提取網(wǎng)頁(yè)關(guān)鍵字。提取網(wǎng)頁(yè)類(lèi)型和編碼。提取網(wǎng)頁(yè)鏈接。檢查鏈接是否處理過(guò)。異常事件流:向URL隊(duì)列添加鏈接。網(wǎng)頁(yè)讀入內(nèi)存失敗。打開(kāi)文件失敗。重要代碼實(shí)現(xiàn):structnode_t*getinfo(constchar*page,constchar*pattern[]){nodearr=malloc(maxnode*sizeof(structnode_t));for(i=0;pattern[i];i++){regcomp(®,pattern[i],REG_EXTENDED|REG_ICASE);p=page;while(1){ret=regexec(®,p,NRM,rm,0);maxnode+=ADDNODESTEP;nodearr=realloc(nodearr,maxnode*sizeof(structnode_t));ret=addnode(nodearr,nnode,newpattern,rm);p=page+ret;}regfree(®);}nodearr[nnode].begin=-1;nodearr[nnode].end=-1;qsort(nodearr,nnode,sizeof(structnode_t),nodecmp);}界面主要事件流:能夠設(shè)置參數(shù)和添加網(wǎng)頁(yè)鏈接。能夠顯示參數(shù)和鏈接并能夠?qū)λ齻冞M(jìn)行基本的操作。能夠執(zhí)行后臺(tái)的爬蟲(chóng)系統(tǒng)。能夠顯示執(zhí)行結(jié)果。異常事件流:添加不合法的數(shù)據(jù)。其它功能模塊主要事件流:讀取現(xiàn)在的時(shí)間。保存及時(shí)數(shù)據(jù)。異常事件流:打開(kāi)文件失敗。5測(cè)試與結(jié)果對(duì)界面的測(cè)試:能夠經(jīng)過(guò)界面把數(shù)據(jù)寫(xiě)入文件并能夠從文件中讀出在頁(yè)面上顯示。返回和執(zhí)行按鈕能夠正常的使用。數(shù)據(jù)的修改和刪除功能能夠正常使用。但對(duì)于異常數(shù)據(jù)沒(méi)有進(jìn)行判斷以致不合法的數(shù)據(jù)也能夠?qū)懭肱渲梦募?。?duì)爬蟲(chóng)程序的測(cè)試:輸入不合法的URL。能夠把錯(cuò)誤類(lèi)型寫(xiě)入日志文件。輸入各種類(lèi)型的URL,只對(duì)http和https鏈接處理其它鏈接被視為異常。對(duì)系統(tǒng)速度的測(cè)試:經(jīng)過(guò)多次運(yùn)行計(jì)算平均數(shù)值。得到系統(tǒng)的運(yùn)行效率不是很高。平均每秒大約下載3個(gè)網(wǎng)頁(yè)。測(cè)試移植性:把系統(tǒng)移植到其它的linux系統(tǒng)上運(yùn)行大多是缺少openssl庫(kù)而致使系統(tǒng)出錯(cuò)。總的來(lái)說(shuō)系統(tǒng)沒(méi)有出現(xiàn)系統(tǒng)無(wú)響應(yīng),處于死機(jī)狀態(tài),需要其它人工修復(fù)系統(tǒng)才可復(fù)原這樣的嚴(yán)重錯(cuò)誤。經(jīng)過(guò)多測(cè)試和修改系統(tǒng)現(xiàn)已能夠正常運(yùn)行。配置界面和效果圖如下:圖5-1使用linux命令行運(yùn)行系統(tǒng)的效果圖圖5-2配置界面圖說(shuō)明:設(shè)置參數(shù)把參數(shù)寫(xiě)進(jìn)了set.conf文件。添加網(wǎng)址把網(wǎng)址寫(xiě)進(jìn)了init_url文件。執(zhí)行爬蟲(chóng)程序按鈕是觸發(fā)系統(tǒng)運(yùn)行。圖5-3運(yùn)行之后的效果圖說(shuō)明:點(diǎn)擊查看日志按鈕出現(xiàn)的效果圖為圖5-4。點(diǎn)擊查看網(wǎng)頁(yè)信息出現(xiàn)效果圖為圖5-5。點(diǎn)擊查看網(wǎng)頁(yè)中的鏈接出現(xiàn)效果圖為圖5-6.點(diǎn)擊打開(kāi)網(wǎng)頁(yè)出現(xiàn)效果圖為圖5-7。圖5-4顯示日志文件效果圖圖5-5網(wǎng)頁(yè)信息效果圖圖5-6網(wǎng)頁(yè)鏈接信息效果圖圖5-7顯示網(wǎng)頁(yè)效果圖Linux下數(shù)據(jù)文件存儲(chǔ)的格式如圖5-8圖5-8linux下數(shù)據(jù)文件效果圖說(shuō)明:page_db文件夾中存放的文件如圖5-9。page_info文件夾中存放的文件如圖5-10。page_url文件夾中存放的問(wèn)價(jià)如圖5-11。圖5-9網(wǎng)頁(yè)文件效果圖圖5-10網(wǎng)頁(yè)信息文件效果圖圖5-11網(wǎng)頁(yè)中的鏈接效果圖結(jié)論該系統(tǒng)主要實(shí)現(xiàn)了一下功能:http和https協(xié)議鏈接網(wǎng)頁(yè)的下載并把網(wǎng)頁(yè)中的鏈接解析出來(lái)存放在文件中,把網(wǎng)頁(yè)中的標(biāo)題,關(guān)鍵字,摘要解析出來(lái)存放在文件中。把鏈接存放在URL隊(duì)列中。該系統(tǒng)現(xiàn)已能夠順利的運(yùn)行,有很好的健壯性,可持續(xù)性。雖然系統(tǒng)能夠正常的運(yùn)行,可是由于本人的經(jīng)驗(yàn)不足和時(shí)間有限,以及對(duì)一些相關(guān)的技術(shù)、思想、理論掌握的還不夠透徹,因此本系統(tǒng)中還存在許多不足、許多待完善的地方:現(xiàn)有的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)對(duì)除了http和https協(xié)議的鏈接能夠下載外,對(duì)其它協(xié)議的鏈接均按異常情況處理。對(duì)于后綴是.shtm和.shml的網(wǎng)頁(yè)不能夠下載。這些不足之處,會(huì)在今后的學(xué)習(xí)中不斷的完善和維護(hù),希望能夠達(dá)到更好的效果。參考文獻(xiàn)[1]萬(wàn)源,萬(wàn)方,王大震.一種并行Crawler系統(tǒng)中的URL分配算法設(shè)計(jì)口.計(jì)算機(jī)工程與應(yīng)用,[2]蔣宗禮,趙欽,肖華,等.高性能并行爬行器.計(jì)算機(jī)工程與設(shè)計(jì),[3]張三峰,吳國(guó)新.一種面向動(dòng)態(tài)異構(gòu)網(wǎng)絡(luò)的容錯(cuò)非對(duì)稱(chēng)DHT方法.計(jì)算機(jī)研究與發(fā)展,[4]余錦,史樹(shù)明.分布式網(wǎng)頁(yè)排序算法及其傳輸模式分析.計(jì)算機(jī)工程與應(yīng)用,[5]沈賀丹,潘亞楠.關(guān)于搜索引擎的研究綜述.計(jì)算

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論