【正文】
成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 本 科 畢 業(yè) 論 文題 目 基于多線程的網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說(shuō)明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文),是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對(duì)本研究提供過幫助和做出過貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說(shuō)明并表示了謝意。作 者 簽 名: 日 期: 指導(dǎo)教師簽名: 日 期: 使用授權(quán)說(shuō)明本人完全了解 大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)校可以采用影印、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉?jī)?nèi)容。作者簽名: 日 期: 基于多線程的網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)摘要:網(wǎng)絡(luò)爬蟲(Web Crawler),又叫網(wǎng)絡(luò)蜘蛛(Web Spider),是搜索引擎的重要組成部分。隨著網(wǎng)絡(luò)的迅速發(fā)展,萬(wàn)維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn),作為搜索引擎不可或缺的一部分網(wǎng)絡(luò)爬蟲,一直是個(gè)熱門的研究課題,它的效能,直接決定了搜索引擎的未來(lái)。本課題所研究的網(wǎng)絡(luò)爬蟲采用廣度優(yōu)先搜索算法,并基于Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程。實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲關(guān)鍵技術(shù)是對(duì)URL進(jìn)行分析和去重。為使網(wǎng)絡(luò)爬蟲具備更高效的抓取能力,因而使用了多線程技術(shù)。同時(shí)為了避免無(wú)限制的等待,應(yīng)該對(duì)網(wǎng)絡(luò)爬蟲連接網(wǎng)絡(luò)及讀取時(shí)間最大值進(jìn)行設(shè)定。 本課題的目標(biāo)是研究并實(shí)現(xiàn)一個(gè)實(shí)現(xiàn)簡(jiǎn)單的可在后臺(tái)自動(dòng)運(yùn)行的爬蟲程序。系統(tǒng)可以進(jìn)行面向主題的抓取。從行為上來(lái)看,它更近似于主題網(wǎng)絡(luò)爬蟲。關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;廣度優(yōu)先;Java; 多線程;Design and implementation of a web crawler based on multithreading Specialty: Software Engineering Student Number: Student: Supervisor: ABSTRACT:Web Crawler, also called Web Spider, is an important part of search engine. With the rapid development of Internet, the World Wide Web bees the carrier of a large amount of information. And How to effectively extract and use this information to bee a great challenge. The quality of a search engine is mostly depended on the quality of a Web Crawler that as an indispensable part of web crawler search engine. So Web Crawler is a hot research topic those years. The project which was studied in this paper using the breadthfirst search algorithm, and based on the Java language for network programming. Implementation of the key technology of web crawler is to analyze and to URL. In order to make the web crawler has more efficient grasping ability, so the use of multithreading technology. At the same time in order to avoid waiting without limit, should be on the web crawler connecting network and read the time of maximum value. The goal of this project is to research and realize an implementation can be run automatically in the background simple crawler program. System can be a subject oriented grab. From the point of view, it is more similar to the topic web crawler.Key words: Web Crawler。 BreadthFirst Search。 Java。 MultiThreading目 錄緒 論 11 概述 2 研究目的和意義 2 網(wǎng)絡(luò)爬蟲的歷史 2 研究現(xiàn)狀和發(fā)展趨勢(shì) 32 網(wǎng)絡(luò)爬蟲相關(guān)技術(shù) 5 URL 5 HTTP協(xié)議 5 HTTP協(xié)議簡(jiǎn)介 5 HTTP消息的結(jié)構(gòu) 6 請(qǐng)求方法 7 HTTP狀態(tài)代碼 8 Java多線程 8 定義 8 優(yōu)點(diǎn) 8 不足 8 Java多線程編程 9 Java 網(wǎng)絡(luò)編程 11 TCP/IP 11 網(wǎng)絡(luò)編程步驟 11 Java網(wǎng)絡(luò)編程技術(shù) 13 正則表達(dá)式 14 正則表達(dá)式特點(diǎn) 14 15 網(wǎng)頁(yè)搜索策略 15 15 16 163 需求分析和模型設(shè)計(jì) 17 網(wǎng)絡(luò)爬蟲的定義 17 17 系統(tǒng)需求分析 17 下載網(wǎng)頁(yè) 17 分解網(wǎng)頁(yè) 18 遍歷網(wǎng)絡(luò) 18 存儲(chǔ)網(wǎng)頁(yè) 18 模型設(shè)計(jì) 18 數(shù)據(jù)庫(kù)結(jié)構(gòu) 19 技術(shù)選型 20 Java 簡(jiǎn)介 20 eclipse基本介紹 204 網(wǎng)絡(luò)爬蟲模型的總體設(shè)計(jì) 21 網(wǎng)絡(luò)爬蟲總體設(shè)計(jì) 21 URL處理 21 URL抽取 21 URL解析 21 URL判重 22 URL保存 22 網(wǎng)頁(yè)抓取 22 網(wǎng)頁(yè)相關(guān)度 22 什么是網(wǎng)頁(yè)標(biāo)題 22 算法實(shí)現(xiàn)步驟和算法描述: 23 HttpClient 類庫(kù)與Jericho HTML Parser類庫(kù) 23 HttpClient 23 Jericho Html Parser 23 多線程設(shè)計(jì) 245 系統(tǒng)實(shí)現(xiàn) 25 實(shí)現(xiàn)工具 25 系統(tǒng)模塊實(shí)現(xiàn) 25 URL隊(duì)列 25 網(wǎng)頁(yè)下載 26 提取URL 27 Spider類 28 296 系統(tǒng)運(yùn)行測(cè)試 30 系統(tǒng)運(yùn)行測(cè)試 30 系統(tǒng)分析 32結(jié) 論 33參考文獻(xiàn) 34致 謝 3535緒 論隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的日臻成熟并被廣泛的應(yīng)用到社會(huì)生活的各個(gè)領(lǐng)域,網(wǎng)絡(luò)上的信息呈爆炸式增長(zhǎng),并由此誕生了大量的數(shù)據(jù),人類進(jìn)入了一個(gè)“大數(shù)據(jù)時(shí)代”。這使得人們?cè)诰W(wǎng)上找到自己所需的信息越來(lái)越困難,如果在信息的海洋里撈針。據(jù)統(tǒng)計(jì)搜索引擎已經(jīng)成為僅次于電子郵件服務(wù),是人們使用最多的網(wǎng)路服務(wù)。搜索引擎搜集互聯(lián)網(wǎng)上數(shù)以億計(jì)的網(wǎng)頁(yè),并為每個(gè)關(guān)鍵詞建立索引。用戶通過輸入自己感興趣的關(guān)鍵字就能獲得與之相關(guān)的網(wǎng)頁(yè)。從搜索引擎出發(fā)就能很快的到達(dá)互聯(lián)網(wǎng)的任何一個(gè)地方。在建立搜索引擎的過程中,獲取網(wǎng)頁(yè)是非常重要的一個(gè)環(huán)節(jié)。爬蟲程序就是用來(lái)獲取網(wǎng)頁(yè)的程序。網(wǎng)絡(luò)爬蟲,是一種按照一定的規(guī)則,自動(dòng)的抓取因特網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有網(wǎng)路螞蟻,自動(dòng)索引,模擬程序或者蠕蟲。網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè),從網(wǎng)站的一個(gè)頁(yè)面(通常是首頁(yè))開始,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址,然后通過這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè),這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè)都抓取下來(lái)。 WEB資源自動(dòng)獲取技術(shù)程序就是用來(lái)搜集網(wǎng)頁(yè)的程序。以何種策略遍歷互聯(lián)網(wǎng)上的網(wǎng)頁(yè),也成了該程序主要的研究方向。現(xiàn)在比較流行的搜索引擎,比如Google,百度,它們自動(dòng)獲取資源程序的技術(shù)內(nèi)幕一般都不公開。目前幾種比較常用的自動(dòng)獲取資源實(shí)現(xiàn)策略:廣度優(yōu)先的爬蟲程序,Repetitive爬蟲程序,定義爬行爬蟲程序,深層次爬行爬蟲程序。此外,還有根據(jù)概率論進(jìn)行可用Web頁(yè)的數(shù)量估算,?用于評(píng)估互聯(lián)網(wǎng)Web規(guī)模的抽樣爬蟲程序;采用爬行深度、頁(yè)面導(dǎo)入鏈接量分析等方法,限制從程序下載不相關(guān)的Web頁(yè)的選擇性爬行程序等等。自動(dòng)獲取資源技術(shù)為搜索引擎從互聯(lián)網(wǎng)上自動(dòng)獲取整個(gè)網(wǎng)頁(yè),也可以網(wǎng)頁(yè)中的某一個(gè)圖片或者是網(wǎng)頁(yè)鏈接的文件等資源,是搜索引擎的重要組成部分。自動(dòng)獲取資源技術(shù)程序的實(shí)現(xiàn)策略,運(yùn)行效率直接影響搜索引擎的搜索結(jié)果。不同的搜索引擎,會(huì)根據(jù)對(duì)搜索結(jié)果的不同需求,選擇最合適的爬行策略來(lái)搜集互聯(lián)網(wǎng)上的信息。高效,優(yōu)秀的自動(dòng)獲取資源程序可以使人們?cè)诨ヂ?lián)網(wǎng)上尋找到更及時(shí),更準(zhǔn)確的信息。本課題旨在根據(jù)上述原理設(shè)計(jì)與實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)爬蟲系統(tǒng)。1 概述 研究目的和意義網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè),從網(wǎng)站的某一個(gè)頁(yè)面(通常是首頁(yè))開始,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址,然后通過這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè),這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止。而本課題的主要就是怎樣更高效的獲取網(wǎng)頁(yè),并通過所給條件篩選得到人們所需要的網(wǎng)頁(yè)。隨著互連網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)信息量呈現(xiàn)出爆炸性增長(zhǎng)的趨勢(shì),當(dāng)今這個(gè)時(shí)代被稱為“大數(shù)據(jù)”時(shí)代。越來(lái)越多的信息涌到人們的面前,然而互聯(lián)網(wǎng)在人們提供豐富信息的同時(shí),卻在如何對(duì)信息進(jìn)行高效便捷使用方面給人民帶來(lái)巨大的挑戰(zhàn):一方面互聯(lián)網(wǎng)上的信息種類繁多、豐富多彩,而另一方面卻很難找到真正有用的信息,當(dāng)人們想從浩淼無(wú)邊的數(shù)據(jù)海洋中快速準(zhǔn)確的找到自己所需要的信息時(shí),常常需要“搜索引擎”的幫助,而網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成。它為搜索引擎從Internet上下載網(wǎng)頁(yè)。作為搜索引擎的資源采集部分,網(wǎng)絡(luò)爬蟲的性能將直接影響到整個(gè)搜索引擎索引網(wǎng)頁(yè)的數(shù)量、質(zhì)量和更新周期。高效,優(yōu)秀的爬蟲程序可以使人們?cè)诨ヂ?lián)網(wǎng)上尋找到更及時(shí),更準(zhǔn)確的信息。 網(wǎng)絡(luò)爬蟲的歷史在互聯(lián)網(wǎng)發(fā)展的早期,網(wǎng)站數(shù)量相對(duì)較少,信息數(shù)據(jù)量不大,查找也比較容易。然而伴隨互聯(lián)網(wǎng)井噴性的發(fā)展,普通網(wǎng)絡(luò)用戶想找到自己所需的資料簡(jiǎn)直如同在數(shù)據(jù)的海洋里撈針,為滿足大眾信息檢索需求的專業(yè)搜索網(wǎng)站便應(yīng)運(yùn)而生了。所有搜索引擎的鼻祖,是1990年由Montreal的McGill University三名學(xué)生(Alan Emtage、Peter Deutsch、Bill Wheelan)發(fā)明的Archie(Archie FAQ)。Alan Emtage等想到了開發(fā)一個(gè)可以用文件名查找文件的系統(tǒng),于是便有了Archie。Archie是第一個(gè)自動(dòng)索引互聯(lián)網(wǎng)上匿名FTP網(wǎng)站文件的程序,但它還不是真正的搜索引擎。Archie是一個(gè)可搜索的FTP文件名列表,用戶必須輸入精確的文件名搜索,然后Archie會(huì)告訴用戶哪一個(gè)FTP地址可以下載該文件。由于Archie深受歡迎,受其啟發(fā),Nevada System Computing Services大學(xué)于1993年開發(fā)了一個(gè)Gopher(Gopher FAQ)搜索工具Veronica(Veronica FAQ)。Jug head是后來(lái)另一個(gè)Gopher搜索工具。雖然當(dāng)時(shí)萬(wàn)維網(wǎng)還未出現(xiàn),但網(wǎng)絡(luò)中文件傳輸還是相當(dāng)頻繁的,而且由于大量的文件散布在各個(gè)分散的FTP主機(jī)中,查詢起來(lái)非常不便,因此Alan Archie工作原理與現(xiàn)在的搜索引擎已經(jīng)很接近,它依靠腳本程序自動(dòng)搜索網(wǎng)上的文件,然后對(duì)有關(guān)信息進(jìn)行索引,供使用者以一定的表達(dá)式查詢。當(dāng)時(shí),“機(jī)器人”一詞在編程者中十分流行。電腦“機(jī)器人”(Computer Robot)是指某個(gè)能以人類無(wú)法達(dá)到的速度不間斷地執(zhí)行某項(xiàng)任務(wù)的軟件程序。由于專門用于檢索信息的“機(jī)器人”程序象蜘蛛一樣在網(wǎng)絡(luò)間爬來(lái)爬去,因此, 搜索引擎的“機(jī)器人”程序就被稱為“蜘蛛”程序。世界上第一個(gè)用于監(jiān)測(cè)互聯(lián)網(wǎng)發(fā)展規(guī)模的“機(jī)器人”程序是Matthew Gray開發(fā)的World wide Web Wanderer。剛開始它只用來(lái)統(tǒng)計(jì)互聯(lián)網(wǎng)上的服務(wù)器數(shù)量,后來(lái)則發(fā)展為能夠檢索網(wǎng)站域名。與Wanderer相對(duì)應(yīng),Martin Kosher于1993年10月創(chuàng)建了ALIWEB,它是Archie的HTTP版本。ALIWEB不使用“機(jī)器人”程序,而是靠網(wǎng)站主動(dòng)提交信息來(lái)建立 自己的鏈接索引,類似于現(xiàn)在我們熟知的Yahoo。隨著互聯(lián)網(wǎng)的迅速發(fā)展,使得檢索所有新出現(xiàn)的網(wǎng)頁(yè)變得越來(lái)越困難,因此,在Matthew Gray的Wanderer基礎(chǔ)上,一些編程者將傳統(tǒng)的“蜘蛛”程序工作原理作了些改進(jìn)。直到一些編程者提出了這樣的設(shè)想,既然所有網(wǎng)頁(yè)都可能有連向其他網(wǎng)站的鏈接,那么從跟蹤一個(gè)網(wǎng)站的鏈接開始,就有可能檢索整個(gè)互聯(lián)網(wǎng)。到1993年底,一些基于此原理的搜索引擎開始紛紛涌現(xiàn),但是早期的搜索引擎只是以搜索工具在數(shù)據(jù)庫(kù)中找到匹配信息的先后次