畢業(yè)論文范文 - CNDS_第1頁
畢業(yè)論文范文 - CNDS_第2頁
畢業(yè)論文范文 - CNDS_第3頁
畢業(yè)論文范文 - CNDS_第4頁
畢業(yè)論文范文 - CNDS_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、很土的豆北京大學(xué)-技術(shù)報告 用heritrix抓取指定網(wǎng)頁的探索與源碼分析姓 名 一: 付 卓 1001213188姓 名 二: 韓元波 1001213555姓 名 三: 張文娟 1001213574姓 名 四: 趙紅梅 1001213576小組 名稱: 很 土 的 豆年 級: 2010級 指導(dǎo) 教師: 彭 波 用heritrix抓取指定網(wǎng)頁的探索與源碼分析【摘 要】Heritrix 是個 archival crawler - 用來獲取完整的、精確的、站點內(nèi)容的深度復(fù)制。包括獲取圖像以及其他非文本內(nèi)容。抓取并存儲相關(guān)的內(nèi)容。對內(nèi)容來者不拒,不對頁面進行內(nèi)容上的修改。重新爬行對相同的URL不針對

2、先前的進行替換。爬蟲通過Web用戶界面啟動、監(jiān)控、調(diào)整,允許彈性的定義要獲取的URL。在本project中,我們需要做的工作正是學(xué)習(xí)配置使用heritrix,并利用其抓取指定網(wǎng)頁。在Week2的web crawler系統(tǒng)結(jié)構(gòu)下, Heritrix系統(tǒng)里面的crawler的下面有四個部分: page fetching、isPageKnown 、isUrlVisited 、Politeness,我們需要分析isUrlVisited 、Politeness代碼。其中isUrlVisited作用為:在將鏈接加入隊列之前需要查看鏈接是否已經(jīng)被處理過了。而通過對politeness 設(shè)置閾值,Heritr

3、ix 可以使用以實現(xiàn)抓取對被訪問服務(wù)器造成的壓力的控制。因此分析isUrlVisited和Politeness源碼對于我們理解heritrix工作原理是非常有用的。不同的網(wǎng)頁,重要程度不同,在對于網(wǎng)頁的重要程度評價我們采用,入度的多少來確定我們抓取的網(wǎng)頁的重要程度。在此過程中我們需要利用PageRank算法,來獲取抓取回來的網(wǎng)頁的入度與出度。通過對此過程的操作與分析,加深了我們對課堂知識的理解。關(guān)鍵詞: heritrix配置 isUrlVisited Politeness 源碼分析 入度 出度 PageRank算法【引 言】網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機器人,在FOAF社區(qū)中間,更經(jīng)常的稱

4、為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動的抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻,自動索引,模擬程序或者蠕蟲。Heritrix是一個專門為互聯(lián)網(wǎng)上的網(wǎng)頁進行存檔而開發(fā)的網(wǎng)頁檢索器。它使用Java編寫并且完全開源。它主要的用戶界面可以通過一個web流量器來訪問并通過它來控制檢索器的行為,另外,它還有一個命令行工具來供用戶選擇調(diào)用。Heritrix是由互聯(lián)網(wǎng)檔案館和北歐國家圖書館聯(lián)合規(guī)范化編寫于2003年初。第一次正式發(fā)布是在2004年1月,并不斷的被互聯(lián)網(wǎng)檔案館和其他感興趣的第三方改進著。到現(xiàn)在已經(jīng)成為一個成熟的開源爬蟲,并被廣泛使用。本項目的目的在于讓我們熟悉網(wǎng)絡(luò)爬蟲的

5、工作原理,學(xué)會使用heritrix進行網(wǎng)頁抓取并進行簡單的源碼分析。這個過程中我們主要工作是完成以下三個任務(wù):1. 下載heritrix,在Eclipse中實現(xiàn) heritrix系統(tǒng)的配置、安裝。熟悉Heritrix的使用。利用heritrix抓取指定的網(wǎng)站: 探索單線程與多線程抓取網(wǎng)頁的差異2. 在heritrix系統(tǒng)代碼中找到crawler的下面兩個部分: isUrlVisited,politeness ,并分析其實現(xiàn)技術(shù)。3. 搜集web數(shù)據(jù)的graph link analysis 用PageRank方法獲取中網(wǎng)頁的數(shù)量以及 入度、出度分布情況如何和top 10的最重要頁面是哪些?!緦崿F(xiàn)

6、方法】一、 配置heritrix 首先要在電腦上裝載Eclipse軟件,可直接在網(wǎng)上下載,Eclipse是一個綠色軟件下載來以后直接解壓后就可以使用。 在 c.zip 。 配置文件進行修改,找到conf下perties文件 /設(shè)置端口 heritrix.cmdline.port = 8080 對工程進行jar包引入,將lib下面所有的jar包引入工程。 選擇User Entries Advanced選擇Add Folders 將conf文件夾添加進去。點擊Run 開始運行運行結(jié)果:時為配置成功二、 網(wǎng)頁抓取登陸http:/localhost.8080/即可登陸herit

7、rix界面,輸入用戶名和密碼,就可以開始建立新的job工程1 單線程抓取 Heritrix提供的配置功能非常豐富,但是也很復(fù)雜,剛開始的時候很難正確的創(chuàng)建并且執(zhí)行一個Job去抓取網(wǎng)站,自己閱讀了大部分的Heritrix用戶文檔和多次嘗試之后,得出結(jié)論:抓取步驟如下 (1) WUI的上邊的導(dǎo)航欄選擇Jobs,呈現(xiàn)的第一項是Create New Job,選擇第四小項With defaults。輸入項的前兩項 Name和Description隨意,Seeds非常重要:注意最后一個反斜杠必須。(2) 選擇下邊的Modules,進入Module配置頁(Heritrix的擴展功能都是通過模塊概念實現(xiàn)的,可

8、以實現(xiàn)自己的模塊完成自己想要的功能)。其中第一項 Select Crawl Scope。倒數(shù)第三項 Select Writers(3) 選擇Modules右邊的Submodules,在第一項內(nèi)容中 crawl-order -scope-decide-rules-rules 刪除掉其中的 acceptIfTranscluded () 的這一項抓取作用域的規(guī)則。否則當Http請求返回301或者302時Heritrix會去抓取其他域下的網(wǎng)頁。 (4) 在WUI的第二行導(dǎo)航欄中選擇Settings進入Job的配置頁面,其中主要修改兩項:http-headers 下的user-agent 和from,他

9、們的PROJECT_URL_HERE 和 CONTACT_EMAIL_ADDRESS_HERE 替換為自己的內(nèi)容(PROJECT_URL_HERE 要以 http:/ 開頭) (5) 在WUI的第二行導(dǎo)航欄中選擇最右邊的Submit job(6) 在WUI的第一行導(dǎo)航欄中選擇第一項的Console,點擊Start,抓取任務(wù)正式開始,時間長短有網(wǎng)絡(luò)狀況和所抓取網(wǎng)站的深度有關(guān)。2. 多線程抓取 方法:利用ELFHash策略多線程抓取網(wǎng)頁步驟: 在該類下編寫代碼如下: public class ELFHashQueueAssignmentPolicy extends QueueAssignmentP

10、olicy private static final Logger logger = Logger .getLogger(ELFHashQueueAssignmentPolicy .class.getName(); public String getClassKey(CrawlController controller, CandidateURI cauri) String uri = cauri.getUURI().toString(); long hash = ELFHash(uri); String a = Long.toString(hash % 100); return a; pub

11、lic long ELFHash(String str) long hash = 0; long x = 0; for(int i = 0; i str.length(); i+) hash = (hash 24); hash &= x; return (hash & 0x7FFFFFFF); 修改AbstractFrontier 類的AbstractFrontier方法 : 關(guān)鍵代碼段是: ELFHashHostnameQueueAssignmentPolPattern p = Ppile(s*,s*|s+);String queues = p.split(queueStr); 其中紅色部分

12、是新加的代碼。 修改perties 中的配置# F R O N T I E R# List here all queue assignment policies youd have show as a# queue-assignment-policy choice in AbstractFron ELFHashQueueAssignmentPolicy 加粗部分需要修改。 單線程在抓取過程中大約需要8天左右,而多線程十幾個甚至幾個小時就可以抓完。抓取的crawl job report 和抓取的過程中多線程進度如下圖所示:三、 源碼分析 (一)分析isURLVisited

13、 這主要是在Frontier里實現(xiàn)的,當一個鏈接要進入等待隊列時需要先判斷是否已經(jīng)被抓取過,如果已經(jīng)抓取過則不進入,否則進入。其中最重要的部分就是存儲已抓取url的結(jié)構(gòu)。為了提高效率,Heritrix在內(nèi)部使用了Berkeley DB,BdbFrontier是唯一個具有實際意義的鏈接工廠。Heritrix中涉及存儲url的主要的類有UriUniqFilter、FPMergeUriUniqFilte、SetBasedUriUniqFilter、BdbUriUniqFilter、 BloomUriUniqFilter、 emFPMergeUriUniqFilter和DiskFPMergeUriUn

14、iqFilter。用戶可以在創(chuàng)建一個爬取任務(wù)時選擇BdbUriUniqFilter, BloomUriUniqFilter, emFPMergeUriUniqFilter和DiskFPMergeUriUniqFilter中的一種。默認是BdbUriUniqFilter。對于BdbUriUniqFilter這里存儲已經(jīng)處理過的url的數(shù)據(jù)結(jié)構(gòu)是Berkeley Database,叫做alreadySeen。聲明代碼如下:protected transient Database alreadySeen = null;Berkeley DB,它是一套開放源代碼的嵌入式數(shù)據(jù)庫。簡單的說,Berkele

15、y DB就是一個Hash Table,它能夠按“key/value”方式來保存數(shù)據(jù)。使用Berkeley DB時,數(shù)據(jù)庫和應(yīng)用程序在相同的地址空間中運行,所以數(shù)據(jù)庫操作不需要進程間的通訊。另外,Berkeley DB中的所有操作都使用一組API接口。因此,不需要對某種查詢語言(比如SQL)進行解析,也不用生成執(zhí)行計劃,這就大大提高了運行效率。算法:為了節(jié)省存儲空間,alreadySeenUrl中存儲的并不是url,而是url的fingerprint。為了不破壞url的局部性,分別對url的主機名和整個url計算fingerprint,然后把24位的主機名fingerprint和40位的url的

16、fingerprint連接起來得到最后的64位的fingerprint。計算fingerprint是在createKey函數(shù)中實現(xiàn)。關(guān)鍵代碼如下如下:CharSequence hostPlusScheme = (index = -1)? url: url.subSequence(0, index); setAdd函數(shù)把uri加入到數(shù)據(jù)庫中,如果已經(jīng)存在,則返回false,否則返回true。關(guān)鍵代碼如下:status = alreadySeen.putNoOverwrite(null, key, ZERO_LENGTH_ENTRY);setRemove函數(shù)把uri從數(shù)據(jù)庫中刪除,如果成功則返回t

17、rue,否則返回false。關(guān)鍵代碼如下:status = alreadySeen.delete(null, key);(二)分析politeness1. one connection at a timeHeritrix的禮貌性主要在Frontier中實現(xiàn):一次對一個服務(wù)器只開一個鏈接,并且保證uri按一定速率處理,從而不會給被爬取的服務(wù)器造成負擔(dān)。數(shù)據(jù)結(jié)構(gòu):爬蟲采用寬度優(yōu)先遍歷,使用FIFO的隊列來存儲待爬取的URL。因為網(wǎng)頁的局部性,隊列中相鄰的URL很可能是相同主機名的,這樣爬取會給服務(wù)器造成很大負擔(dān)。如果用很多隊列來存放URL,每個隊列中URL的主機名相同,同一時間里,只允許隊列中一個

18、URL被爬取,就能避免上述問題了。heritrix中主機名相同的URL隊列是用WorkQueue來實現(xiàn)的,一個WorkQueue就是一個具有相同主機名的隊列。frontier中用Map類型的allQueues存儲著主機名和相應(yīng)的隊列;snoozedClassQueues存儲著所有休眠的url隊列的key,它們都按喚醒時間排序;readyClassQueues存儲著已經(jīng)準備好被爬取的隊列的key;inactiveQueues存儲著所有非活動狀態(tài)的url隊列的key;retiredQueues存儲著不再激活的url隊列的key。算法:線程返回readyClassQueues和snoozedClas

19、sQueues中已經(jīng)到喚醒時間的隊列中第一個url,下載相應(yīng)的文檔,完成之后從隊列中移除該url。每爬取到一個url都需要判斷應(yīng)該加入哪個隊列中。 首先根據(jù)url的主機名判斷是否存在該主機名的隊列,如果不存在就新建一個隊列。然后判斷該隊列是否在生命周期內(nèi),如果不在就設(shè)置為在生命周期內(nèi)。如果隊列需要保持不激活狀態(tài)或者活動隊列的數(shù)量超過設(shè)定的閾值,就把該隊列放入inactiveQueues中,否則放在readyClassQueues中。另外,heritrix還設(shè)定了很多參數(shù)來限制對服務(wù)器的訪問頻率。如最長等待時間max-delay-ms,默認30秒;重連同一服務(wù)器至少等待時間min-delay-m

20、s,默認是3秒,重連同一服務(wù)器要等待上次連接至今時間間隔的幾倍delay-factor,默認是5。當然這些參數(shù)用戶也可以在配置爬蟲的時候自己設(shè)定。 2. robots.txtrobots.txt稱為機器人協(xié)議,放在網(wǎng)站的根目錄下。在這個文件中聲明該網(wǎng)站中不想被robot 訪問的部分,或者指定搜索引擎只收錄指定的內(nèi)容。這是一個君子協(xié)定,爬蟲可以不遵守,但是出于禮貌最好遵守。heritrix在預(yù)處理階段處理robots.txt。它把針對每個user-agent的allow和disallow封裝為一個RobotsDirectives類,整個robots.txt用一個Robotstxt對象來存儲。he

21、ritrix處理robots.txt有五種方法,都封裝在RobotsHonoringPolicy中。這五種方法分別是:Classic:遵守robots.txt對當前user-agent的第一部分指令。Ignore:忽略robots.txt。Custom:遵守robots.txt中特定操作的指令。Most-favored:遵守最寬松的指令。Most-favored-set:給定一些user-agent格式的集合,遵守最寬松的限制。當策略是Most-favored或Most-favored-set時,可以選擇是否偽裝成另一個user agent。RobotsExlusionPolicy類中包含he

22、ritrix最終處理robots.txt的方法,disallows用來判斷userAgent能否訪問某個url。它完全依據(jù)用戶在新建一個爬蟲任務(wù)時設(shè)置的處理robots.txt的策略來實現(xiàn)。此部分參考【注】更詳細內(nèi)容可參考我們小組博客四、 抓取網(wǎng)頁數(shù)入度出度與top10 在計算鏈入鏈出關(guān)系是可有多種方法: 分析crawl.log:通過觀察crawl.log,可以看到url與url之間的關(guān)系。 分析抓取得到的網(wǎng)頁,從網(wǎng)頁中找到鏈接關(guān)系。 修改Heritrix源碼,在抓取過程中存儲鏈接關(guān)系我們使用方法二的思想編寫代碼計算抓取的網(wǎng)頁數(shù)量,獲取鏈入鏈處關(guān)系。(一) 抓取的網(wǎng)頁數(shù)統(tǒng)計在抓取網(wǎng)頁過程中經(jīng)過程序遍歷共計算得到抓取網(wǎng)頁數(shù)量為: 18901個網(wǎng)頁出度分析:Heritrix抓取的所有網(wǎng)頁進行逐一遍歷,因為 都是鏈出鏈接(如上圖所示),找到每個網(wǎng)頁的鏈出鏈接,即得到每個網(wǎng)頁的出度(不過在找鏈出鏈接的過程中,有mailto鏈接和javascript代碼,將這些鏈出的鏈接去掉不作為網(wǎng)頁的出度)。 入度分析:在遍歷每個網(wǎng)頁尋找出度的過程中,是用哈希表是用來存放網(wǎng)頁

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論