大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程_第1頁(yè)
大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程_第2頁(yè)
大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程_第3頁(yè)
大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程_第4頁(yè)
大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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)介

北京大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)課程Heritrix研究報(bào)告Heritrix安裝使用代碼分析及網(wǎng)站

鏈接分析北大深圳研究生院信息工程學(xué)院組長(zhǎng):閆應(yīng)威組員:霍佳森胡釗王超題目:Heritrix研究試驗(yàn)報(bào)告摘要:Heritrix是一款開(kāi)源的由Java寫成的網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目,通過(guò)對(duì)項(xiàng)目進(jìn)行安裝使用能夠了解網(wǎng)絡(luò)爬蟲(chóng)的一般結(jié)構(gòu)并了解爬蟲(chóng)的各種機(jī)制的實(shí)現(xiàn)方法,通過(guò)對(duì)下載網(wǎng)站進(jìn)行連接分析可以系統(tǒng)掌握pagerank算法并理解網(wǎng)絡(luò)的一般結(jié)構(gòu)。研究報(bào)告主要介紹對(duì)Heritrix的研究方法,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。通過(guò)介紹Heritrix的使用方法以求用簡(jiǎn)便的方式加速抓取并輸出抓取網(wǎng)站URL之間的圖連接關(guān)系。簡(jiǎn)介:報(bào)告主要針對(duì)作業(yè)內(nèi)容進(jìn)行試驗(yàn)方法上的研究與實(shí)驗(yàn)結(jié)果上的分析,首先在方法中介紹爬蟲(chóng)安裝使用上的技巧,然后介紹如何通過(guò)修改代碼得到獲取網(wǎng)站的連接關(guān)系圖,最后在實(shí)驗(yàn)結(jié)果中回答連接關(guān)系的數(shù)據(jù)以及Heritrix的兩種機(jī)制的實(shí)現(xiàn)方式。在連接關(guān)系的分析上主要通過(guò)PageRank算法來(lái)實(shí)現(xiàn)對(duì)整個(gè)拓?fù)浣Y(jié)構(gòu)的分析。在分析方法上面主要使用了五種方法來(lái)提高Heritrix的抓取速度。分析代碼的過(guò)程中主要參照了Heritrix的參考文檔,查找到相應(yīng)機(jī)制的實(shí)現(xiàn)類內(nèi)容。通過(guò)對(duì)Heritrix的研究與使用可以幫助我們更深入的了解爬蟲(chóng)的實(shí)現(xiàn)原理,對(duì)以后研究爬蟲(chóng)的各方面性質(zhì)提供很有意義的參考。通過(guò)對(duì)獲取URL連接的分析有助于了解整個(gè)web圖結(jié)構(gòu)的性質(zhì)。試驗(yàn)使用方法:?jiǎn)?dòng)多線程更快Heritrix米用HostnameQueueAssignmentPolicy來(lái)進(jìn)行對(duì)URL處理。url隊(duì)列以hostname為key,所有相同key的url放置在同一個(gè)隊(duì)列里面,也就是說(shuō)同一個(gè)host下面的所有url都放在一個(gè)隊(duì)列里面,當(dāng)線程獲取url時(shí)候,會(huì)將該隊(duì)列放置到同步池中。所以添加一個(gè)自己的類,并將其添加到運(yùn)行項(xiàng)中:首先添加publicclassELFHashQueueAssignmentPolicyextendsQueueAssignmentPolicy然后在AbstractFrontiers中加入ELFHashQueueAssignmentPolicy.class.getName()。2修改order.xml更快序號(hào)配置名理想值說(shuō)明1〈longname二"max-time-sec">0〈/long>3抓取一個(gè)網(wǎng)頁(yè)的最大時(shí)間(秒),超過(guò)了該時(shí)間則不抓取,0表示沒(méi)有這個(gè)限制2〈integername二"max-toe-threads">3〈/integer>50抓取的線程數(shù),表示有多少個(gè)線程去抓取,一般50足夠了3<floatname="delay-factor">4.0〈/float>1.0如果從某個(gè)隊(duì)列抓取一個(gè)URL花費(fèi)N秒,則下次從該隊(duì)列獲取URL去抓取則要延遲N*該值4〈integername二"max-delay-ms">20000〈/integer>2000隊(duì)列的最大延遲時(shí)間,單位為毫秒5〈integername二"min-delay-ms">2000〈/integer>0隊(duì)列的最小延遲時(shí)間,單位為毫秒6〈integername二"max-retries">30〈/integer>5URL抓取失敗可以重試的次數(shù),重試次數(shù)越少越好7〈integername二"target-ready-backlog">50〈/integer>200準(zhǔn)備隊(duì)列中待抓取的URL個(gè)數(shù),這些URL無(wú)需經(jīng)過(guò)隊(duì)列等待可以立刻去抓取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.號(hào)d&<id?-milesroles"QpDe■護(hù)口 qfe.si?拠幗.許日屮屁『&c??血”酬方戈陶麻!也思m昴甩血?"QpDe■護(hù)口 qfe.si?拠幗.許日屮屁『&c??血”酬方戈陶麻!也思m昴甩血?UpDownRwrispo/g血匚塚啊.匸陽(yáng)nder日總匚汩《才訶備.風(fēng)rf丹確xe&D^jde電倫2Up恥遠(yuǎn)Rtrw時(shí)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朋白加由翻風(fēng)”丹幀xedLD&rj虛皿俺?rejectlfTooManyH^p$ 匹Dw/n蘇呦魅org 崩聘佇萄麗尹桑併加訊鴨.応<?減暫抜丹皿詢■?屜北£acceptlfTrafigcluded UpDo卿Rfgtiove:orgarc^vecrawi^r^cr^ert^es.TriinsciLisian^cjde^jle?rejectI£P(guān)athological BpDownRemo#亡口啓mc■如?魁可儀屈口dccr^eruie^Pa^joiogicalPathDemds^Lil^?rejectIfT<>oMartyPathSeg$TTr恥他gtmzeorgarc-fyve伊四麗廿占聞?wù)缄Q(mào)xTgM&彎Fa曲魚(yú)gm蝕初D曲血血冷?acceptlfPrereqwsile De:■眄&住牡凹£QFgarchi^.cTnwler.dectden^s^PTiTequi^ieAsc^fkcj.ikf^Ie?解決方法就是添加一個(gè)rule,過(guò)慮掉非文本類型的文件從而節(jié)省抓取時(shí)間。5修改ExtractorHTML輸出URL圖因?yàn)樽罱K進(jìn)行統(tǒng)計(jì)與PageRank算法迭代需要輸入的數(shù)據(jù)為圖的鄰接表表示結(jié)構(gòu),因此在抓取過(guò)程中能過(guò)同時(shí)輸出URL的圖結(jié)構(gòu)將有助于數(shù)據(jù)統(tǒng)計(jì)工作的完成。首先,定義輸出的格式為如下:URL1URL2URL4URL7URLi*****URL1為當(dāng)前的頁(yè)面URL地址,之后為當(dāng)前頁(yè)面解析出來(lái)的URL地址,以上面結(jié)構(gòu)排列一行為一個(gè)鄰接表的一項(xiàng),將所有URL按照上述格式輸出就得到了所需的URL圖結(jié)構(gòu)。然后,對(duì)Heritrix中ExtractorHTML進(jìn)行修改,具體修改如下::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);//解析岀來(lái)話數(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)計(jì)URL圖中的連接信息:當(dāng)獲得URL圖的結(jié)構(gòu)之后,可以通過(guò)編寫算法對(duì)網(wǎng)絡(luò)的圖結(jié)構(gòu)進(jìn)行統(tǒng)計(jì),并將最終結(jié)果輸出,通過(guò)PageRank算法的迭代可以得到網(wǎng)頁(yè)的重要性排名。PageRank算法核心代碼如下:floatpageRank[]=newfloat[total+1];//存放臨時(shí)重要性floatprTmp[]=newfloat[total+1];for(inti=1;i<=total;++i){pageRank[i]=1.0f/total;prTmp[i]=0.0f;}//當(dāng)前頁(yè)面的PR值floatfatherRank=1f;floatalpha=0.85f;//大體進(jìn)行50次迭代,一中迭代的方法來(lái)求矩陣特征值for(intiterator=0;iterator<50;iterator++){longstartTime=System.currentTimeMillis ();linkinpu=tnewBufferedReader(newFileReader(linkfile));line=linkinput.readLine();//一次迭代;對(duì)每一個(gè)元素,進(jìn)行計(jì)算其貢獻(xiàn)率while(line!=null){//計(jì)算每個(gè)網(wǎng)頁(yè)的出度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();試驗(yàn)結(jié)果:1抓取結(jié)果序號(hào)類型名抓取數(shù)目1文本類(.asp.html.htm.txt)26893個(gè)2圖片類(.gif.jpg.ico)8762個(gè)3文檔類(.pdf.doc)105個(gè)4其他(.ccs.rar等等)234個(gè)5總計(jì)35994個(gè)表1最終抓取結(jié)果統(tǒng)計(jì)連接分析結(jié)果:

序號(hào)URL名稱出/入度PageRank的權(quán)值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的結(jié)果分析判重機(jī)制與禮貌機(jī)制的分析結(jié)果:1)判重機(jī)制在類BdbFrontier中實(shí)現(xiàn)類四種過(guò)濾器分別為:BdbUriUniqFilterBloomUriUniqFilterMemFPMergeUriUniqFilterDiskFPMergeUriUniqFilterBdbUriUniqFilter主要通過(guò)調(diào)用sleepcat中的API來(lái)實(shí)現(xiàn)查看URL數(shù)據(jù)中是否存在URL,MemFPMergeUriUniqFilter與DiskFPMergeUriUniqFilter主要用來(lái)合并文件,下面主要分析BloomUriUniqFilter中實(shí)現(xiàn)的判斷方法:BloomUriUniqFilter主要通過(guò)類BloomFilter32bitSplit來(lái)實(shí)現(xiàn)對(duì)URL的過(guò)濾的: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ù)對(duì)每一個(gè)URL進(jìn)行Hash求值,以便對(duì)已訪問(wèn)的URL進(jìn)行標(biāo)記publicbooleancontains(finalCharSequences){inti=d,l=s.length();while(i--!=0)if( !getBit(hash(s,l,i) )returnfalse;returntrue;}判斷一個(gè)URL是否存在,如果存在只能在概率上認(rèn)為已經(jīng)存在,不能完全否定,如果不存在則可以確定不存在,可以直接加入到數(shù)據(jù)庫(kù),節(jié)省運(yùn)算量。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;}每加入一個(gè)URL對(duì)該數(shù)值進(jìn)行標(biāo)定。2)禮貌機(jī)制:Heritrix中的禮貌機(jī)制有許多,只分析較為簡(jiǎn)單的一個(gè),在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. 本站所有資源如無(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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論