網(wǎng)絡(luò)爬蟲技術(shù)探究_第1頁(yè)
網(wǎng)絡(luò)爬蟲技術(shù)探究_第2頁(yè)
網(wǎng)絡(luò)爬蟲技術(shù)探究_第3頁(yè)
網(wǎng)絡(luò)爬蟲技術(shù)探究_第4頁(yè)
網(wǎng)絡(luò)爬蟲技術(shù)探究_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JIU JIANG UNIVERSITY畢 業(yè) 論 文題 目 網(wǎng)絡(luò)爬蟲技術(shù)探究 英文題目 Web Spiders Technology Explore 院 系 信息科學(xué)與技術(shù)學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 姓 名 聞澤 班級(jí)學(xué)號(hào) A081129 指導(dǎo)教師 邱興興 二一二年五月信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文摘 要網(wǎng)絡(luò)爬蟲是一種自動(dòng)搜集互聯(lián)網(wǎng)信息的程序。通過(guò)網(wǎng)絡(luò)爬蟲不僅能夠?yàn)樗阉饕娌杉W(wǎng)絡(luò)信息,而且可以作為定向信息采集器,定向采集某些網(wǎng)站下的特定信息,如招聘信息,租房信息,以及網(wǎng)絡(luò)營(yíng)銷常要的郵箱地址信息等。本文通過(guò)JAVA實(shí)現(xiàn)了一個(gè)基于廣度優(yōu)先算法的爬蟲程序。本論文闡述了網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)中一些主要問

2、題:為何使用廣度優(yōu)先的爬行策略,以及如何實(shí)現(xiàn)廣度優(yōu)先爬行;系統(tǒng)實(shí)現(xiàn)過(guò)程中的數(shù)據(jù)存儲(chǔ);網(wǎng)頁(yè)信息解析等。通過(guò)實(shí)現(xiàn)這一爬蟲程序,可以搜集某一站點(diǎn)的所有URLs,并通過(guò)得到的URLs采集到頁(yè)面的內(nèi)容,在從內(nèi)容中提取到需要的內(nèi)容,如郵箱地址以及頁(yè)面標(biāo)題等。再將得到的URLs等采集到的數(shù)據(jù)存到數(shù)據(jù)庫(kù),以便檢索。本文從搜索引擎的應(yīng)用出發(fā),探討了網(wǎng)絡(luò)爬蟲在搜索引擎中的作用和地位,提出了網(wǎng)絡(luò)爬蟲的功能和設(shè)計(jì)要求。在對(duì)網(wǎng)絡(luò)爬蟲系統(tǒng)結(jié)構(gòu)和工作原理所作分析的基礎(chǔ)上,研究了頁(yè)面爬取、解析等策略和算法,并使用Java實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)爬蟲的程序,對(duì)其運(yùn)行結(jié)果做了分析。關(guān)鍵詞:網(wǎng)絡(luò)爬蟲,廣度優(yōu)先 ,搜索引擎AbstractTh

3、e Web Spider is an automated program collects information on the Internet. The Web Spider can not only search engine to collect network information and can be used as directional information collection, directed acquisition of some site specific information, such as recruitment information, rental i

4、nformation, as well as network marketing often have to e-mail address information.JAVA Implementation of an algorithm based on breadth first Spider program. This paper described the data stored in the Web Spider to achieve some of the major questions: Why use a breadth-first crawling strategy, as we

5、ll as how to implement the breadth-first crawling; system implementation process; web page information to resolve.Through the realization of this Spider can collect all of a site's URLs, URLs collected by and get to the page content, to extract from the content, the content, such as email addres

6、s and page title. And then get the Urls collected was data saved to the database to retrieve. In this paper, the application of the search engine to explore the role and status of a Web Spider search engine, web Spider functionality and design requirements. Web Spider system structure and working pr

7、inciple of the analysis based on study strategies and algorithms of the page crawling, parsing, etc. and use the Java implementation of a Web Spider program, its operating results analysis.Keywords: Spider, Breadth First Search, Search Engine目 錄摘 要IAbstractII1 緒論1.1 現(xiàn)狀分析(1)1.2 系統(tǒng)開發(fā)背景(2)1.3 系統(tǒng)意義(3)1.

8、4 論文主要的工作(4)1.5 論文結(jié)構(gòu)(4)2 需求分析2.1 系統(tǒng)非功能性需求(5)2.2 系統(tǒng)功能需求(5)2.3 系統(tǒng)數(shù)據(jù)流程分析(5)2.4 環(huán)境需求(8)2.5 本章小結(jié)(9)3 系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)(10)3.2 爬行策略分析(12)3.3 爬蟲技術(shù)分析(14)3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)(17)3.5 本章小結(jié)(17)4 系統(tǒng)實(shí)現(xiàn)4.1 系統(tǒng)功能簡(jiǎn)介(18)4.2 核心算法(20)4.3 功能模塊實(shí)現(xiàn)(21)4.4 數(shù)據(jù)庫(kù)實(shí)現(xiàn).(30)4.5 本章小結(jié)(33)5 系統(tǒng)測(cè)試5.1 抓取測(cè)試(34)5.2 搜索測(cè)試(37)5.3 本章小結(jié)(38)6 總結(jié)與展望致謝(40)參考文獻(xiàn)(4

9、1)IV信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文1 緒論1.1 現(xiàn)狀分析從雅虎最初的網(wǎng)頁(yè)分類技術(shù),谷歌PageRank開始,到目前的百度等搜索引擎的迅猛發(fā)展,搜索引擎在互聯(lián)網(wǎng)中應(yīng)用領(lǐng)域展示了越來(lái)越廣泛的作用。搜索引擎的科學(xué)研究?jī)r(jià)值不僅僅體現(xiàn)在其高技術(shù)挑戰(zhàn)性,而且表現(xiàn)在其對(duì)于整個(gè)互聯(lián)網(wǎng)絡(luò)乃至民生提供的便捷性和信息高速傳達(dá)方式,對(duì)整個(gè)社會(huì)的高度的經(jīng)濟(jì)促進(jìn)作用1。從2000年開始在國(guó)內(nèi)的緩慢發(fā)展,到目前國(guó)內(nèi)百度,谷歌,搜搜,搜狗,有道等搜索引擎林立,搜索引擎的研究還只是剛剛的開始,如何在Web信息中尋找最符合用戶需求的信息展示出來(lái),這不僅在尺度上是空前巨大,而且規(guī)范條件也是非常的不確定。及其的系統(tǒng)往往是很難判

10、別出用戶真正需要的是什么信息的,而目前乃至以后,用戶總是希望以最簡(jiǎn)短的搜索約束范圍(即用戶輸入的關(guān)鍵字)搜索到自己想要的信息,所以系統(tǒng)得到的輸入是一個(gè)籠統(tǒng)的模糊的概念,而這種籠統(tǒng)的不確定性的約束范圍,和海量數(shù)據(jù)的處理,已經(jīng)將搜索引擎研究技術(shù)乃至整個(gè)科學(xué)研究技術(shù)帶入了一個(gè)真正的高度。在搜索技術(shù)中,對(duì)信息的處理,既要考慮到數(shù)據(jù)的客觀性,又要考慮到行為的主觀性。數(shù)據(jù)的客觀性表現(xiàn)在Web中數(shù)據(jù)形式的客觀存在性,面對(duì)任何人,同一網(wǎng)頁(yè)中的信息是不變的,而主觀性則是指,每條信息對(duì)于不同用戶不同需求所能提供的信息量區(qū)別是很大的,這個(gè)可以很深刻的理解:一個(gè)介紹機(jī)器用法的網(wǎng)頁(yè)對(duì)于新用戶來(lái)說(shuō)肯定是很有用的,而對(duì)于開

11、發(fā)者來(lái)說(shuō),卻不一定有用或者作用的層次不同了。搜索引擎技術(shù)中客觀性和主觀性存在很多這樣的矛盾之處,而不同的處理方式則會(huì)導(dǎo)致最后傳達(dá)信息量的巨大或細(xì)微差別,這是以前的科學(xué)技術(shù)研究的盲點(diǎn),而針對(duì)目前的社會(huì)需求,這又是刻不容緩的需要解決的一個(gè)方面,越來(lái)越多的人已經(jīng)對(duì)這個(gè)領(lǐng)域產(chǎn)生了強(qiáng)大的興趣。搜索引擎技術(shù)帶動(dòng)了很多相關(guān)學(xué)科的發(fā)展,離散數(shù)學(xué),矩陣技術(shù)的應(yīng)用讓大家對(duì)數(shù)學(xué)產(chǎn)生了廣泛的興趣,搜索引擎優(yōu)化技術(shù)(SEO)成為了許多人研究和工作的方向,同時(shí)也是電子商務(wù)的強(qiáng)力武器。而搜索引擎對(duì)于人工智能的貢獻(xiàn)更是真正具有偉大意義的!自然語(yǔ)言理解,模式識(shí)別,機(jī)器學(xué)習(xí),數(shù)據(jù)挖掘技術(shù)在搜索引擎的發(fā)展中得到了強(qiáng)大的提高。而文本

12、分類,多媒體識(shí)別,海量數(shù)據(jù)挖掘,機(jī)器在線增量學(xué)習(xí),在線分類類聚,信息抽取和摘取,命名等又和實(shí)際應(yīng)用緊密的結(jié)合成商用搜索引擎,而其強(qiáng)大的資金后盾,也促進(jìn)了Web搜索和人工智能行業(yè)的大力發(fā)展。1.2 系統(tǒng)開發(fā)背景隨著信息時(shí)代的到來(lái)和發(fā)展,Web上的信息正在飛速地增長(zhǎng),這帶給人們前所未有護(hù)的豐富的信息資源。然而,在給人們提供豐富信息的同時(shí),卻在web信息的高效便捷使用方面給人們帶來(lái)巨大的挑戰(zhàn):一方面Web上的信息種類繁多、豐富多彩,而另一方面卻很難找到真正有用的信息。在信息社會(huì)中,沒有控制和組織的信息不再是一種資源,它倒反而成為信息工作者的敵人。搜索引擎的問世,為快速、準(zhǔn)確、有效地獲取網(wǎng)絡(luò)信息資源提

13、供了極大的幫助。搜索引擎是為滿足人們搜索網(wǎng)絡(luò)信息的需要而開發(fā)的網(wǎng)絡(luò)工具,是互聯(lián)網(wǎng)信息查詢的導(dǎo)航針,是溝通用戶與網(wǎng)絡(luò)信息的橋梁。搜索引擎的出現(xiàn)很大程度上解決了人們?cè)赪eb上查找信息的困難,但是隨著信息多元化的增長(zhǎng),千篇一律給所有用戶同一個(gè)入口顯然不能滿足特定用戶更深入的查詢需求。即現(xiàn)有搜索引擎在提供用戶便利獲取豐富的信息資源的同時(shí),也存在著種種的不足之處。(1)查準(zhǔn)率低:對(duì)任意主題,都可能很容易地包含成百上千的文檔,這會(huì)使得搜索引擎返回的文檔數(shù)過(guò)于龐大,其中很多相關(guān)性并不大,或所包含的內(nèi)容質(zhì)量不高。(2)查全率低:搜索引擎的索引能力正在越來(lái)越落后于網(wǎng)絡(luò)的快速增長(zhǎng)速度。(3)內(nèi)容相對(duì)陳舊:各個(gè)搜索

14、引擎搜索到的文件有時(shí)是不再有效的,因?yàn)榫W(wǎng)頁(yè)已被移至別處或不存在。有調(diào)查發(fā)現(xiàn),幾個(gè)不同搜索引擎檢索到的第一個(gè)文件在網(wǎng)上存在的平均時(shí)間是186天。(4)信息分布不平衡:有83%的站點(diǎn)包含商業(yè)的內(nèi)容,只有6%的站點(diǎn)包含科學(xué)或教育的內(nèi)容。因而,人們提出了對(duì)搜索引擎新的要求:(l)運(yùn)行在常規(guī)的軟/硬件設(shè)備之上;(2)只采集某一特定學(xué)科或特定主題的Web信息資源;(3)能夠方便地對(duì)專題和學(xué)科進(jìn)行配置。為了滿足這些新的要求,主題爬蟲應(yīng)運(yùn)而生。主題爬蟲就是針對(duì)性的為某一特定領(lǐng)域、某一特定人群或某一特定需求提供的有一定價(jià)值的信息和相關(guān)服務(wù)??梢院?jiǎn)單的說(shuō)成是搜索引擎領(lǐng)域的行業(yè)化分工。由于主題爬蟲分類細(xì)致精確、數(shù)據(jù)

15、全面深入、更新及時(shí),并且運(yùn)用了人工分類以及特征提取等智能化策略,因此它將更加有效和準(zhǔn)確。主題爬蟲是主題搜索引擎的重要組成部分,它負(fù)責(zé)對(duì)用戶感興趣的某一主題的網(wǎng)頁(yè)進(jìn)行抓取。具備普通爬蟲的功能,即通過(guò)網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè),從網(wǎng)站某一個(gè)頁(yè)面(通常是首頁(yè))開始,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址,然后通過(guò)這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè),這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止。主題爬蟲還具備主題過(guò)濾的功能,即使爬蟲盡可能多地爬行主題相關(guān)的網(wǎng)頁(yè),盡可能少地爬行無(wú)關(guān)網(wǎng)頁(yè),對(duì)非主題的網(wǎng)頁(yè)進(jìn)行剔除。因此,主題爬蟲得到越來(lái)越多研究者的關(guān)注。主題爬蟲的優(yōu)勢(shì)在于,由于Web上的內(nèi)容豐富多樣,每

16、個(gè)主題在其中占的比例都很小,需要采集的內(nèi)容也相對(duì)較少,可以極大地減少時(shí)間和存儲(chǔ)空間的要求。在時(shí)間上的優(yōu)勢(shì)保證了網(wǎng)頁(yè)的及時(shí)更新。而且,主題信息采集搜集的內(nèi)容單一,用戶查找時(shí)得到的冗余和無(wú)用信息也較少2。1.3 系統(tǒng)意義網(wǎng)絡(luò)爬蟲的工作是不停的抓取互聯(lián)網(wǎng)上資源的信息,隨著網(wǎng)絡(luò)的迅速發(fā)展,萬(wàn)維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。搜索引擎(Search Engine),例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!和Google等,作為一個(gè)輔助人們檢索信息的工具成為用戶訪問萬(wàn)維網(wǎng)的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,為了解決上述問題,定向抓

17、取相關(guān)網(wǎng)頁(yè)資源的網(wǎng)絡(luò)爬蟲應(yīng)運(yùn)而生。網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)下載網(wǎng)頁(yè)的程序,它根據(jù)既定的抓取目標(biāo),有選擇的訪問萬(wàn)維網(wǎng)上的網(wǎng)頁(yè)與相關(guān)的鏈接,獲取所需要的信息。網(wǎng)絡(luò)爬蟲的準(zhǔn)確高效直接關(guān)系到搜索引擎的功能是否強(qiáng)大3。1.4 論文主要的工作(1)針對(duì)網(wǎng)絡(luò)爬蟲的工作原理,進(jìn)行需求分析、結(jié)構(gòu)分析、系統(tǒng)分析。(2)開始初期的實(shí)現(xiàn),主要實(shí)現(xiàn)的功能是:網(wǎng)頁(yè)抓取、URLs提取、頁(yè)面內(nèi)容解析、數(shù)據(jù)存儲(chǔ)等。(3)系統(tǒng)測(cè)試網(wǎng)絡(luò)爬蟲的功能,修改不完善的地方,盡量做到符合基本的功能要求。1.5 論文結(jié)構(gòu)本論文主要介紹的網(wǎng)絡(luò)爬蟲的開放過(guò)程,全文共分為五章:第一章緒論,簡(jiǎn)要的介紹了系統(tǒng)的開放背景級(jí)研究現(xiàn)狀,以及文本的工作概要;第二章系

18、統(tǒng)需求分析,主要介紹了系統(tǒng)所要解決的問題,以及系統(tǒng)的體系結(jié)構(gòu)和類結(jié)構(gòu);第三章系統(tǒng)總體設(shè)計(jì),主要是介紹了系統(tǒng)實(shí)現(xiàn)的主要算法策略,以及具體的功能劃分;第四章系統(tǒng)實(shí)現(xiàn),主要介紹了實(shí)現(xiàn)的各個(gè)功能的具體代碼的分析;第五章系統(tǒng)測(cè)試,主要是對(duì)整個(gè)系統(tǒng)進(jìn)行各個(gè)模塊的測(cè)試,是否符合要求;第六章總結(jié)與展望,主要講述了整個(gè)系統(tǒng)完成后的心得以及系統(tǒng)的一些缺陷。論文的致謝和參考文獻(xiàn)部分。2 需求分析2.1 系統(tǒng)非功能性需求所謂非功能性需求是指為滿足用戶業(yè)務(wù)需求必須具有且除功能需求外的特性。雖然此需求與系統(tǒng)業(yè)務(wù)邏輯無(wú)直接關(guān)系,但也影響著系統(tǒng)的質(zhì)量,不能忽視。本系統(tǒng)的非功能性需求主要包括以下幾個(gè)方面:(1)易用性本系統(tǒng)在功

19、能完善的情況下,用戶界面盡量做到簡(jiǎn)潔友好、便于操作,并應(yīng)有效地防止誤操作的發(fā)生。(2)性能可靠本系統(tǒng)屬于一個(gè)需要聯(lián)網(wǎng)進(jìn)行抓取數(shù)據(jù)的系統(tǒng),因此需要做到用戶在使用時(shí),避免影響到用戶上網(wǎng)瀏覽網(wǎng)頁(yè)出現(xiàn)網(wǎng)速慢的問題。(3)通用性本系統(tǒng)可以適應(yīng)各種系統(tǒng)環(huán)境,滿足了不同類型用戶的需求。2.2 系統(tǒng)功能需求通過(guò)需求分析,確定本系統(tǒng)有以下一些基本功能: (1)前臺(tái)界面管理:前臺(tái)界面主要用于對(duì)用戶輸入進(jìn)行判斷處理,再將合法輸入提交到處理單元。(2)Servlet處理程序:主要用于接收傳來(lái)的初始URL ,然后再調(diào)用Spider主程序。(3)Spider主程序:主要的功能是建立初始隊(duì)列、解析URLs、抓取內(nèi)容、數(shù)據(jù)存

20、儲(chǔ)等系統(tǒng)核心的功能。(4)數(shù)據(jù)庫(kù)管理:主要用于存放抓取的數(shù)據(jù)保存以便用戶的檢索。2.3 系統(tǒng)數(shù)據(jù)流程分析通過(guò)對(duì)網(wǎng)絡(luò)爬蟲的數(shù)據(jù)流動(dòng)分析,得出數(shù)據(jù)流程如圖2-1所示。NOYESYESNOYESNO將初始的URLS加入到等待隊(duì)列啟動(dòng)爬蟲程序從URL隊(duì)列獲取等待URL解析HTML,獲取URLs重復(fù)URL嗎絕對(duì)地址嗎將URLs加入到URL等待隊(duì)列將相對(duì)地址轉(zhuǎn)換為絕對(duì)地址非法URL嗎圖2-1 爬蟲工作原理流程圖網(wǎng)絡(luò)爬蟲是搜索引擎的核心部分,其名稱出自Spider 的意譯,具有相同詞義的詞語(yǔ)還有Spider,robots,bots,wanderer等等。網(wǎng)絡(luò)爬蟲定義有廣義和狹義之分,狹義上的定義為利用標(biāo)準(zhǔn)的

21、Http協(xié)議根據(jù)超級(jí)鏈接和Web文檔檢索的方法遍歷萬(wàn)維網(wǎng)信息空間的軟件程序,而廣義則是所有能利用Http協(xié)議檢索Web文檔的軟件都稱之為網(wǎng)絡(luò)爬蟲。網(wǎng)絡(luò)爬蟲是一個(gè)功能很強(qiáng)的自動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。它通過(guò)請(qǐng)求站點(diǎn)上的HTML文檔訪問某一站點(diǎn)。它遍歷Web空間,不斷從一個(gè)站點(diǎn)移動(dòng)到另一個(gè)站點(diǎn),自動(dòng)建立索引,并加入到網(wǎng)頁(yè)數(shù)據(jù)庫(kù)中。網(wǎng)絡(luò)爬蟲進(jìn)入某個(gè)超級(jí)文本時(shí),它利用HTML語(yǔ)言的標(biāo)記結(jié)構(gòu)來(lái)搜索信息及獲取指向其他超級(jí)文本的URL地址,可以完全不依賴用戶干預(yù)實(shí)現(xiàn)網(wǎng)絡(luò)上的自動(dòng)“爬行”和搜索。下面將詳細(xì)分析爬蟲的工作流程,通過(guò)流程圖來(lái)描述爬蟲的工作原理,本網(wǎng)絡(luò)爬

22、蟲工作原理如下。(1)將給定的初始URL加入到URL等待隊(duì)列。(2)創(chuàng)建爬蟲程序,啟動(dòng)爬蟲程序。(3)爬蟲線程從URL等待隊(duì)列中取得任務(wù)URL,根據(jù)URL下載網(wǎng)頁(yè)內(nèi)容,然后解析網(wǎng)頁(yè)內(nèi)容,獲取超鏈接URLs以及頁(yè)面內(nèi)容信息。如果獲取到的URL為相對(duì)地址,則需要轉(zhuǎn)換為絕對(duì)地址,然后在判斷是否為站外地址,是則淘汰站外URLs,如果是不能訪問的地址如錯(cuò)誤URLs或者不能解析的URL地址,則也要?jiǎng)h除掉。再判斷這些URL是否已經(jīng)被下載到,如果沒有則加入到URL等待隊(duì)列4。(4)繼續(xù)重復(fù)的執(zhí)行步驟(3),直到結(jié)束條件滿足后則停止繼續(xù)爬行。通過(guò)圖2-1所示的爬蟲工作原理流程圖,我們可以清楚的知道爬蟲的工作流程

23、以及工作的原理。網(wǎng)絡(luò)爬蟲的主要目的就是爬取用戶需要的內(nèi)容,即盡可能的爬取有關(guān)內(nèi)容的頁(yè)面,盡可能減少抓取無(wú)關(guān)頁(yè)面,對(duì)非主題的網(wǎng)頁(yè)進(jìn)行剔除,確保網(wǎng)頁(yè)的質(zhì)量。因而,在設(shè)計(jì)主題爬蟲時(shí),本文主要采用兩種手段來(lái)實(shí)現(xiàn)高質(zhì)量主題網(wǎng)頁(yè)的下載。一是對(duì)已經(jīng)下載到本地的網(wǎng)頁(yè)進(jìn)行主題相關(guān)性判斷,將相關(guān)的網(wǎng)頁(yè)保存,無(wú)關(guān)的丟棄。二是分析已有信息,預(yù)測(cè)出與主題相關(guān)的URL進(jìn)行下一輪抓取。在設(shè)計(jì)的過(guò)程中,要考慮到以下幾點(diǎn):(1)穩(wěn)定性:設(shè)計(jì)的總體結(jié)構(gòu)要合理,保證系統(tǒng)能夠穩(wěn)定運(yùn)行。(2)高效性:系統(tǒng)采用多線程技術(shù)對(duì)網(wǎng)頁(yè)實(shí)現(xiàn)高效的抓取。(3)靈活性:對(duì)系統(tǒng)的各個(gè)配置參數(shù)進(jìn)行修改,使系統(tǒng)能夠更好地運(yùn)行。(4)主題性:系統(tǒng)能夠很好地應(yīng)

24、用于不同主題的網(wǎng)頁(yè)抓取?;谝陨显瓌t,本文對(duì)主題爬蟲的結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)、存儲(chǔ)文件和所采用的主題采集策略進(jìn)行了詳細(xì)設(shè)計(jì)。2.4 環(huán)境需求操作系統(tǒng)是winXP;JAVA程序的編寫工具是MyEclipse 8.5 M1;數(shù)據(jù)庫(kù)是SQLServer 2000。2.4.1 開發(fā)平臺(tái) 此系統(tǒng)開發(fā)選用的平臺(tái)是Java Server Page(簡(jiǎn)稱JSP)+SQL Server數(shù)據(jù)庫(kù),它適應(yīng)于Windows操作系統(tǒng)并能很好的與其應(yīng)用程序結(jié)合,而且SQL Server數(shù)據(jù)庫(kù)也易操作,從而大大降低了編程難度。具體如下:(1)Web服務(wù)器采用Tomcat5.5服務(wù)器,數(shù)據(jù)庫(kù)管理系統(tǒng)為SQL Server。(2)采用了

25、jdk1.6的環(huán)境。(3)開發(fā)工具使用Dreamweaver搭建系統(tǒng)頁(yè)面框架。(4)使用Myeclipse工具開發(fā)。2.4.2 系統(tǒng)開發(fā)工具本系統(tǒng)是基于JSP+SQL Server數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)的,現(xiàn)對(duì)JSP技術(shù)和SQL Server數(shù)據(jù)庫(kù)作簡(jiǎn)要的介紹。2.4.3 開發(fā)語(yǔ)言JSP頁(yè)面由HTML代碼和嵌入其中的Java代碼所組成。JSP具備了Java技術(shù)的簡(jiǎn)單易用,完全的面向?qū)ο?,具有平臺(tái)無(wú)關(guān)性且安全可靠,主要面向因特網(wǎng)等特點(diǎn)。JSP的技術(shù)的優(yōu)勢(shì):(1)一次編寫,到處運(yùn)行。在這一點(diǎn)上Java比PHP更出色,除了系統(tǒng)之外,代碼不需要做任何更改。(2)系統(tǒng)的多平臺(tái)支持。基本上可以在所有平臺(tái)上的任意環(huán)

26、境中開發(fā),在任意環(huán)境中進(jìn)行系統(tǒng)部署,在任意環(huán)境中擴(kuò)展。相比ASP/PHP的局限性是顯而易見的。(3)JSP技術(shù)是用Java語(yǔ)言作為腳本語(yǔ)言的。Java語(yǔ)言是成熟的、強(qiáng)大的、易擴(kuò)充的編程語(yǔ)言。(4)高效性與安全性。JSP在執(zhí)行前先被編譯成字節(jié)碼,字節(jié)碼由Java虛擬機(jī)解釋執(zhí)行,比源碼解釋效率高。(5)可維護(hù)性。由于JSP技術(shù)是一種開放的、跨平臺(tái)的結(jié)構(gòu),因此Web服務(wù)器、平臺(tái)及其他組件能很容易升級(jí)或切換,且不會(huì)影響JSP基本的應(yīng)用程序。(6)多樣化和功能強(qiáng)大的開發(fā)工具支持。Java已經(jīng)有了許多非常優(yōu)秀的開發(fā)工具,而且許多可以免費(fèi)得到,并且其中許多已經(jīng)可以順利的運(yùn)行于多種平臺(tái)之下。2.4.4 數(shù)據(jù)庫(kù)

27、SQL Server是微軟公司的一款數(shù)據(jù)庫(kù)產(chǎn)品,它是關(guān)系型數(shù)據(jù)庫(kù),針對(duì)電子商務(wù)、數(shù)據(jù)倉(cāng)庫(kù)和在線商務(wù)解決方案的卓越的數(shù)據(jù)平臺(tái)。它執(zhí)行效率高,可在多用戶之間有效的分配可用資源,比如:內(nèi)存、網(wǎng)絡(luò)帶寬和磁盤I/O等。另外,SQL Server可以動(dòng)態(tài)的將自身配置成能有效地使用客戶端桌面的可用資源5。2.5 本章小結(jié)這章主要是明確系統(tǒng)開發(fā)的需求分析,明確系統(tǒng)要實(shí)現(xiàn)的功能,確立系統(tǒng)的功能模塊,按照系統(tǒng)開發(fā)的流程,先確立系統(tǒng)要實(shí)現(xiàn)的功能模塊,最后確立系統(tǒng)的用戶需求的定位,本需求分析報(bào)告的目的是規(guī)范化本軟件的編寫,旨在于提高軟件開發(fā)過(guò)程中的能見度,便于對(duì)軟件開發(fā)過(guò)程中的控制與管理,同時(shí)提出了網(wǎng)絡(luò)爬蟲軟件開發(fā)過(guò)

28、程,便于程序員與操作者之間的交流、協(xié)作,并作為工作成果的原始依據(jù),同時(shí)也表明了本軟件的共性,以期能夠獲得更大范圍的應(yīng)用。3 系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)總體結(jié)構(gòu)是首先通過(guò)前臺(tái)搜索界面輸入給定的URL地址傳遞給Servelet程序,Servelet程序再調(diào)用后臺(tái)處理程序,處理程序接收到消息,然后開始頁(yè)面內(nèi)容解析。如圖3-1所示。前臺(tái)用戶模塊前臺(tái)用戶界面消息傳遞用戶檢索Servelet程序數(shù)據(jù)庫(kù)管理模塊數(shù)據(jù)庫(kù)查詢數(shù)據(jù)存儲(chǔ)初始化URL隊(duì)列連接數(shù)據(jù)庫(kù)URL解析數(shù)據(jù)存儲(chǔ)后臺(tái)處理模塊URL合法檢測(cè)頁(yè)面內(nèi)容提取網(wǎng)絡(luò)爬蟲系統(tǒng)結(jié)構(gòu)圖圖3-1 系統(tǒng)總體結(jié)構(gòu)從圖3-1可以看到,本系統(tǒng)主要的功能模塊有:前臺(tái)用戶模

29、塊、后臺(tái)處理模塊、數(shù)據(jù)庫(kù)管理模塊等。網(wǎng)絡(luò)爬蟲系統(tǒng)的前臺(tái)結(jié)構(gòu)如圖3-2所示。網(wǎng)絡(luò)爬蟲系統(tǒng)前臺(tái)前臺(tái)爬行前臺(tái)搜索顯示搜索結(jié)果調(diào)用后臺(tái)主程序圖3-2 系統(tǒng)前臺(tái)結(jié)構(gòu)網(wǎng)絡(luò)爬蟲系統(tǒng)后臺(tái)結(jié)構(gòu)如圖3-3所示。網(wǎng)絡(luò)爬蟲系統(tǒng)后臺(tái) 廣度優(yōu)先隊(duì)列管理數(shù)據(jù)存儲(chǔ)管理URL合法檢測(cè)管理URL解析管理頁(yè)面讀取提取管理數(shù)據(jù)庫(kù)連接管理圖3-3 系統(tǒng)后臺(tái)結(jié)構(gòu)廣度優(yōu)先隊(duì)列管理:該隊(duì)列主要是用于臨時(shí)存放解析出來(lái)的URL,本系統(tǒng)通過(guò)UrlNode類實(shí)現(xiàn)URL隊(duì)列的管理。數(shù)據(jù)庫(kù)連接管理:數(shù)據(jù)庫(kù)連接是通過(guò)DBOperator類實(shí)現(xiàn)。數(shù)據(jù)存儲(chǔ)管理:本系統(tǒng)數(shù)據(jù)存儲(chǔ)是用Snatch()方法實(shí)現(xiàn),該方法將提取的內(nèi)容存儲(chǔ)到數(shù)據(jù)庫(kù)中。頁(yè)面讀取提取管理:頁(yè)

30、面讀取與提取主要是由readFileContent()和parseContent()方法實(shí)現(xiàn),前者用于從給定的URL中讀取頁(yè)面內(nèi)容,后者用于提取重要的信息。URL解析管理:該模塊主要是用于從種子URL中不斷的解析URLs,并放到隊(duì)列中。實(shí)現(xiàn)該功能模塊的主要方法是parseHref()。URL合法檢測(cè)管理:該模塊的作用是檢測(cè)解析出來(lái)的URL是否合法:即是否是站內(nèi)地址、不能訪問的地址、文件地址和已訪問地址。3.2 爬行策略分析因?yàn)楸菊撐膶?shí)現(xiàn)的爬蟲程序的初衷是盡可能遍歷某一站點(diǎn)所有的頁(yè)面的URL以及頁(yè)面內(nèi)容。廣度優(yōu)先算法的實(shí)行理論是覆蓋更多的節(jié)點(diǎn),所以此爬蟲程序選擇了廣度優(yōu)先算法。廣度優(yōu)先算法實(shí)現(xiàn)起

31、來(lái)比較簡(jiǎn)單,只需定義一個(gè)數(shù)組類就可以實(shí)現(xiàn)廣度算法。實(shí)現(xiàn)的策略基本是:首先是獲取最初始URL所對(duì)應(yīng)HTML代碼里面所有的URLs,當(dāng)然都是合法的,非法的URLs都會(huì)通過(guò)檢查類剔除掉。然后依次獲取這些URLs對(duì)應(yīng)的HTML代碼里面的URLs,當(dāng)這一層所有的URLs都下載解析完后,在獲取下一層URLs的信息。通過(guò)這種循環(huán)的獲取方式實(shí)現(xiàn)廣度優(yōu)先爬行。如圖3-4所示6。ABDCKJIHGFEMLPON圖 34爬行策略樹形圖如圖3-4,假如a代表初始的URL,b、c、d為以a獲取的3個(gè)URLs,e、f、g為以b獲取的URLs,h、i、j為以c獲取的URLs,以此類推。那么這些URLs獲取的順序就是a、b、

32、c、d、e、f、g、h、i、j、k、l、m、n、o、p這樣一個(gè)順序。當(dāng)獲取到b的URLs之后,并不會(huì)馬上去解析這些URLs,而是先解析同b在同一層中的c、d對(duì)應(yīng)的URLs。當(dāng)這一層URLs全部解析完后,再開始下一層URLs。可以看到爬蟲策略樹形圖是一個(gè)類似二叉樹形的樹形結(jié)構(gòu)。廣度爬行的優(yōu)點(diǎn)是:對(duì)數(shù)據(jù)抓取更容易控制些。對(duì)服務(wù)器的負(fù)載相應(yīng)也明顯減輕了許多。爬蟲的分布式處理使的速度明顯提高?,F(xiàn)實(shí)起來(lái)也比其他的算法來(lái)的容易的。廣度爬行的缺點(diǎn)是:解析URLs效率不是太高。廣度優(yōu)先算法的等待隊(duì)列設(shè)計(jì)如圖3-5所示。 AABCDBCCDBAEFGEFGHIJKLMONP圖 35URL等待隊(duì)列圖3-5列舉了不

33、同時(shí)間段時(shí),URL等待隊(duì)列的存儲(chǔ)狀態(tài)。第一個(gè)方框是將初始URL:a加入到等待隊(duì)列。第二個(gè)方框?yàn)?,解析a對(duì)應(yīng)HTML獲取URLs:bcd,同時(shí)刪除a。第三個(gè)方框?yàn)椋馕鯾對(duì)應(yīng)HTML獲取URLs:efg,同時(shí)刪除URL:b。第四個(gè)方框?yàn)椋馕鰁對(duì)應(yīng)HTML獲取URLs:nop,并刪除e。通過(guò)這樣的存儲(chǔ)方法實(shí)現(xiàn)廣度爬行算法7。3.3 爬蟲技術(shù)分析3.3.1 IDNS解析擴(kuò)展將網(wǎng)頁(yè)下載之前,首先要經(jīng)過(guò)將URL地址解析成IP地址供socket建立連接使用。DNS的解析過(guò)程的具體步驟如下:(1)DNS客戶機(jī)提出域名解析請(qǐng)求,并將該請(qǐng)求發(fā)送給本地的DNS服務(wù)器;(2)本地的DNS服務(wù)器收到請(qǐng)求后,先查詢本

34、地的DNS緩存,如果有該記錄項(xiàng),則本地的DNS服務(wù)器就直接把查詢的結(jié)果返回;(3)如果本地的DNS緩存中沒有該紀(jì)錄,則本地DNS服務(wù)器就直接把請(qǐng)求發(fā)給根DNS服務(wù)器,然后根DNS服務(wù)器再返回給本地DNS服務(wù)器一個(gè)所查詢域(根的子域)的主DNS服務(wù)器的地址;(4)本地服務(wù)器再向上一步返回的DNS服務(wù)器發(fā)送請(qǐng)求,接收請(qǐng)求的服務(wù)器查詢自己的緩存,如果沒有該紀(jì)錄,則返回相關(guān)的下級(jí)的DNS服務(wù)器的地址;(5)重復(fù)第四步,直到找到正確的紀(jì)錄;(6)本地DNS服務(wù)器把返回的結(jié)果保存到緩存,以備下一次使用,同時(shí)將結(jié)果返回給客戶機(jī)。3.3.2 并行存儲(chǔ)單一線程下載一個(gè)網(wǎng)頁(yè)通常需要幾秒鐘,為了充分利用網(wǎng)絡(luò)帶寬和系

35、統(tǒng)資源,網(wǎng)絡(luò)爬蟲需要打開許多Socket以便在同一時(shí)間連接到許多不同的HTTP服務(wù)器。有兩種方法來(lái)管理多個(gè)并發(fā)連接:使用多線程和使用非阻塞Socket與事件處理程序。由于網(wǎng)絡(luò)爬蟲的性能受網(wǎng)絡(luò)和磁盤所限,多CPU的機(jī)器一般用處不是很大8。(1)多線程為了最大限度地提高客戶端應(yīng)用程序的響應(yīng)能力,可以使用多線程。多線程可以大大提高應(yīng)用程序的可用性和性能。地址解析后,每個(gè)邏輯線程將創(chuàng)建一個(gè)客戶端socket,連接socket到服務(wù)器的HTTP服務(wù)上,發(fā)送HTTP請(qǐng)求頭,然后讀取soeket(調(diào)用recv函數(shù)),直到?jīng)]有更多的字符可用,最后關(guān)閉Socket。最簡(jiǎn)單的方法是使用阻塞系統(tǒng)調(diào)用,它暫??蛻舳诉M(jìn)

36、程,直到請(qǐng)求完成,數(shù)據(jù)在用戶指定的緩沖區(qū)可用。當(dāng)一個(gè)線程掛起等待一個(gè)連接發(fā)送或接收完成時(shí),其他線程可以執(zhí)行。線程不是為每個(gè)請(qǐng)求動(dòng)態(tài)生成的,而是提前分配的固定的線程數(shù)。這些線程使用共享并行的工作隊(duì)列來(lái)得到要獲取網(wǎng)頁(yè)的URL。每個(gè)線程管理自己的控制狀態(tài)和堆棧,但共享數(shù)據(jù)域。因此,一些實(shí)現(xiàn)傾向于使用進(jìn)程而不是線程,這樣當(dāng)一個(gè)進(jìn)程崩潰時(shí),它不會(huì)破壞其他進(jìn)程的狀態(tài)。并發(fā)線程/進(jìn)程有兩個(gè)問題。首先,共享的數(shù)據(jù)結(jié)構(gòu)將導(dǎo)致一些性能的損失,因?yàn)榫€程不能同時(shí)訪問它們。第二,當(dāng)線程或進(jìn)程完成網(wǎng)頁(yè)抓取,并開始修改文件存放庫(kù)和索引時(shí),他們可能會(huì)導(dǎo)致大量的交叉,隨機(jī)在磁盤上讀寫,從而降低磁盤的查詢時(shí)間。第二個(gè)性能問題可能

37、是嚴(yán)重的。為了防止上述問題,眾多的抓取線程或進(jìn)程必須使用一個(gè)共享的內(nèi)存緩沖,信號(hào)量和互斥鎖?;コ庖约坝纱诵纬傻拈g接順序化可能成為系統(tǒng)的嚴(yán)重瓶頸9。(2)非阻塞Socket和事件處理另一種辦法是使用非阻塞Socket。使用非阻塞Socket,一個(gè)連接,發(fā)送或接收請(qǐng)求都不會(huì)阻塞當(dāng)前線程,而會(huì)立刻返回。系統(tǒng)每隔一段時(shí)間對(duì)他們實(shí)行一次輪詢,以判斷是否可以進(jìn)行讀寫操作。特別是,非阻塞Socket提供了Se1ect()系統(tǒng)調(diào)用,它可以讓應(yīng)用程序暫停,等待更多的數(shù)據(jù)可以讀取或向Socket寫入,直到預(yù)設(shè)計(jì)時(shí)器超時(shí)。Select()事實(shí)上可以同時(shí)監(jiān)控幾個(gè)Socket,暫停請(qǐng)求進(jìn)程,直到有Socket可以讀或?qū)?/p>

38、。Select()允許進(jìn)程只是內(nèi)核等待多個(gè)事件中的任一個(gè)發(fā)生,并僅在一個(gè)或多個(gè)事件發(fā)生或經(jīng)過(guò)某指定的時(shí)間后才喚醒進(jìn)程。3.3.3 中文分詞技術(shù)中文自動(dòng)分詞是網(wǎng)頁(yè)分析的前提。文檔由被稱作特征項(xiàng)的索引詞組成,網(wǎng)頁(yè)分析是將一個(gè)文檔表示為特征項(xiàng)的過(guò)程。在提取特征項(xiàng)時(shí),中文信息文本中,詞與詞之間沒有天然的分隔符,中文詞匯大多是由兩個(gè)或兩個(gè)以上的漢字組成的,并且語(yǔ)句是連續(xù)書寫的。這就要求在對(duì)中文文本進(jìn)行自動(dòng)分析前,先將整句切割成小的詞匯單元,即中文分詞(或中文切詞)。自動(dòng)中文分詞的基本方法有基于字符串匹配的分詞方法和基于統(tǒng)計(jì)的分詞方法。基于字符串的分詞方法又稱為機(jī)械分詞方法,它是按照一定的策略將待分析的漢

39、字符串與一個(gè)已知的詞典中的詞條進(jìn)行匹配,若在詞典中找到某個(gè)字符串,則匹配成功。串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長(zhǎng)度優(yōu)先匹配的情況,可以分為最大或最長(zhǎng)匹配,和最小或最短匹配;按照是否中文自動(dòng)分詞是中文搜索引擎的關(guān)鍵環(huán)節(jié),對(duì)搜索引擎系統(tǒng)來(lái)說(shuō),分詞的準(zhǔn)與詞性標(biāo)注過(guò)程相結(jié)合,又可以分為單純分詞方法和分詞與標(biāo)注相結(jié)合的一體化方法。另外一種是基于統(tǒng)計(jì)的分詞方法,它的基本原理是根據(jù)字符串在語(yǔ)料庫(kù)中出現(xiàn)的統(tǒng)計(jì)頻率來(lái)決定其是否構(gòu)成詞。從形式上看,詞是穩(wěn)定的字的組合,因此在上下文如果相鄰的字出現(xiàn)的次數(shù)越多,就越有可能構(gòu)成一個(gè)詞。因此字與字相鄰共現(xiàn)的頻率或概率能夠較好的反映詞的可信度。可以對(duì)語(yǔ)料中

40、相鄰共現(xiàn)的各個(gè)字的組合的頻度進(jìn)行統(tǒng)計(jì),計(jì)算它們的互現(xiàn)信息,互信息量體現(xiàn)了漢字之間結(jié)合關(guān)系的緊密程度,當(dāng)緊密程度高于某一個(gè)閉值時(shí),便可認(rèn)為此字組可能構(gòu)成了一個(gè)詞。這種方法只需對(duì)語(yǔ)料中的詞組頻度進(jìn)行統(tǒng)計(jì),不需要切分詞典,因而又叫做無(wú)詞典分詞法或統(tǒng)計(jì)取詞方法。但這種方法也有一定的局限性,會(huì)經(jīng)常抽出一些共現(xiàn)頻度高、但并不是詞的常用字組,并且對(duì)常用詞的識(shí)別精度差,時(shí)空開銷大。實(shí)際應(yīng)用的統(tǒng)計(jì)分詞系統(tǒng)都要使用一部基本的分詞詞典(常用詞詞典)進(jìn)行串匹配分詞,同時(shí)使用統(tǒng)計(jì)方法識(shí)別一些新的詞,即將串頻統(tǒng)計(jì)和串匹配結(jié)合起來(lái),既發(fā)揮匹配分詞切分速度快、效率高的特點(diǎn),又利用了無(wú)詞典分詞結(jié)合上下文識(shí)別生詞、自動(dòng)消除歧義的

41、優(yōu)點(diǎn)。詞匯切分算法最重要的指標(biāo)是準(zhǔn)確,在兼顧準(zhǔn)確性的情況下也要考慮時(shí)間復(fù)雜度。3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于SQLSERVER數(shù)據(jù)庫(kù)的設(shè)計(jì)。我建立了1個(gè)表,即webinfo,分別有id,url,title,body字段,分別用于存放行數(shù),地址,標(biāo)題,以及網(wǎng)頁(yè)內(nèi)的郵箱地址。JAVA程序和數(shù)據(jù)之間的通信是通過(guò)JDBC實(shí)現(xiàn)的。URL信息存儲(chǔ)表結(jié)構(gòu)如表3-6所示。表3-6 webinfo表結(jié)構(gòu)字段名數(shù)據(jù)類型長(zhǎng)度IdInt4urlString50TitleVarchar8000BodyText10003.5 本章小結(jié)此章節(jié)介紹的是如何通過(guò)一個(gè)給定的URL抓取整個(gè)網(wǎng)站內(nèi)容的描述過(guò)程,其中頁(yè)面中的內(nèi)容解析是最重要的

42、核心,通過(guò)對(duì)URL解析過(guò)程的分析,使我更加深入的認(rèn)識(shí)到了網(wǎng)絡(luò)爬蟲的工作原理,為鞏固JAVA的學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。4 系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)是軟件項(xiàng)目開發(fā)過(guò)程中的主要部分,在系統(tǒng)實(shí)現(xiàn)中要有簡(jiǎn)潔、美觀、可讀性好、整體統(tǒng)一等準(zhǔn)則。4.1 系統(tǒng)功能簡(jiǎn)介此爬蟲程序主要分為三個(gè)部分:任務(wù)執(zhí)行端,任務(wù)前臺(tái)界面,數(shù)據(jù)服務(wù)端。一個(gè)SPIDER 任務(wù)執(zhí)行端關(guān)聯(lián)一個(gè)站點(diǎn),下載一個(gè)基于URL鏈接的頁(yè)面,并進(jìn)行Web 頁(yè)面解析,得到站內(nèi)URL 和發(fā)現(xiàn)新站點(diǎn)URL。SPIDER的任務(wù)執(zhí)行需要維持一個(gè)URL 隊(duì)列: 任務(wù)執(zhí)行端的URL 隊(duì)列中存儲(chǔ)了站內(nèi)URL。SPIDER要獲取的對(duì)象是存在于網(wǎng)絡(luò)上數(shù)以億計(jì)的網(wǎng)頁(yè),這些網(wǎng)頁(yè)以超鏈

43、接形式互相聯(lián)系在一起,每一網(wǎng)頁(yè)對(duì)應(yīng)一個(gè)超鏈接,也稱統(tǒng)一資源定位符(URL)。我們可以把網(wǎng)絡(luò)看做一個(gè)圖M(V,E),網(wǎng)絡(luò)中的網(wǎng)頁(yè)構(gòu)成節(jié)點(diǎn)集V,他們之間的鏈接構(gòu)成邊集E,SPIDER正是從某一節(jié)點(diǎn)開始,沿著邊,遍歷圖M,每訪問到圖中一個(gè)節(jié)點(diǎn)Vi,就進(jìn)行一定的處理。為了達(dá)到上述目的,一個(gè)SPIDER必須被設(shè)計(jì)成多線程的,A 個(gè)線程并發(fā)地在網(wǎng)絡(luò)上協(xié)同工作,才有可能在盡可能短的時(shí)間內(nèi)遍歷完網(wǎng)絡(luò)中的網(wǎng)頁(yè)。但網(wǎng)頁(yè)數(shù)目是如此之大,如果任SPIDER程序無(wú)窮地搜索下去,那么程序幾乎不能終止。所以我們限制SPIDER每次工作只訪問一個(gè)站點(diǎn)。一個(gè)再大型的站點(diǎn),其中的網(wǎng)頁(yè)數(shù)目也是有限的,因此SPIDER程序能在有限的

44、時(shí)間內(nèi)結(jié)束。當(dāng)SPIDER程序訪問到一個(gè)網(wǎng)頁(yè),必須進(jìn)行以下幾項(xiàng)基本處理:抽取網(wǎng)頁(yè)中包含的文本;抽取網(wǎng)頁(yè)中包含的URL,并將其區(qū)分為網(wǎng)站內(nèi)URL或網(wǎng)站外URL。在這些URL 隊(duì)列上有大量的操作,包括URL 查找、URL插入、URL 狀態(tài)更新等。如果SPIDER 以300頁(yè)每秒的速度下載Web 頁(yè)面,平均將會(huì)產(chǎn)生2000多個(gè)URL,因此簡(jiǎn)單的采用內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)這些URL 隊(duì)列有一定的問題,系統(tǒng)沒有足夠的內(nèi)存空間;而采用直接持久化到數(shù)據(jù)庫(kù),則需要大量的數(shù)據(jù)庫(kù)連接、查詢等操作,系統(tǒng)效率會(huì)明顯下降。如果采用URL壓縮的辦法,盡管在一定程度上可以平衡空間和時(shí)間的矛盾,但仍然不適用于大規(guī)模數(shù)據(jù)采集的SPI

45、DER。任務(wù)前臺(tái)界面主要工作是將用戶輸入的URL通過(guò)Servlet傳遞到任務(wù)端。數(shù)據(jù)服務(wù)端負(fù)責(zé)存儲(chǔ)解析好的數(shù)據(jù)。如圖4-1所示10。HTTP協(xié)議INTERNET頁(yè)面讀取頁(yè)面解析申請(qǐng)URLURL管理任務(wù)執(zhí)行端數(shù)據(jù)庫(kù)數(shù)據(jù)服務(wù)端JDBC管理任務(wù)前臺(tái)界面ServletURL傳遞后臺(tái)數(shù)據(jù)顯示圖4-1 Spider體系結(jié)構(gòu)4.2 核心算法網(wǎng)絡(luò)爬蟲算法的設(shè)計(jì)目標(biāo)是為了解決大規(guī)模數(shù)據(jù)的搜集效率問題。一方面,網(wǎng)絡(luò)爬蟲應(yīng)該盡可能多的搜集網(wǎng)頁(yè);另一方面,網(wǎng)絡(luò)爬蟲在無(wú)法進(jìn)行全面搜集的時(shí)候,應(yīng)該優(yōu)先選擇一些重要的高質(zhì)量的網(wǎng)頁(yè)來(lái)進(jìn)行搜集。網(wǎng)頁(yè)搜集的算法設(shè)計(jì)一方面體現(xiàn)在設(shè)計(jì)高效的數(shù)據(jù)結(jié)構(gòu)上,由于大量的數(shù)據(jù)無(wú)法完全存放在內(nèi)存

46、中,需要充分利用緩存技術(shù)來(lái)增加速度。4.2.1多線程抓取網(wǎng)頁(yè)多線程抓取機(jī)制由圖4-2中的網(wǎng)頁(yè)抓取控制器來(lái)實(shí)現(xiàn)。給定一個(gè)URL列表,網(wǎng)頁(yè)抓取控制器對(duì)其中的每一個(gè)URL順序啟動(dòng)HTTP連接,將它們對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容全部下載到本地。多線程抓取機(jī)制的過(guò)程是這樣的,一個(gè)進(jìn)程負(fù)責(zé)從URL列表中讀取下一個(gè)待搜集的URL,并將其放到臨界區(qū);另外一組進(jìn)程的每一個(gè)都從臨界區(qū)取出URL,然后啟動(dòng)HTTP連接進(jìn)行相應(yīng)處理,如圖4-2所示。URL讀取URL廣度優(yōu)先隊(duì)列URL1URL2URL3URLmHttp連接1Http連接2Http連接3InternetURL臨界區(qū)http連接組圖4-2 多線程抓取技術(shù)圖4-2描述了多線

47、程抓取機(jī)制的內(nèi)部流程。該圖右邊的n個(gè)HTTP連接處理單元,每一個(gè)都單獨(dú)處理一個(gè)HTTP連接,而左邊的URL讀取器則從URL鏈接優(yōu)先隊(duì)列中讀取URL并將其寫到URL臨界區(qū)中。臨界區(qū)最多可以存放M個(gè)URL。在實(shí)現(xiàn)時(shí),URL讀取器檢查URL臨界區(qū)中的URL數(shù)目,如果小于M,則繼續(xù)往里面加URL;HTTP連接則每次都從URL臨界區(qū)讀取任務(wù),除非M等于0。4.2.2 編碼格式轉(zhuǎn)換技術(shù)Web上的網(wǎng)頁(yè)包含多種字符集和編碼,搜索引擎系統(tǒng)必須對(duì)它們進(jìn)行轉(zhuǎn)換,采用統(tǒng)一字符集和編碼方案。對(duì)于中文編碼,由于中文為相形文字,字符個(gè)數(shù)多,不能用簡(jiǎn)單的ASCII字符集表示,所以出現(xiàn)了很多通用的編碼格式,其中UTF-8作為一

48、種通用的統(tǒng)一字符編碼在Web上大量使用,Google的內(nèi)部編碼機(jī)制就是使用UTF-8作為內(nèi)碼轉(zhuǎn)換的。而對(duì)于中文,除了用UTF-8編碼,也存在國(guó)內(nèi)標(biāo)準(zhǔn)的漢字編碼,主要有三種:國(guó)標(biāo)碼(GB)、大五碼(Bigs)和漢字碼(Hz)。其中GB和Bigs編碼是8位編碼,其特征是一個(gè)漢字用兩個(gè)ASCII字符來(lái)表示,而且第一個(gè)ASCII字符的最高一位為1。還有一種常用的150編碼150-8859-1。在GNU的GLIBC庫(kù)中有對(duì)這些編碼的轉(zhuǎn)換支持。4.3 功能模塊實(shí)現(xiàn) 本系統(tǒng)主要有以下幾個(gè)功能模塊:Check類:該類中包含了一些檢測(cè)URL是否合法的方法。DBOperator類:該類中包含了用于連接數(shù)據(jù)庫(kù)的方法

49、。UrlNode類:該類用于維護(hù)URL等待隊(duì)列。Spider類:該類是主類,包含了網(wǎng)頁(yè)數(shù)據(jù)讀取以及URL的抽取,解析,保存等一些核心的方法。GetUrl類:該類用于讀取前臺(tái)傳來(lái)的起始URL。4.2.1 種子注入模塊本模塊主要工作是通過(guò)從給定初始的URL開始抓取,初始URL是由人工挑選的主題站點(diǎn)首頁(yè)的URL。為了方便記錄每個(gè)URL的狀態(tài)以及統(tǒng)一管理,必須將其轉(zhuǎn)化成URL信息庫(kù)中的格式并存儲(chǔ)于庫(kù)中。種子注入模塊就是對(duì)初始URL進(jìn)行檢查,將錯(cuò)誤的過(guò)濾掉,合格的放入到URL信息庫(kù)中。這些URL將被放到待抓取URL隊(duì)列中,為第一輪的抓取服務(wù)。首先由index.jsp文件通過(guò)文本框傳URL到Servele

50、t程序由GetURL類來(lái)響應(yīng),然后將再將接受到得URL通過(guò)調(diào)用主類Spider來(lái)抓取網(wǎng)頁(yè),Spider首先會(huì)向URL等待隊(duì)列里請(qǐng)求一個(gè)URL。當(dāng)?shù)玫饺蝿?wù)URL以后,會(huì)通過(guò)這個(gè)URL得到對(duì)應(yīng)的HTML代碼。具體方法是調(diào)用readFileContent(String urlString)這個(gè)方法:public static String readFileContent_Encode(String urlString)StringBuffer content = new StringBuffer();URL url = null;BufferedReader reader = null;String

51、 line = null;try url = new URL(urlString);reader = new BufferedReader(new InputStreamReader(url.openStream(),"utf-8");line = reader.readLine();while (line != null)content.append(line + "n");line = reader.readLine();reader.close(); catch (MalformedURLException e) e.printStackTrace

52、();System.out.println(e.getMessage();System.out.println("URL:" + urlString + " ERROR"); catch (IOException e) e.printStackTrace();System.out.println(e.getMessage();catch (Exception e)e.printStackTrace();String contentString = content.toString(); return contentString;這個(gè)方法是通過(guò)調(diào)用JAVA

53、里面的URL這個(gè)類,可以用給定的URL構(gòu)造這個(gè)類的一個(gè)實(shí)例,然后通過(guò)openConnection()這個(gè)方法得到HTML代碼的數(shù)據(jù)流,然后再一行一行地把數(shù)據(jù)流轉(zhuǎn)換成String字符串,再用StringBuffer將這些字符串拼接成一個(gè)完整的HTML代碼。當(dāng)?shù)玫紿TML代碼以后,程序就會(huì)調(diào)用parseContent(String content)方法來(lái)解析HTML。4.2.2 URL讀取模塊該模塊從頁(yè)面中提取URLs,主要是通過(guò)檢索字符串中的href字符串來(lái)實(shí)現(xiàn)的。對(duì)于一個(gè)HTML代碼,我尋找其中的href=字符串,然后記錄它的下表i。然后判斷下表i+1位置上的字符是雙引號(hào),單引號(hào)或者兩者皆不是

54、,然后選擇對(duì)應(yīng)的字符作為截取URL的終止標(biāo)記。截取過(guò)后的href標(biāo)記就剔除它與它前面的部分,以便而后的操作可以繼續(xù)檢索href標(biāo)記,直到正個(gè)HTML代碼中所有的href標(biāo)記都被解析過(guò)后,操作終止。<a href=" class="focu">首頁(yè)</a><a href=movie_2004/mlist/1_1.htm target=_self>動(dòng)作片</a><a href=movie_2004/mlist/2_1.html target=_self>恐怖片</a><a href=movi

55、e_2004/mlist/3_1.htm >愛情片</a>。例如上面那段HTML代碼。我們先檢索href=標(biāo)記,然后判斷出第i+1位為一個(gè)雙引號(hào),所以我們可以截取i+1位到第2個(gè)雙引號(hào)的位置。之間的這段字符串即為URL。當(dāng)完成這一步操作后,原字符串被截取從“class=”開始。我們繼續(xù)檢索href=標(biāo)簽,判斷它的第i+1位為一個(gè)單引號(hào),所以我們又截取i+1位到第2個(gè)單引號(hào)的位置。這步以后原字符串又被截取為“target=”開始,我們可以繼續(xù)檢索href=標(biāo)簽。這個(gè)地方href=沒有接續(xù)任何符號(hào),所以當(dāng)我們沒有發(fā)現(xiàn)單引號(hào)或雙引號(hào)的時(shí)候,可以判斷為這種情況。我們就去檢索空格和<標(biāo)簽,以下標(biāo)較小的字符作為截取URL的結(jié)束標(biāo)記11。下面是href=后面接續(xù)雙引號(hào)情況的JAVA代碼,其他情況的代碼方式相同。private static void parseHref(String content,String dir) throws Exception int fromIndex =

溫馨提示

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

評(píng)論

0/150

提交評(píng)論