大學計算機網(wǎng)絡體系結構課程_第1頁
大學計算機網(wǎng)絡體系結構課程_第2頁
大學計算機網(wǎng)絡體系結構課程_第3頁
大學計算機網(wǎng)絡體系結構課程_第4頁
大學計算機網(wǎng)絡體系結構課程_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

北京大學計算機網(wǎng)絡體系結構課程Heritrix研究報告Heritrix安裝使用代碼分析及網(wǎng)站

鏈接分析北大深圳研究生院信息工程學院組長:閆應威組員:霍佳森胡釗王超題目:Heritrix研究試驗報告摘要:Heritrix是一款開源的由Java寫成的網(wǎng)絡爬蟲項目,通過對項目進行安裝使用能夠了解網(wǎng)絡爬蟲的一般結構并了解爬蟲的各種機制的實現(xiàn)方法,通過對下載網(wǎng)站進行連接分析可以系統(tǒng)掌握pagerank算法并理解網(wǎng)絡的一般結構。研究報告主要介紹對Heritrix的研究方法,并對實驗結果進行分析。通過介紹Heritrix的使用方法以求用簡便的方式加速抓取并輸出抓取網(wǎng)站URL之間的圖連接關系。簡介:報告主要針對作業(yè)內(nèi)容進行試驗方法上的研究與實驗結果上的分析,首先在方法中介紹爬蟲安裝使用上的技巧,然后介紹如何通過修改代碼得到獲取網(wǎng)站的連接關系圖,最后在實驗結果中回答連接關系的數(shù)據(jù)以及Heritrix的兩種機制的實現(xiàn)方式。在連接關系的分析上主要通過PageRank算法來實現(xiàn)對整個拓撲結構的分析。在分析方法上面主要使用了五種方法來提高Heritrix的抓取速度。分析代碼的過程中主要參照了Heritrix的參考文檔,查找到相應機制的實現(xiàn)類內(nèi)容。通過對Heritrix的研究與使用可以幫助我們更深入的了解爬蟲的實現(xiàn)原理,對以后研究爬蟲的各方面性質(zhì)提供很有意義的參考。通過對獲取URL連接的分析有助于了解整個web圖結構的性質(zhì)。試驗使用方法:啟動多線程更快Heritrix米用HostnameQueueAssignmentPolicy來進行對URL處理。url隊列以hostname為key,所有相同key的url放置在同一個隊列里面,也就是說同一個host下面的所有url都放在一個隊列里面,當線程獲取url時候,會將該隊列放置到同步池中。所以添加一個自己的類,并將其添加到運行項中:首先添加publicclassELFHashQueueAssignmentPolicyextendsQueueAssignmentPolicy然后在AbstractFrontiers中加入ELFHashQueueAssignmentPolicy.class.getName()。2修改order.xml更快序號配置名理想值說明1〈longname二"max-time-sec">0〈/long>3抓取一個網(wǎng)頁的最大時間(秒),超過了該時間則不抓取,0表示沒有這個限制2〈integername二"max-toe-threads">3〈/integer>50抓取的線程數(shù),表示有多少個線程去抓取,一般50足夠了3<floatname="delay-factor">4.0〈/float>1.0如果從某個隊列抓取一個URL花費N秒,則下次從該隊列獲取URL去抓取則要延遲N*該值4〈integername二"max-delay-ms">20000〈/integer>2000隊列的最大延遲時間,單位為毫秒5〈integername二"min-delay-ms">2000〈/integer>0隊列的最小延遲時間,單位為毫秒6〈integername二"max-retries">30〈/integer>5URL抓取失敗可以重試的次數(shù),重試次數(shù)越少越好7〈integername二"target-ready-backlog">50〈/integer>200準備隊列中待抓取的URL個數(shù),這些URL無需經(jīng)過隊列等待可以立刻去抓取3修改代碼解決亂碼lr【nr==nu丄丄)1threwnewIOException(TIWhyisrecordernullhere?T,)hr.setCharacterEncoding(T,gb2312n);〃支持中文cs=hr.getReplayCharSequence();

4只抓去文本文件ciwl-orderscopeDecLdmgSccrp#AScopethitAppliesan?oimoieD?csdeRLil?stodetemunewhetheraURiisac^raiJled-orrejected(letjjsnsfdseJ.Tochangescope.號d&<id?-milesroles"QpDe■護口 qfe.si?拠幗.許日屮屁『&c??血”酬方戈陶麻!也思m昴甩血?"QpDe■護口 qfe.si?拠幗.許日屮屁『&c??血”酬方戈陶麻!也思m昴甩血?UpDownRwrispo/g血匚塚啊.匸陽nder日總匚汩《才訶備.風rf丹確xe&D^jde電倫2Up恥遠Rtrw時org 利兀c^wkr血併盤n/fesJb◎嗣B曾算¥事£^1崩?總北£Do^*T|Rj^IlOTEQFg.arcfiiveC7£iwi?r^€ctdertiie5.7r£in5ciusian£)ec7d^rhi!e?UpDownF-EHlOiPDFgQFc^j'FE.GTawiercfccp^Erule3.Pa^M?J<?g2'coJPathDeCidePu!^上accepdfSurtPrefixedU]?DownR-wengEo/gnrc^iFe.crawler朋白加由翻風”丹幀xedLD&rj虛皿俺?rejectlfTooManyH^p$ 匹Dw/n蘇呦魅org 崩聘佇萄麗尹桑併加訊鴨.応<?減暫抜丹皿詢■?屜北£acceptlfTrafigcluded UpDo卿Rfgtiove:orgarc^vecrawi^r^cr^ert^es.TriinsciLisian^cjde^jle?rejectI£Pathological BpDownRemo#亡口啓mc■如?魁可儀屈口dccr^eruie^Pa^joiogicalPathDemds^Lil^?rejectIfT<>oMartyPathSeg$TTr恥他gtmzeorgarc-fyve伊四麗廿占聞占戢貿(mào)xTgM&彎Fa曲魚gm蝕初D曲血血冷?acceptlfPrereqwsile De:■眄&住牡凹£QFgarchi^.cTnwler.dectden^s^PTiTequi^ieAsc^fkcj.ikf^Ie?解決方法就是添加一個rule,過慮掉非文本類型的文件從而節(jié)省抓取時間。5修改ExtractorHTML輸出URL圖因為最終進行統(tǒng)計與PageRank算法迭代需要輸入的數(shù)據(jù)為圖的鄰接表表示結構,因此在抓取過程中能過同時輸出URL的圖結構將有助于數(shù)據(jù)統(tǒng)計工作的完成。首先,定義輸出的格式為如下:URL1URL2URL4URL7URLi*****URL1為當前的頁面URL地址,之后為當前頁面解析出來的URL地址,以上面結構排列一行為一個鄰接表的一項,將所有URL按照上述格式輸出就得到了所需的URL圖結構。然后,對Heritrix中ExtractorHTML進行修改,具體修改如下::publicvoidextract(CrawlURIcuri)中添加://WehaveaReplayCharSequenceopen.Wrapallinfinallysowe//forsurecloseitbeforeweleave.System.out.println();System.out.print(uur<.gmtURJString());try{thijs.newlink.newLine();this.n巳wlink.wrltE(uuri_.gmtURJEtrlng());this.newlink.flush.(].;}catch(I?Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();在函數(shù):protectedvoidprocessLink(CrawlURIcuri,finalCharSequencevalue,CharSequencecontext)中加入:Stringuri=(valueins七anueofString)?(String)value:value.toString();System,out.print(T,"+uri);//解析岀來話數(shù)據(jù)//System.out.print("Tl+curi.getUURI());trythis.newlink.write(T,T,+uri);this.newlink.flush();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();6統(tǒng)計URL圖中的連接信息:當獲得URL圖的結構之后,可以通過編寫算法對網(wǎng)絡的圖結構進行統(tǒng)計,并將最終結果輸出,通過PageRank算法的迭代可以得到網(wǎng)頁的重要性排名。PageRank算法核心代碼如下:floatpageRank[]=newfloat[total+1];//存放臨時重要性floatprTmp[]=newfloat[total+1];for(inti=1;i<=total;++i){pageRank[i]=1.0f/total;prTmp[i]=0.0f;}//當前頁面的PR值floatfatherRank=1f;floatalpha=0.85f;//大體進行50次迭代,一中迭代的方法來求矩陣特征值for(intiterator=0;iterator<50;iterator++){longstartTime=System.currentTimeMillis ();linkinpu=tnewBufferedReader(newFileReader(linkfile));line=linkinput.readLine();//一次迭代;對每一個元素,進行計算其貢獻率while(line!=null){//計算每個網(wǎng)頁的出度linesarr=line.spl"it"();if(linesarr.length>0){outdegree=lineslength-1;for(intj=1;j<=linesarr.length-1;++j){if(linesarr[j].equals(linesarr[0]))outdegree--;if(outdegree>0){fatherint()docIDandNum.get(linesarr[0]);fatherRank=pageRank[father]/outdegree;for(intk=1;k<=linesarr.length-1;++k){if(linesarr[k].equals(linesarr[0])){continue;}son=docIDandNum.get(linesarr[k]);if(total>=son&&son>=0){prTmp[son]+=fatherRank;}}}linesarrnull;line=linkinput.readLine();試驗結果:1抓取結果序號類型名抓取數(shù)目1文本類(.asp.html.htm.txt)26893個2圖片類(.gif.jpg.ico)8762個3文檔類(.pdf.doc)105個4其他(.ccs.rar等等)234個5總計35994個表1最終抓取結果統(tǒng)計連接分析結果:

序號URL名稱出/入度PageRank的權值1http:///2/240550.05533332http:///cn/47/240550.05333313http:///cn/DoubleDegree.asp45/240540.05394784http:///cn/facultylist.asp76/240540.05287445http:///cn/Organization.asp19/240520.05198766http:///cn/Intro.asp13/240510.04977627http:///cn/ReadNews.asp?NewsID=1622&BigClassName二CN&SmallClassName二%E6%88%91%E4%BB%AC%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E6%B3%95&SpecialID=O0/240490.01392198http:///cn/ReadNews.asp?NewsID=1168249/5680.01223929http:///cn/ReadNews.asp?NewsID=1160849/4080.012134810http:///cn/special.asp39/2080.0121227表2排名前十的URL的結果分析判重機制與禮貌機制的分析結果:1)判重機制在類BdbFrontier中實現(xiàn)類四種過濾器分別為:BdbUriUniqFilterBloomUriUniqFilterMemFPMergeUriUniqFilterDiskFPMergeUriUniqFilterBdbUriUniqFilter主要通過調(diào)用sleepcat中的API來實現(xiàn)查看URL數(shù)據(jù)中是否存在URL,MemFPMergeUriUniqFilter與DiskFPMergeUriUniqFilter主要用來合并文件,下面主要分析BloomUriUniqFilter中實現(xiàn)的判斷方法:BloomUriUniqFilter主要通過類BloomFilter32bitSplit來實現(xiàn)對URL的過濾的:privatelonghash(finalCharSequences,finalintl,finalintk){finalint[]w=weight[k];inth=0,i=l;while(i--!=0)hA=s.charAt(i)*w[i%NUMBER_OF_WEIGHTS];return((long)h-Integer.MIN_VALUE) %m;}該函數(shù)對每一個URL進行Hash求值,以便對已訪問的URL進行標記publicbooleancontains(finalCharSequences){inti=d,l=s.length();while(i--!=0)if( !getBit(hash(s,l,i) )returnfalse;returntrue;}判斷一個URL是否存在,如果存在只能在概率上認為已經(jīng)存在,不能完全否定,如果不存在則可以確定不存在,可以直接加入到數(shù)據(jù)庫,節(jié)省運算量。publicbooleanadd(finalCharSequences){booleanresult=false;inti=d,l=s.length();longh;while(i--!=0){h=hash(s,l,i);if( !setGetBit(h) )result=true;}if(result)size++;returnresult;}每加入一個URL對該數(shù)值進行標定。2)禮貌機制:Heritrix中的禮貌機制有許多,只分析較為簡單的一個,在AbstractFrontier中函數(shù):protectedlongpolitenessDelayFor(CrawlURIcuri){longdurationToWait=0;if(curi.containsKey(A_FETCH_BEGAN_TIME)&&curi.containsKA_FETCH_COMPLETED_TIME)) {longcompleteTime=curi.getLong(A_FETCH_COMPLETED_TIME);longdurationTaken=(completeTime-curi.getLoA_FETCH_BEGAN_TIME));durationToWait=long)(((Float)getUncheckedAttribute(curi,ATTR_DELAY_FACTOR)).floatValue()*durationTaken);longminDelay=((Integer)getUncheckedAttribute(curi,ATTR_MIN_DELAY)).longValue();if(minDelay>durationToWait){//waitatleasttheminimumdurationToWait=minDelay;}longmaxDelay=((Integer)getUncheckedAttribute(curi,ATTR_MAX_DELAY)).longValue();i

溫馨提示

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

評論

0/150

提交評論