提交紙質(zhì)材料定稿6兩份_第1頁
提交紙質(zhì)材料定稿6兩份_第2頁
提交紙質(zhì)材料定稿6兩份_第3頁
提交紙質(zhì)材料定稿6兩份_第4頁
提交紙質(zhì)材料定稿6兩份_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、DINGSHAN UNIVERSITY畢業(yè) (設(shè)計)題目:基于 Java 的網(wǎng)絡(luò)爬蟲 算法的設(shè)計與實現(xiàn)院( 系):學(xué)院專業(yè)年級:工程2011 級 :王 磊學(xué)號:111530218指導(dǎo)教師:副教授 助教2015 年 4 月 10 日 性 本人鄭重 : 本人所呈交的畢業(yè) , 是在指導(dǎo) 的指導(dǎo)下 進(jìn)行研究所取得的成果。 畢業(yè) 中凡 他人已經(jīng)發(fā)表或未發(fā)表的成果、 數(shù)據(jù)、 觀點(diǎn)等, 均已明確注明出處。 除文中已經(jīng)注明 的內(nèi)容外, 不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的科研成果。 對本文的研究成果做出重要貢獻(xiàn)的個人和集體, 均已在文中以明確方式標(biāo)明。本 的法律責(zé)任由本人承擔(dān)。 作者簽名:日期: 關(guān)于畢

2、業(yè)使用的本人在指導(dǎo) 指導(dǎo)下所完成的 及相關(guān)的資料( 圖紙、試驗 、原始數(shù)據(jù)、實物 、圖片、錄音帶、設(shè)計手稿等 ), 知識產(chǎn)權(quán)歸屬平頂山學(xué)院。 本人完全了解平頂山學(xué)院有關(guān)保存、 使用畢業(yè) 的規(guī)定, 同意學(xué)校保存或向 有關(guān)部門或機(jī)構(gòu)送交 的紙質(zhì)版和 ,被查閱和借閱; 本人 平頂山學(xué)院可以將本畢業(yè) 的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索, 可以采用任何保存和匯編本畢業(yè) 。 如果發(fā)表相關(guān)成果, 一定征得指導(dǎo)教師同意, 且第一署 位為平頂山學(xué)院。 本人離校后使用畢業(yè) 或與該 直接相關(guān)的學(xué)術(shù) 或成果時, 第一署 位仍然為平頂山學(xué)院。 作者簽名:日期: 指導(dǎo) 簽名:日期: 平頂山學(xué)院本科畢業(yè)設(shè)計基于 Jav

3、a 的網(wǎng)絡(luò)爬蟲算法的設(shè)計與實現(xiàn)摘 要隨著網(wǎng)絡(luò)上的資源呈指數(shù)形式的迅速膨脹,在浩瀚煙海的資源快速查找并獲取所需要、與相關(guān)的已成為當(dāng)今人類所的主題之一。網(wǎng)絡(luò)爬蟲在網(wǎng)絡(luò)資源查找中扮演著重要的角色,它可以幫助人們從數(shù)以億計的網(wǎng)絡(luò)中快速查找并獲取想要的?;?Java 的網(wǎng)絡(luò)爬蟲算法是應(yīng)用最佳優(yōu)先搜索算法,采用多線程技術(shù),使用HttpClinet 作為處理網(wǎng)絡(luò)連接請求響應(yīng)的一個在互聯(lián)網(wǎng)上進(jìn)行網(wǎng)頁抓取程序,主體功能實現(xiàn)根據(jù)給定初始的某主頁 URL,通過爬蟲程序?qū)⒃摰恼w架構(gòu)中所包含的頁面抓取下來,并保存至本地硬盤指定目錄中。的網(wǎng)頁搜索就是網(wǎng)絡(luò)爬蟲從一個或若干個初始頁面開始,基于一定的和策略,依次遍歷整個互

4、聯(lián)網(wǎng)所有節(jié)點(diǎn),從中抓取滿足設(shè)定條件的頁面的過程。最佳優(yōu)先搜索算法是按照一定的“距離”算法,從候選 URL 中選取與目標(biāo)網(wǎng)頁“距離最近”的那個 URL, 優(yōu)先對其搜索,這樣可以在很大程度上提高網(wǎng)絡(luò)爬蟲搜索的性。多線程技術(shù)是利用 java.lang.Runable 接口創(chuàng)建多個線程網(wǎng)絡(luò)爬蟲,實現(xiàn)多個爬蟲同時并行地抓取網(wǎng)頁,并恰當(dāng)處理爬蟲線程的同步機(jī)制,可以大幅度提高爬蟲效率。該爬蟲算法減少了網(wǎng)頁過程中平均等待時間,可以更加有效合理地抓取所需頁面,抓取結(jié)果通過本地文件能夠以更加清晰明了的方式呈現(xiàn)出來??梢宰?收集者更加輕松地找到切合需求的頁面,具有很推廣價值。:網(wǎng)絡(luò)爬蟲,多線程,URL 隊列, 最佳

5、優(yōu)先搜索The Design and Implementation of The Java-based Web Crawler AlgorithmAlong with the network information resources is the rapid expansion of theexponential form, their needs, and their related information has become one of the themes of the times facing us today to get in quickly find information

6、 resource library and the vast sea. Web crawler plays an important role in the network information resources search, it can help people quickly find and access the information you want from the hundreds of millions of web information.Web crawler algorithm based on Java is the application of best fir

7、st search algorithm, the multi-thing technology, the use of HttpClinet as a network connection request response in the Internet Wge capture program, the main function of the realization of a wge of URL according to the given initial, the crawler will be included in the overall structure of the sites

8、 wges down, and saved to the local hard disk in the specified directory. Teral web crawler Wge search is started from one or a plurality of the initial page, method and strategy based on the Internet, in order traversal of all nodes, meet the page from the crawl. Best first search algorithm is accor

9、ding to the distance from the candidate selection algorithm, URL and Wge from the recent URL, give priority to the search, which can improve the targeted web crawler search to a great extent. Multi th technology is the use of java.lang.Runable interface to create multiple ths web crawler, to achieve

10、 a number of reptiles crawl Wge in parallel at the same time, the synchronization mechanism and proper treatment of spider th, can greatly improve the efficiency of the crawler.The crawler algorithm reduces the average waiting time Wge download process, can effectively capture the required page, gra

11、b the results by local files can be presented in a more clear way. Can make the information more easily find collectors to meet their own needs information, and has good popularization value.Keywords: Web Crawler,Multi-ths,URL Queue,Best-first目 錄1 緒論11.1 網(wǎng)絡(luò)爬蟲技術(shù)的背景及意義11.2 網(wǎng)絡(luò)爬蟲技術(shù)的應(yīng)用現(xiàn)狀11.3 主安排22 網(wǎng)絡(luò)爬蟲基本

12、概念簡介32.1 網(wǎng)絡(luò)爬蟲基本工作原理32.2 網(wǎng)絡(luò)爬蟲主要組成部分32.3 網(wǎng)絡(luò)爬蟲主流爬取策略43 網(wǎng)絡(luò)爬蟲的設(shè)計73.1 網(wǎng)絡(luò)爬蟲的設(shè)計目標(biāo)73.2 最佳優(yōu)先搜索算法詳細(xì)設(shè)計83.3 多線程技術(shù)詳細(xì)設(shè)計93.4 網(wǎng)絡(luò)爬蟲程序的結(jié)構(gòu)流程設(shè)計93.5 網(wǎng)絡(luò)爬蟲圖設(shè)計104 網(wǎng)絡(luò)爬蟲的實現(xiàn)與測試124.1 網(wǎng)絡(luò)爬蟲整體算法實現(xiàn)124.1.1 LinkQueue124.1.2 DownLoadFile134.1.3 HtmlParserTool144.1.4 MyCrawler154.2 網(wǎng)絡(luò)爬蟲程序多線程的實現(xiàn)174.3 網(wǎng)絡(luò)爬蟲程序測試175 結(jié)束語205.1 總結(jié)205.2 展望20附錄2

13、1參考文獻(xiàn)24致謝25平頂山學(xué)院本科畢業(yè)設(shè)計1 緒論伴隨著萬維網(wǎng)的飛速發(fā)展,人們將越來越依賴于用搜索引擎在人們的生活工作中進(jìn)行的快速查找,搜索引擎技術(shù)中最基礎(chǔ)部分正是網(wǎng)絡(luò)爬蟲。大到 ,Goole 搜索引擎巨頭幫助我們抓取互聯(lián)網(wǎng),小到普通 抓取 都會用到網(wǎng)絡(luò)爬蟲技術(shù),網(wǎng)絡(luò)爬蟲有著廣泛的應(yīng)用前景。本章將從網(wǎng)絡(luò)爬蟲的背景及意義,應(yīng)用現(xiàn)狀和主安排這三個方面對爬蟲程序進(jìn)行描述。1.1 網(wǎng)絡(luò)爬蟲技術(shù)的背景及意義在當(dāng)今網(wǎng)絡(luò)中, 基于網(wǎng)絡(luò)爬蟲的搜索引擎研究與實現(xiàn)已非常普及。Google,Yahoo,baidu 等是目前比較流行的典型的搜索引擎代表。網(wǎng)絡(luò)爬蟲實現(xiàn)的是合理的使用好算法抓取頁面。隨著計算機(jī)網(wǎng)絡(luò)的發(fā)展

14、,很多編程者基于搜索引擎的思想開發(fā)出了各種版本。伴隨著 化 的到來,大數(shù)據(jù)和 算正成為當(dāng) 的 。而網(wǎng)絡(luò)爬蟲是在互聯(lián)網(wǎng)上進(jìn)行快速收集的而又基礎(chǔ)的工具。大數(shù)據(jù)離不開算,而算離不開分布式,而網(wǎng)絡(luò)爬蟲正是算和分布式的最基礎(chǔ)部分實現(xiàn)。大數(shù)據(jù)的到來,要求網(wǎng)絡(luò)爬蟲采用更加高效可靠穩(wěn)健的算法,配合分布式技術(shù)實現(xiàn),實現(xiàn)多個爬蟲系統(tǒng)協(xié)同工作,高速地從數(shù)以億計的量中,快速地搜用戶所需要的。作為分布式 算的基礎(chǔ)程序架構(gòu),在當(dāng)今的 ,網(wǎng)絡(luò)爬蟲技術(shù)無疑具有著巨大的研究價值和廣泛的應(yīng)用潛力。通過對底層網(wǎng)絡(luò)爬蟲算法的研究和, 將極大地促進(jìn)架構(gòu)在算和分布式上系統(tǒng)(比如搜索引擎)的性能的大幅度提升,并強(qiáng)地推動這些系統(tǒng)的實際應(yīng)用和

15、開發(fā)。由此可見,在當(dāng)研究網(wǎng)絡(luò)爬蟲技術(shù)具有著的意義。1.2 網(wǎng)絡(luò)爬蟲技術(shù)的應(yīng)用現(xiàn)狀搜索引擎是基于網(wǎng)絡(luò)爬蟲架構(gòu)算法的實際應(yīng)用系統(tǒng),也是目前大眾接觸最多的使用最的應(yīng)用系統(tǒng)。而搜索引擎可以有實現(xiàn)互聯(lián)網(wǎng)搜索的系統(tǒng)如,谷歌,搜狗等搜索系統(tǒng),也有僅僅實現(xiàn)站內(nèi)搜索的搜索引擎,同時還有系統(tǒng)內(nèi)部為了實現(xiàn)一定的功能而鑲嵌的搜索引擎等等。25,直至 2013 年互聯(lián)網(wǎng)上已經(jīng)了 1500 億以上的網(wǎng)頁數(shù)量,研究表明,近 30%的網(wǎng)頁是重復(fù)的。同一個 Web 中動態(tài)頁面(于客戶端的),應(yīng)用服務(wù)器,URL 腳本語言的數(shù)量呈指數(shù)級增長。上述特征使得網(wǎng)絡(luò)爬蟲一定的 主要體現(xiàn)在 web 的巨大容量使得爬蟲在給定時間內(nèi)只能 少量網(wǎng)

16、頁1。Lawrence 和 Giles 的研究表明沒有哪個搜索引擎能夠索引超出 16%的 Internet 頁面,即使能夠提取全部頁面,也沒有足夠的空間來2。為提高爬行效率“爬蟲需要在 時間內(nèi)盡可能多的獲取高質(zhì)量頁面”是它的難題之一。為了解決這一問題,目前網(wǎng)絡(luò)爬蟲的技術(shù)正朝著分布式、算架構(gòu)發(fā)展著,這也正是 Goole 的之道。1.3 主 安排,本主要對該爬蟲程序的開發(fā)過程 網(wǎng)絡(luò)爬蟲概述、網(wǎng)絡(luò)爬蟲的設(shè)計、網(wǎng)絡(luò)爬蟲的實現(xiàn)、網(wǎng)絡(luò)爬蟲的測試等過程進(jìn)行詳細(xì)地。共分為五章,具體內(nèi)容安排如下:第一章:緒論。主要 了網(wǎng)絡(luò)爬蟲技術(shù)的開發(fā)背景及意義、應(yīng)用現(xiàn)狀和本的主安排。第二章:相關(guān)技術(shù)工具與爬蟲基本概念簡介。首

17、先對網(wǎng)絡(luò)爬蟲系統(tǒng)設(shè)計過程中采用的相關(guān)技術(shù)和開發(fā)工具進(jìn)行較詳細(xì)的說明,的設(shè)計做技術(shù)支持,然后對通用性網(wǎng)路爬蟲所涉及的基本概念作簡要。第三章:網(wǎng)絡(luò)爬蟲的設(shè)計。在完 需求分析的基礎(chǔ)上,完 的主體算法設(shè)計、多線程設(shè)計和類圖設(shè)計等。第四章:網(wǎng)絡(luò)爬蟲的實現(xiàn)與測試。首先從整體上 了程序的開發(fā),具體介紹每一個類的設(shè)計與實現(xiàn)過程,并配有算法流程圖,清晰地表達(dá)出了算法的設(shè)計思想和實現(xiàn)流程。然后描述算法的完整測試計劃、結(jié)合多線程技術(shù)設(shè)計測試方案, 并分析總結(jié)測試結(jié)果,揭示規(guī)律第五章:結(jié)束語,對本算法設(shè)計與實現(xiàn)進(jìn)行全面總結(jié),展望系統(tǒng)的前景和進(jìn)一步的設(shè)計目標(biāo)。2 網(wǎng)絡(luò)爬蟲基本概念簡介本章節(jié)將會的通用性網(wǎng)絡(luò)爬蟲都應(yīng)具備的

18、組成部分,及其基本工作原理,以及當(dāng)今網(wǎng)絡(luò)爬蟲主流的爬取策略等。2.1 網(wǎng)絡(luò)爬蟲基本工作原理顧名思義,網(wǎng)絡(luò)爬蟲就是一個可以在互聯(lián)網(wǎng)上從一個網(wǎng)頁“爬”至另一個網(wǎng)頁的程序。其實現(xiàn)的基本機(jī)制就是根據(jù)已有的 URL,從其所指向的網(wǎng)頁文件中抽取超鏈接即網(wǎng)頁中隱含 URL,然后根據(jù)一定的次序,“爬”至抽取出的 URL 所指向的網(wǎng)頁文件上,再一次抽取其中的 URL 接著往下爬。如此這般循環(huán)直至滿足搜索條件為止3。可以將網(wǎng)絡(luò)爬蟲的工作原理抽象為數(shù)據(jù)結(jié)構(gòu)中圖的遍歷。將整個互聯(lián)網(wǎng)資源看做是一級大的“圖”,而將其中每個頁面看做是“圖”中的一個“節(jié)點(diǎn)”,每個頁面中有若干個超鏈接指向其他頁面,將這些超鏈接視為圖中一個節(jié)點(diǎn)

19、指向另一個節(jié)點(diǎn)的“有”,不含超鏈接頁面的如 Excel 表格頁面等視為圖的邊緣節(jié)點(diǎn),從而將整個互聯(lián)網(wǎng)資源抽象為數(shù)據(jù)結(jié)構(gòu)中的有向圖。網(wǎng)頁搜索就是網(wǎng)絡(luò)爬蟲從一個或若干個初始頁面開始,基于一定的和策略,依次遍歷整個互聯(lián)網(wǎng)所有節(jié)點(diǎn),從中抓取滿足設(shè)定條件的頁面的過程。與圖的遍歷不同的是爬蟲在爬取完畢所需之前,并不知道所爬取的整個“圖”的結(jié)構(gòu)。2.2 網(wǎng)絡(luò)爬蟲主要組成部分網(wǎng)絡(luò)爬蟲需要完成三大主要工作。(1) 頁面獲取,根據(jù) URL 發(fā)送頁面連接請求數(shù)據(jù)包, URL 頁面數(shù)據(jù)。(2) 頁面分析,對下來的頁面進(jìn)行分析,抽取頁面中的 URL。(3) 鏈接隊列, 待 的 URL 隊列(記做 TODO 表)和已的

20、URL 表(記做 Visited 表),以及各自隊列的出隊入隊等操作。2.3 網(wǎng)絡(luò)爬蟲主流爬取策略從理論上來說,網(wǎng)絡(luò)爬蟲可以采用深度優(yōu)先遍歷,廣度優(yōu)先遍歷以及最佳優(yōu)先遍歷等三種遍歷策略。 ,深度優(yōu)先遍歷往往會帶來一些不必要的麻煩,目前比較流行的遍歷方式是廣度優(yōu)先遍歷和最佳優(yōu)先遍歷。深度優(yōu)先搜索4就是優(yōu)先當(dāng)前 URL 的“子 URL”,即其所指向的網(wǎng)頁中所包含的 URL,而不是過當(dāng)前 URL 后轉(zhuǎn)而去“兄弟 URL”,即和自身同處于一個網(wǎng)頁并同時從該網(wǎng)頁中過濾出來的 URL。不斷地從當(dāng)前 URL“爬”至子 URL, 直至子URL 所指向的頁面不包含超鏈接時,才返回到僅上一級兄弟 URL 繼續(xù)。最

21、后,當(dāng)不再有其他超鏈接可進(jìn)行 時,說明搜索已經(jīng)結(jié)束。深度優(yōu)先搜索方式的優(yōu)點(diǎn)是能遍歷完全 Web 站點(diǎn)嵌套的文檔集合。缺點(diǎn)是假如 Web 結(jié)構(gòu)相當(dāng)深,有可能造成爬蟲程序深陷在某一 Web 站點(diǎn)導(dǎo)致爬蟲效率大大降低。本爬蟲程序的設(shè)計不采用深度優(yōu)先搜索的思想。廣度優(yōu)先搜索策略的基本思想是:與初始 URL 距離越近的網(wǎng)頁,其重要性越高,因此可以從起始網(wǎng)頁開始,先搜索完一個 Web 頁面中所有的超級鏈接,然后再繼續(xù)搜索下一層,直到最底層為止5。這樣做的優(yōu)點(diǎn)是 對淺層 Web 頁面的優(yōu)先處理。但是缺點(diǎn)是如果要遍歷一個指定的站點(diǎn)的頁面集,用寬度優(yōu)先搜索策略則需要花費(fèi)較長時間。圖 2-1 是一個模擬網(wǎng)絡(luò)爬蟲爬

22、取過程的網(wǎng)絡(luò)圖,每個節(jié)點(diǎn)相對于一個網(wǎng)頁, 有相當(dāng)于網(wǎng)頁之間的超鏈接。圖 2-1 爬蟲示例圖選擇 A 作為節(jié)點(diǎn),則寬度優(yōu)先遍歷的過程,如表 2-1 所示。表 2-1 廣度優(yōu)先遍歷過程操作隊列中的元素初始空A 入隊AA 出隊空BCDE 入隊BCDEB 出隊CDEC 出隊DED 出隊EF 入隊EFE 出隊FI 入隊FIF 出隊I入隊出隊出隊空表 2-1 所示的遍歷過程中,出隊順序即為圖的廣度優(yōu)先遍歷順序。由此可見, 選 A 為初始節(jié)點(diǎn),圖 2-1 的廣度優(yōu)先遍歷順序為 A-B-C-D-E-F-I-H。最佳優(yōu)先搜索策略按照一定的網(wǎng)頁估值算法,候選 URL 與目標(biāo)網(wǎng)頁的相似度 ,選取其中 最高的一個或幾

23、個 URL 優(yōu)先進(jìn)行抓取6。最佳優(yōu)先搜索算法實質(zhì)上是一種特殊的廣度優(yōu)先搜索策略。廣度優(yōu)先搜索利用的待 URL 隊列是一種普通隊列,爬蟲平等的對待隊列中的每一個 URL,取排隊時間最長的 URL(即隊頭 URL)作為當(dāng)前進(jìn)行的 URL。最佳優(yōu)先搜索利用的待 URL 隊列是優(yōu)先級隊列(Priority Queue),優(yōu)先級隊列往往是由數(shù)據(jù)結(jié)構(gòu)中的“堆”來實現(xiàn)的,優(yōu)先隊列中的元素按照優(yōu)先級由大到小或由小到大排列,爬蟲取隊列中優(yōu)先級最大或最小的 URL(即隊頭 URL)作為當(dāng)前進(jìn)行的 URL。假設(shè)圖 2-1 節(jié)點(diǎn)之間的優(yōu)先級為 DBCAEFIH,選擇 A 作為節(jié)點(diǎn),則最佳優(yōu)先遍歷的過程如表 2-2 所

24、示。表 2-2 最佳優(yōu)先遍歷過程操作隊列中的元素初始空續(xù)表 2-2A 入隊AA 出隊空BCDE 入隊DBCED 出隊BCEF 入隊BCEFB 出隊CEFC 出隊EFE 出隊FI 入隊FIF 出隊IH 入隊IHI 出隊HH 出隊空同樣的,表 2-2 所示的遍歷過程中,出隊順序即為圖的最佳優(yōu)先遍歷順序。即以 A 為初始節(jié)點(diǎn),圖 2-1 的最佳優(yōu)先遍歷順序為 A-D-B-C-E-F-I-H。3 網(wǎng)絡(luò)爬蟲的設(shè)計本章從總體的角度對有 統(tǒng)全局的問題進(jìn)行設(shè)計規(guī)劃,主要 網(wǎng)絡(luò)爬蟲程序的結(jié)構(gòu)設(shè)計、各樣功能設(shè)計、設(shè)計,類圖設(shè)計等。3.1 網(wǎng)絡(luò)爬蟲的設(shè)計目標(biāo)本網(wǎng)絡(luò)爬蟲算法設(shè)計目標(biāo)是:設(shè)計出一個基于 Java 的網(wǎng)絡(luò)

25、爬蟲算法應(yīng)用最佳優(yōu)先搜索算法的,采用多線程技術(shù)的,使用 HttpClinet 作為處理網(wǎng)絡(luò)連接請求響應(yīng)的,一個在互聯(lián)網(wǎng)上進(jìn)行頁面抓取的爬蟲程序。主體功能實現(xiàn)根據(jù)給定初始的某主頁 URL,通過爬蟲程序?qū)⒃摰恼w架構(gòu)中所包含的頁面抓取下來,并保存至本地硬盤指定目錄中。首先,采用基于寬度優(yōu)先遍歷的最佳優(yōu)先算法,實現(xiàn)整個網(wǎng)絡(luò)爬蟲的程序運(yùn)行整體框架;其次,在此基礎(chǔ)上采用多線程技術(shù)加快爬去速度;最后,主體功能實現(xiàn)給定初始的某主頁 url,通過爬蟲程序?qū)⒃摰恼w架構(gòu)中所包含的頁面抓取下來,并保存至本地硬盤指定目錄。整個搜索策略之所以是基于寬度優(yōu)先搜索是因為:(1) 寬度優(yōu)先搜索會優(yōu)先搜索距離初始的 URL

26、距離近的 URL,假如將一個鏈接的距離表示為 1,那么距離 URL 遠(yuǎn)的那些 URL 其距離自然變大。而URL 之間的距離越小,則表明其之間的相關(guān)度越大,搜索的重要性越大,越應(yīng)當(dāng)優(yōu)先搜索。如果將距離表示為深度,據(jù)研究結(jié)果如表 3-1,分析足以顯示其中之間的。(2) 寬度優(yōu)先遍歷可以用隊列機(jī)制很實現(xiàn),可以避免深度優(yōu)先遍歷所帶來的棧溢出問題。(3) 寬度優(yōu)先遍歷可以很支持多線程機(jī)制,這對于網(wǎng)絡(luò)爬蟲效率的提高表 3-1 網(wǎng)頁中深度、個數(shù)和重要性表網(wǎng)頁深度網(wǎng)頁個數(shù)重要性011012082600532000246000很小3.2 最佳優(yōu)先搜索算法詳細(xì)設(shè)計首先設(shè)計如何實現(xiàn)多個 URL 之間進(jìn)行優(yōu)先級比較。

27、最佳優(yōu)先搜索算法中需要計算出每個 URL 的優(yōu)先級,從而優(yōu)先級隊列才能據(jù)此對 URL 序列進(jìn)行排序。URL 的優(yōu)先級往往是網(wǎng)頁的重要性,而網(wǎng)頁重要性的因素有很多,主要有鏈接的歡迎度,鏈接的重要度和平均鏈接深度、質(zhì)量、歷史權(quán)重等主要因素。鏈接的歡迎度主要是由反向鏈接的數(shù)量和質(zhì)量決定的。鏈接的重要度,是一個關(guān)于 URL 字符串的函數(shù),僅僅考查字符串本身。平均鏈接深度,根據(jù)上面所分析的寬度優(yōu)先的原則計算出全站的平均鏈接深度,然后綜合以上參數(shù)可以給每個網(wǎng)頁 URL 計算出一個用于優(yōu)先級比較的參數(shù)。然后設(shè)計出最佳優(yōu)先遍歷的具體算法。第一步,將初始 URL 即 URL 無條件的放入未隊列中,這是一個初始化

28、操作,才能進(jìn)行之后的操作,因為入隊的目的是為讓 占據(jù)一定的次序,實現(xiàn) 待,從而才能頁面中所隱含的超鏈接。第二步,從待隊列中取優(yōu)先級最高的 URL 出隊,該 URL 所指向的頁面,至本地并過濾出其中的超鏈接 URL,即出隊的目的是實現(xiàn)相應(yīng)頁面的訪問,同時過濾出隱含的可能滿足搜索條件的 URL,簡言之,出隊的目的是實現(xiàn)自己被。第三步,為了保證每個 URL 不重復(fù)同時避免程序的死循環(huán),對過濾出的URL 進(jìn)行。如果其已經(jīng)進(jìn)入待隊列中,則說明其已經(jīng)取得待資格, 不做操作。否則,如果其已經(jīng)進(jìn)入已隊列中,則說明其已經(jīng)被過,不做操作。如果兩個都不滿足,則說明其對于該爬蟲而言,是一個全新的并未接觸過的 URL,

29、那么便是可能滿足搜索條件的 URL,入待隊列等待被。之后, 返回第一步開始,取 URL 繼續(xù)。如此這般循環(huán)直至搜索結(jié)果滿足爬蟲搜索條件的時候爬蟲程序,分析爬去結(jié)果。實際的最佳優(yōu)先遍歷過程如圖 3-1 所示。圖 3-1 寬度優(yōu)先爬蟲過程3.3 多線程技術(shù)詳細(xì)設(shè)計線程實際是輕量級進(jìn)程,也是一個執(zhí)行中的程序。一個進(jìn)程在其執(zhí)行過程中可以產(chǎn)生多個線程,形成多條執(zhí)行路徑。但是與進(jìn)程不同的是,同類的多個線程是共享同一塊內(nèi)存空間和一組系統(tǒng)資源,所以系統(tǒng)在產(chǎn)生一個線程,或在各個線程之間做切換的工作時,負(fù)擔(dān)要比進(jìn)程小得多,也正因為如此,線程被稱為負(fù)擔(dān)輕的進(jìn)程(light-wight process) 7。阻礙網(wǎng)絡(luò)

30、爬蟲運(yùn)行性能進(jìn)一步提高的一個關(guān)鍵因素是程序在和服務(wù)器交互以后等待服務(wù)器響應(yīng)的時間過長,而多線程可以有效降低平均等待時間,加快爬去速度。文中實現(xiàn)的網(wǎng)絡(luò)爬蟲程序使用了 JAVA 語言對多線程技術(shù)的支持來提高其效率。Java 語言中實現(xiàn)多線程的有兩種,一種是并發(fā)運(yùn)行的對象直接繼承JAVA 的線程類 Th,另外式是定義并發(fā)執(zhí)行對象實現(xiàn)Runnable 接口。本文網(wǎng)絡(luò)爬蟲程序采用第二種方式實現(xiàn)多線程爬蟲。無論采用哪種方式都要用到Java 語言類庫中的 Th 類以及相關(guān)。3.4 網(wǎng)絡(luò)爬蟲程序的結(jié)構(gòu)流程設(shè)計遞歸方式和非遞歸方式是當(dāng)今網(wǎng)絡(luò)爬蟲程序遍歷的兩大構(gòu)造。遞歸方式的主要思想是當(dāng)爬蟲分析完成一個頁面以后,

31、使用分析抽取出來的URL 作為當(dāng)前的 URL 參數(shù),再一次調(diào)用爬蟲程序本身,直到所分析的頁面不含 URL 超鏈接之后返回到上一級函數(shù)繼續(xù)調(diào)用。最后,當(dāng)所有 URL 都處理完畢之后,程序從最初 URL 所調(diào)用的爬蟲程序。遞歸的方式使程序的整體結(jié)構(gòu)清晰,但是在互聯(lián)網(wǎng)中爬蟲爬行的頁面數(shù)目往往十分巨大,會占用大量的內(nèi)存資源來構(gòu)建堆棧,導(dǎo)致爬蟲程序的運(yùn)行效率明顯降低,并且由于共用堆棧的不能使用多線程8。遞歸的方式往往更適用于深度優(yōu)先遍歷。非遞歸方式往往會使用隊列,具體來說使用 URL 隊列來實現(xiàn)對程序流程的,可以很支持多線程技術(shù)。初始 URL 無條件入隊,URL 出隊時其所對應(yīng)的頁面,并將抽取出的且之前

32、未過的 URL 入隊,入隊的目的是使得隊內(nèi)的 URL 按照排隊時間長短依次(對優(yōu)先隊列而言,是按照優(yōu)先級依次),隊列使得網(wǎng)絡(luò)爬蟲能夠依照一定的次序和策略,從初始 URL 開始,對整個網(wǎng)絡(luò)資源進(jìn)行。廣度優(yōu)先遍歷和最佳優(yōu)先遍歷往往都依靠隊列來實現(xiàn)。所以本文的網(wǎng)絡(luò)爬蟲程序使用了非遞歸的方式實現(xiàn)。具體網(wǎng)絡(luò)爬蟲的程序結(jié)構(gòu)如圖3-2 所示。圖 3-2 網(wǎng)絡(luò)爬蟲程序基本結(jié)構(gòu)3.5 網(wǎng)絡(luò)爬蟲 圖設(shè)計實現(xiàn)多線程功能的類 MyTh:圖 3-3 MyTh 類圖實現(xiàn)主體爬取程序的類 MyCrawler:圖 3-4 MyCrawler 類圖實現(xiàn)網(wǎng)頁文件到本地的類 DownLoadFile:圖 3-5 DownLoadF

33、ile 類圖實現(xiàn)從網(wǎng)頁中過濾超鏈接的類 HtmlParserTool 及其調(diào)用的接口 LinkFilter:圖 3-6 HtmlParserTool 及接口 LinkFilter 類圖提供實現(xiàn)最佳優(yōu)先搜索最主要數(shù)據(jù)結(jié)構(gòu)的類 LinkQueue:圖 3-7 LinkQueue 類圖4 網(wǎng)絡(luò)爬蟲的實現(xiàn)與測試本章主要網(wǎng)絡(luò)爬蟲程序的詳細(xì)實現(xiàn),即程序的具體實現(xiàn)過程。本程序通過創(chuàng)建 MyEclipse 中 Java Project 來實現(xiàn),程序能夠以更加清晰明了的方式呈現(xiàn)出來,將實現(xiàn)不同功能的模塊皆封裝成類。比如,其中 LinkQueue 類包含 Visited 和 TODO 兩個數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)(底層分別

34、采用優(yōu)先隊列和集合的方式實現(xiàn))。DownLoadFile 類實現(xiàn)將網(wǎng)頁保存至本地。HtmlParserTool 類實現(xiàn)從網(wǎng)頁中抽取超鏈接。MyCrawler 類實現(xiàn)網(wǎng)絡(luò)爬蟲爬取策略的主體。接口 java.lang.Runable 實現(xiàn)創(chuàng)建多個爬蟲線程并行爬取。最后,本章實現(xiàn)網(wǎng)絡(luò)爬蟲程序的運(yùn)行,并測試多線程效果。4.1 網(wǎng)絡(luò)爬蟲整體算法實現(xiàn)通過對每一個類的分析設(shè)計,實現(xiàn)每一個類的主體功能流程圖,并對其主要功能進(jìn)行文字描述,再通過主體類 MyCrawler 實現(xiàn)整個算法的綜合調(diào)度與實現(xiàn)。每一個類的具體代碼可參見附錄。4.1.1 LinkQueue類LinkQueue 中創(chuàng)建私有屬性visitedU

35、rl 用于存放已經(jīng)過的URL 列表, 底層用集合實現(xiàn),創(chuàng)建私有屬性 unVisitedUrl 用于存放已經(jīng)搜索到但未來得及的 URL 列表,所有 unVisitedUrl 中的 URL 之間形成競爭下一個被的,底層用優(yōu)先隊列實現(xiàn)。此外,類 LinkQueue 中還應(yīng)當(dāng)包含有公開的如從屬性 visitedUrl 或unVisitedUrl 中獲取 URL,或者刪除 URL,以及獲取屬性中 URL 的個數(shù)等。 unVisitedUrlDequeue()用于從待隊列中取出一個 URL 進(jìn)行, 往往這個 URL 是隊列中具有最高優(yōu)先級的 URL。 addvisitedUrl()用于將從 unVisit

36、edUrlDequeue()中刪除的 URL 無條件的加入屬性 visitedUrl 中。 UnaddvisitedUrl()用于將利用頁面過濾算法抽取出的 URL 加入待隊列中,在此過程中要該 URL 是否已,或已待。該如圖 4-1 所示。圖 4-1 addUnvisitedUrl 流程圖4.1.2 DownLoadFile只有將搜索到的網(wǎng)頁 到本地后才能進(jìn)一步的從已得網(wǎng)頁中抽取超鏈接, 實現(xiàn)進(jìn)一步的爬取。在這里的網(wǎng)頁除了可以實現(xiàn)網(wǎng)頁到本地的功能外, 而且考慮了如何網(wǎng)頁,設(shè)置請求超時策略等多方面問題。由于該類比較復(fù)雜在此將各個展開敘述。 getFileNameByUrl(),根據(jù) URL 和

37、網(wǎng)頁類型,利用正則表達(dá)式的去除 URL 中的協(xié)議名 http,生成需要保存的網(wǎng)頁的文件名。 saveToLocal(),保存網(wǎng)頁字節(jié)數(shù)組到本地文件,本程序?qū)⑴廊〉木W(wǎng)頁文件保存至本地 F:spider。 downloadFile(),是該類中的主體 ,實現(xiàn) URL 指向的網(wǎng)頁文件將其內(nèi)容保存至字節(jié)數(shù)組中。DownLoadFile 類的流程圖如下圖 4-2 所示。圖 4-2 DownLoadFile 類流程圖4.1.3 HtmlParserToolJava 有一個非常實用的開源工具包 HtmlParser,它專門 html 頁面進(jìn)行處理,不僅能夠提取 URL,還能提取文本以及你想要的任何內(nèi)容。本文

38、就利用HtmlParser 來實現(xiàn)網(wǎng)頁中URL 的過濾。HtmlParserTool 類的流程圖如下圖 4-3所示。4.1.4 MyCrawler圖 4-3 HtmlParserTool 類流程圖該類中實現(xiàn)了爬蟲算法的主體算法設(shè)計,其實就是以一定的優(yōu)先次序?qū)φ麄€網(wǎng)絡(luò)資源進(jìn)行遍歷直至搜索到滿足要求的網(wǎng)頁為止的過程。主要就是入隊出隊操作,以及函數(shù)之間的調(diào)用等。該類是整個爬蟲算法中最重要算法框架,具體流程圖如圖 4-4 所示。圖 4-4 MyCrawler 類流程圖4.2 網(wǎng)絡(luò)爬蟲程序多線程的實現(xiàn)多個線程的執(zhí)行是并發(fā)的,即在邏輯上是“同時”的,創(chuàng)建一個新的線程必須指明這個線程所要執(zhí)行的代碼。在利用

39、java.lang.Runable 接 術(shù)實現(xiàn)多線程的過程中,線程所要執(zhí)行的代碼被定義在 run() 中。類庫創(chuàng)建一個類實現(xiàn)java.lang.Runable 接口并提供這一的實現(xiàn),將線程代碼寫入 run()中,并且創(chuàng)建一個 java.lang.Th 類,將實現(xiàn) java.lang.Runable 的類作為參數(shù)傳入。本爬蟲 設(shè)計了類 MyTh 于實現(xiàn)多線程,具體程序代碼可參加附錄代碼 MyTh.java。此網(wǎng)絡(luò)爬蟲多線程實現(xiàn)所采用的結(jié)構(gòu)如圖 4-5 所示。圖 4-5 多線程爬蟲結(jié)構(gòu)實現(xiàn)示意圖4.3 網(wǎng)絡(luò)爬蟲程序測試本章首先會網(wǎng)絡(luò)爬蟲程序測試的環(huán)境,然后顯示測試結(jié)果,最后多線程技術(shù)設(shè)計了一個實驗

40、,觀察多線程技術(shù)對提高網(wǎng)絡(luò)爬蟲效率的作用。本網(wǎng)絡(luò)爬蟲程序是在 MyEclipse10 平臺上設(shè)計實現(xiàn)的,具體運(yùn)行環(huán)境如表 4-1所示。表 4-1 程序運(yùn)行環(huán)境環(huán)境硬件環(huán)境Windows 7intelCore2 Duo T5 7502 2. 00GHzMyEclipse內(nèi)存: 2GBApache Tomcat硬盤: 250GB網(wǎng)絡(luò):校園網(wǎng) 100M當(dāng)初始 URL 指定為“”時,網(wǎng)絡(luò)爬蟲對網(wǎng)頁的抓取結(jié)果如圖 4-6 所示。圖 4-6 程序運(yùn)行結(jié)果測試結(jié)果顯示通過以首頁為 URL 的網(wǎng)絡(luò)爬蟲程序,抓取到了 32 個頁面。之后在 URL 不變、運(yùn)行環(huán)境不變和網(wǎng)絡(luò)環(huán)境保持平穩(wěn)通暢(即網(wǎng)絡(luò)速率等各樣參數(shù)基

41、本保持不變)的情況下,分別將線程設(shè)置為 1、2、3、4 和 5 個, 觀察網(wǎng)絡(luò)爬蟲分別在此各個情況下抓取完 32 個頁面所花費(fèi)的時間,結(jié)果如圖 4-7 所示。圖 4-7 不同線程數(shù)爬蟲抓取效果圖從測試結(jié)果中可以分析到,當(dāng)爬蟲程序使用的處理網(wǎng)頁的線程數(shù)逐漸增多時,爬蟲處理網(wǎng)頁的效率不斷提高,總消耗時間穩(wěn)步下降,性能不斷增強(qiáng)。但是不能盲目地增加網(wǎng)絡(luò)爬蟲的線程數(shù),上圖顯示線程數(shù)大于 3 時搜索時間反而快速增加。因為線程之間并不是的,同屬于一個類的所有線程共享著相同的內(nèi)存資源,所以在共享資源的同時,要建立一定的同步機(jī)制,乃至于不因為隨機(jī) 而導(dǎo)致內(nèi)存出錯。同時,不同線程屬于不同的指令流,完成不同的功能,

42、存在著邏輯順序,線程越多,邏輯往往越復(fù)雜,要實現(xiàn)邏輯就要有額外開銷,所以爬蟲程序的效率隨著線程的增多而無限提高且有可能會下降。5 結(jié)束語最后,就此次畢業(yè)設(shè)計實現(xiàn)過程中的成績和問題不足之處做一總結(jié),并就未來的相關(guān)工作做一展望。5.1 總結(jié)實現(xiàn)了網(wǎng)絡(luò)爬蟲算法的設(shè)計與實現(xiàn),重點(diǎn)在于算法設(shè)計與實現(xiàn)。通過整個項目實現(xiàn)過程,從算法的分析設(shè)計到編碼實現(xiàn)、程序運(yùn)行,以及進(jìn)一步的調(diào)試完善,極大的鍛煉了算法分析、設(shè)計和實現(xiàn)能力,即利用編程解決實際問題的能力。大幅度提升了的編程技能。并且在網(wǎng)絡(luò)爬蟲算法設(shè)計與實現(xiàn)過程中,學(xué)到了很多Java項目知識,學(xué)習(xí)了Java語言,MyEclipse開發(fā)工具使用,以及JSP相關(guān)知識

43、,初步接觸學(xué)習(xí)了多線程編程技術(shù)。同時我也清醒的認(rèn)識到受的專業(yè)能力的限制,所設(shè)計的爬蟲其性能還有很大提高空間,對多線程技術(shù)的理解不夠深刻,應(yīng)用不夠熟練恰當(dāng)。, 我會在以后的工作中進(jìn)一步的學(xué)習(xí),不斷的完善。5.2 展望由于工作量較大,時間倉促,的設(shè)計還一些不足,需要在日后的學(xué)習(xí)中繼續(xù)完善。首先,在多線程設(shè)計實現(xiàn)方面,只是簡單的實現(xiàn)了多線程技術(shù)。其實還可以充分地發(fā)揮多線程優(yōu)勢而提升爬蟲性能,比如考慮些多個線程之間因為資源共享和邏輯而產(chǎn)生的彼此之間的同步機(jī)制,以及Java對線程狀態(tài)的機(jī)制。其次,在搜索結(jié)果方面,只是實現(xiàn)了本地保存網(wǎng)頁。其實還可以讓程序連接數(shù)據(jù)庫,對結(jié)果進(jìn)行一定的分析,過濾,并建立索引,

44、以便之后的和檢索, 通過數(shù)據(jù)庫能夠讓爬取結(jié)果以更加清晰明了的方式呈現(xiàn)出來??梢宰屖占吒虞p松地找到切合需求的頁面。我相信在今后的不斷完善學(xué)習(xí)之中,我設(shè)計的網(wǎng)絡(luò)爬蟲程序的爬取效率將會越來越高,功能越來越具有性,實用性。附錄上傳文件的 代碼:/Myth .javapublic class MyTh implements Runnableint number;public MyTh(int num)number=num;System.out.println(線程 + number + 已經(jīng)創(chuàng)建 !);public void run()MyCrawler crawler = new MyCrawle

45、r(); crawler.crawling(new String );System.out.println(線程 + number + 結(jié)束 !here wo go!);/TestFrame.javaimport java.awt.Button; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.TextField;import javax.swing.JFrame; import javax.swing.JPanel;public class TestFrame extends JFrame priv

46、ate static final long serialVersionUID = 1L; private JPanel jContentPane = null;private TextField textField = null; private Button button = null; private String url;public static void main(String args) new TestFrame();/* This is the default constructor*/public TestFrame() super(); initialize();this.

47、setVisible(true);/* This method initializes this* return void*/private void initialize() this.setSize(300, 200);this.setContentPane(getJContentPane(); this.setTitle(JFrame);/* This method initializes jContentPane* return javax.swing.JPanel*/private JPanel getJContentPane() if (jContentPane = null) j

48、ContentPane = new JPanel(); jContentPa tLayout(new FlowLayout(); jContentPane.add(getTextField(), null); jContentPane.add(getButton(), null);return jContentPane;/* This method initializes textField* return java.awt.TextField*/private TextField getTextField() if (textField = null) textField = new TextField();textField.setSize(new Dimension(300, 50);return textField;/* This method initializes button* return java.awt.Button*/private Button getButton() if (button = n

溫馨提示

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

評論

0/150

提交評論