搜索引擎及搜索引擎優(yōu)化實驗_第1頁
搜索引擎及搜索引擎優(yōu)化實驗_第2頁
搜索引擎及搜索引擎優(yōu)化實驗_第3頁
搜索引擎及搜索引擎優(yōu)化實驗_第4頁
搜索引擎及搜索引擎優(yōu)化實驗_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實驗三搜索引擎及SEO實驗一、 實驗?zāi)康难芯坎W(xué)習(xí)幾種常見的搜索引擎算法,包括網(wǎng)絡(luò)蜘蛛爬行策略、中文分詞算法、網(wǎng)頁正文提取算法、網(wǎng)頁去重算法、PageRank和MapReduce算法,了解它們的基本實現(xiàn)原理;運(yùn)用所學(xué)SEO技術(shù)對網(wǎng)頁進(jìn)行優(yōu)化。二、 實驗內(nèi)容研究常用的網(wǎng)絡(luò)蜘蛛爬行策略,如深度優(yōu)先策略、廣度優(yōu)先策略、網(wǎng)頁選擇策略、重訪策略和并行策略等,了解其實現(xiàn)原理;研究至少兩種中文分詞算法,了解其實現(xiàn)原理;研究至少兩種網(wǎng)頁正文提取算法,了解其實現(xiàn)原理;研究至少兩種網(wǎng)頁去重算法,了解其實現(xiàn)原理;研究Google的PageRank和MapReduce算法,了解它們的實現(xiàn)原理;使用所學(xué)的SEO技術(shù),對實驗二所設(shè)計的網(wǎng)站靜態(tài)首頁實施SEO,在實施過程中需采用如下技術(shù):網(wǎng)頁標(biāo)題(title)的優(yōu)化;選取合適的關(guān)鍵詞并對關(guān)鍵詞進(jìn)行優(yōu)化;元標(biāo)簽的優(yōu)化;網(wǎng)站結(jié)構(gòu)和URL的優(yōu)化;創(chuàng)建robots.txt文件,禁止蜘蛛抓取網(wǎng)站后臺頁面;網(wǎng)頁內(nèi)部鏈接的優(yōu)化;Heading標(biāo)簽的優(yōu)化;圖片優(yōu)化;網(wǎng)頁減肥技術(shù)。使用C++、C#和Java等任意一種編程語言,設(shè)計并實現(xiàn)一個簡單的網(wǎng)絡(luò)蜘蛛爬行程序,要求在輸入關(guān)鍵詞、設(shè)置爬行深度和初始網(wǎng)頁URL之后能夠?qū)崿F(xiàn)網(wǎng)頁搜索,輸出包含關(guān)鍵詞的網(wǎng)頁的URL和網(wǎng)頁標(biāo)題?!咀ⅲ簩嶒?為補(bǔ)充實驗,不要求每個同學(xué)都完成,感興趣者可自行實現(xiàn)該程序,不計入實驗報告評分?!咳?、 實驗要求研究幾種常用的網(wǎng)絡(luò)蜘蛛爬行策略,填寫相應(yīng)的表格,表格必須填寫完整;研究兩種中文分詞算法,填寫相應(yīng)的表格,表格必須填寫完整;研究兩種網(wǎng)頁正文提取算法,填寫相應(yīng)的表格,表格必須填寫完整;研究兩種網(wǎng)頁去重算法,填寫相應(yīng)的表格,表格必須填寫完整;

研究PageRank算法和MapReduce算法,填寫相應(yīng)的表格,表格必須填寫完整;提供實施SEO之后的網(wǎng)站靜態(tài)首頁界面和HTML代碼,盡量多地使用所學(xué)SEO技術(shù);嚴(yán)禁大面積拷貝互聯(lián)網(wǎng)上已有文字資料,盡量用自己的理解來闡述算法原理,必要時可以通過圖形來描述算法;使用任意一種編程語言實現(xiàn)一個簡單的網(wǎng)絡(luò)蜘蛛程序,需提供網(wǎng)絡(luò)蜘蛛程序完整源代碼及實際運(yùn)行結(jié)果。四、 實驗步驟通過使用搜索引擎并查閱相關(guān)資料,研究并整理幾種常用的網(wǎng)絡(luò)蜘蛛爬行策略相關(guān)資料,填寫相應(yīng)的表格;通過使用搜索引擎并查閱相關(guān)資料,研究并整理兩種中文分詞算法的基本原理,填寫相應(yīng)的表格;通過使用搜索引擎并查閱相關(guān)資料,研究并整理兩種網(wǎng)頁正文提取算法的基本原理,填寫相應(yīng)的表格;通過使用搜索引擎并查閱相關(guān)資料,研究并整理兩種網(wǎng)頁去重算法的基本原理,填寫相應(yīng)的表格;通過使用搜索引擎并查閱相關(guān)資料,研究并整理PageRank算法和MapReduce算法的基本原理,填寫相應(yīng)的表格;對實驗二所設(shè)計的網(wǎng)站靜態(tài)首頁實施SEO;使用任意一種編程語言,設(shè)計并實現(xiàn)一個簡單的網(wǎng)絡(luò)蜘蛛爬行程序。五、 實驗報告要求1.研究幾種常用的網(wǎng)絡(luò)蜘蛛爬行策略并填寫如下表格:策略名稱基本原理參考資料深度優(yōu)先策略深度優(yōu)先搜索是一種在開發(fā)爬蟲早期使用較多的方法。它的目的是要達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(即那些不包含任何超鏈的HTML文件)。在一個HTML文件中,當(dāng)一個超鏈被選擇后,被鏈接的HTML文件將執(zhí)行深度優(yōu)先搜索,即在搜索其余的超鏈結(jié)果之前必須先完整地搜索單獨(dú)的一條鏈。深度優(yōu)先搜索沿著HTML文件上的超鏈走到不能再深入為止,然后返回到某一個HTML文件,再繼續(xù)選擇該HTML文件百度百科深度優(yōu)先搜索:/view/288277.htm

中的其他超鏈。當(dāng)不再有其他超鏈可選擇時,說明搜索已經(jīng)結(jié)束。廣度優(yōu)先策略寬度優(yōu)先搜索算法(又稱廣度優(yōu)先搜索)是最簡便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型。Dijkstra單源最短路徑算法和Prim最小生成樹算法都采用了和寬度優(yōu)先搜索類似的思想。其別名又叫BFS,屬于一種盲目搜尋法,目的是系統(tǒng)地展開并檢查圖中的所有節(jié)點,以找尋結(jié)果。換句話說,它并不考慮結(jié)果的可能位址,徹底地搜索整張圖,直到找到結(jié)果為止。百度百科廣度優(yōu)先搜索:/view/1242613.htm網(wǎng)頁選擇策略對搜索引擎而言,要搜索互聯(lián)網(wǎng)上所有的網(wǎng)頁幾乎不可能,即使全球知名的搜索引擎google也只能搜索整個Internet1網(wǎng)頁的30%左右。其中的原因主要有兩方面,一是抓取技術(shù)的瓶頸。網(wǎng)絡(luò)爬蟲無法遍歷所有的網(wǎng)頁;二是存儲技術(shù)和處理技術(shù)的問題。因此,網(wǎng)絡(luò)爬蟲在抓取網(wǎng)頁時。盡量先采集重要的網(wǎng)頁,即采用網(wǎng)頁優(yōu)先抓取策略。網(wǎng)頁選擇策略是給予重要程度、等級較高的Web頁以較高的抓取優(yōu)先級,即Web頁越重要,則越應(yīng)優(yōu)先抓取。其實質(zhì)上是一種使網(wǎng)絡(luò)爬蟲在一定條件下較快地鎖定互聯(lián)網(wǎng)中被用戶普遍關(guān)注的重要信息資源的方法。而實現(xiàn)該策略的前提是正確評測Web頁的重要程度bJ,目前評測的主要指標(biāo)有PageRank李志義《網(wǎng)絡(luò)爬蟲的優(yōu)化策略探略》,廣東廣州510631

值、平均鏈接深度等。重訪策略依據(jù)Web站點的更新頻率確定重訪頻率此法符合實際情況,能夠更有效地管理和利用網(wǎng)絡(luò)爬蟲。例如,門戶網(wǎng)站通常每天要不斷地更新信息和添加新的信息,重訪的頻率則以天或小時為周期進(jìn)行網(wǎng)頁的重訪。不關(guān)MWeb站點的更新頻率問題,而是間隔一段時間重訪已被抓取的岡頁。其弊端是重復(fù)抓取的概率大,容易造成不必要的資源浪費(fèi)。根據(jù)搜索引擎開發(fā)商對網(wǎng)頁的主觀評價,提供個性化的服務(wù)網(wǎng)頁的重訪需要搜索引擎開發(fā)商對主要的站點進(jìn)行網(wǎng)頁更新頻率的主觀評價,可以根據(jù)需求提供個性化的服務(wù)。李志義《網(wǎng)絡(luò)爬蟲的優(yōu)化策略探略》,廣東廣州510631并行策略實施并行策略的核心是在增加協(xié)同工作的爬蟲數(shù)量的同時,科學(xué)合理地分配每個爬蟲的任務(wù),盡量避免不同的爬蟲做相同的Web信息抓取。一般通過兩種方法來分配抓取任務(wù),一是按照Web站點所對應(yīng)的m地址劃分任務(wù),一個爬蟲只需遍歷某一組地址所包含Web頁即可;另一種方法是依據(jù)Web站點的域名動態(tài)分配爬行任務(wù),每個爬蟲完成某個或某些域名段內(nèi)Web信息的搜集。李志義《網(wǎng)絡(luò)爬蟲的優(yōu)化策略探略》,廣東廣州5106312.研究兩種中文分詞算法并填寫如下表格:算法名稱基本原理參考資料算法一:最大匹配算法最大匹配算法是一種有著廣泛應(yīng)用的機(jī)械分詞方法,該方法依一個分詞詞表和一個基本的切分評估原則.即“長詞優(yōu)先”原則,來進(jìn)行分詞張玉茹肇慶526070《中文分詞算法之最大匹配算法的研究》算法二:基于無詞典的分詞算法基于漢字之間的互信息和t-測試信息的分詞算法。漢語的詞可以理解為字與字之間的穩(wěn)定結(jié)合,因此。如果在上下文中某劉紅芝徐州醫(yī)學(xué)院圖書館江蘇徐州221004幾個相鄰的字出現(xiàn)的次數(shù)越多,那么,這《中文分詞技術(shù)的研幾個字成詞的可能性就很大。根據(jù)這個道究》理引入互信息(Mutualinformation)和七-測試值(t—score)的概念,用來表示兩個漢字之間結(jié)合關(guān)系的緊密程度。該方法的分詞原理是:對于一個漢字字符串,計算漢字之間的互信息和t-測試差信息,選擇互信息和t-測試差信息大的組成詞。該方法的局限性是只能處理長度為2的詞,且對于一些共現(xiàn)頻率高的但并不是詞的字組,常被提取出來,并且常用詞的計算開銷大,但可以識別一些新詞,消除歧義。對于一個成熟的分詞系統(tǒng)來說,不可能單獨(dú)依靠某一個算法來實現(xiàn),都需要綜合不同的算法,在實際的應(yīng)用中,要根據(jù)具體的情況來選擇不同的分詞方案。3.研究兩種網(wǎng)頁正文提取算法并填寫如下表格:算法名稱基本原理參考資料算法一基于相似度的中文網(wǎng)頁正文提取算法正文文本在HTML源文件中有兩種修飾方式:有標(biāo)簽提示和無標(biāo)簽提示。有標(biāo)簽文本中標(biāo)簽的作用一般包含分塊信息、表格信息、或者文本的字體顏色信息等。這種文本采用基于分塊的方法能有不錯的效果。而無標(biāo)簽信息的正文文本處理之后不在分塊中,也不在表格內(nèi)。米用先分塊后提取放入網(wǎng)頁正文提取方法,無法達(dá)到理想的精度。本文提出根據(jù)相似度來提取網(wǎng)頁正文的算法。算法分為兩個步驟:首先取出網(wǎng)頁中包含中文最多的行,然后利用鑒于此余弦相似度匹配和標(biāo)簽相似度來提取網(wǎng)頁正文。該算法最大的特點是避免了上述的分塊步驟。熊子奇張暉林茂松(西南科技大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院四川綿陽621010)《基于相似度的中文網(wǎng)頁正文提取算法》算法二基于FFT的網(wǎng)頁正文提取算法研究與實現(xiàn)給定一個底層網(wǎng)頁的HTML源文件,求解最佳的正文區(qū)問。對于任何字符串區(qū)間(b,e),(OW6<eWss為源文件的長度.S為源文件),都有一個評價值,問題轉(zhuǎn)化為求評價函數(shù)的最大解。李雷,王勁林,白鶴,胡晶晶《基于FFT的網(wǎng)頁正文提取算法研究與實現(xiàn)》

4,研究兩種網(wǎng)頁去重算法并填寫如下表格:算法名稱基本原理參考資料算法一:同源網(wǎng)頁去重URL哈希值計算.構(gòu)造一個適當(dāng)?shù)墓:瘮?shù)H可得到從網(wǎng)頁URL字符序列到哈希值的映射,相同的URL字符串會得到相同的哈希值,從而說明該URL已被下載過.在對解析出來的URL進(jìn)行預(yù)處理后,以其各字符對應(yīng)的碼值按下式計算出其哈希值:HR-|A;=(J;36"-^^modS;式中:U={U]口 為解析出的網(wǎng)頁URL集合;*為的哈希地址;氣為對進(jìn)行預(yù)處理后的字串長度;ck為對u進(jìn)行預(yù)處理后左起第k個字符的碼值;S為哈希槽容量.上式表示從URL字符串U到其哈希散列值H的映射關(guān)系.輸入:URL;S.輸出:URL哈希值.算法描述:(1)針對URL初始化;⑵按照式⑴進(jìn)行URI。哈希值計算;(3)釋放空間,返回哈希值.高凱,王永成,肖君上海200030《網(wǎng)頁去重策略》算法二:基于網(wǎng)頁內(nèi)容的去重用網(wǎng)頁主體內(nèi)容間的相似程度來判斷它們是否為近似相同,而網(wǎng)頁主體采用主題概念進(jìn)行表示.當(dāng)兩個網(wǎng)頁主體相似比例達(dá)到設(shè)定的經(jīng)驗閾值時就認(rèn)為它們?yōu)榻葡嗤?,不需重?fù)下載.網(wǎng)頁U(iE[1,n])i使用特征向量進(jìn)行表示,其主題概念權(quán)值Wjj采用以tfidf為主其他策略為輔的方式來確定,悅:”=,‘心E,j或項)上式對tfidf算子(用t表示)乘以一個因子C來表示不同類型的頁面tags對權(quán)值的影響,目的是對位于不同位置的詞條作不同的加權(quán)處理.通過試驗分析可以確定針對不同tag標(biāo)記相應(yīng)的系數(shù)C的經(jīng)驗值.同時綜合考慮概念長因子z、詞性因子P等諸多因素,加權(quán)體系可表示為上述諸多因素的一個函數(shù),最后輸出最能代表該文檔的優(yōu)個權(quán)值較高凱,王永成,肖君上海200030《網(wǎng)頁去重策略》

大的主題概念.而用來判斷兩個網(wǎng)頁A和B之間相似的標(biāo)準(zhǔn)是通過統(tǒng)計主題概念詞串的共現(xiàn)個數(shù).如果共現(xiàn)個數(shù)大于預(yù)先設(shè)定的經(jīng)驗閾值,就認(rèn)為網(wǎng)頁A和B為近似相似.5.研究PageRank算法和MapReduce算法并填寫如下表格:算法名稱基本原理參考資料PageRankPageRank超鏈分析算法是Google搜索引擎采用的頁面排序算法。Google沿用了傳統(tǒng)搜索引擎的架構(gòu)設(shè)計,其與傳統(tǒng)的搜索引擎最大的不同之處在于它對網(wǎng)頁進(jìn)行了排序處理,使在最重要的網(wǎng)頁出現(xiàn)在檢索結(jié)果的最前面,其核心就是PageRank超鏈分析算法。通過計算出網(wǎng)頁的PageRank值,從而決定網(wǎng)頁在查淘返回結(jié)果集中的位置。PageRank值越高的網(wǎng)頁,在返回結(jié)果中越靠前。該算法基于下面2個前提:前提1:一個網(wǎng)頁被多次鏈接,則它可能是很重要的;一個網(wǎng)頁雖然沒有被多次引用,但是被重要的網(wǎng)頁鏈接,則它也可能是很重要的;一個網(wǎng)頁的重要性平均地傳遞到它所鏈接的網(wǎng)頁。前提2:假定用戶一開始隨機(jī)地訪問網(wǎng)頁集合中的一個網(wǎng)頁,以后跟隨網(wǎng)頁的鏈接向前瀏覽網(wǎng)頁,從不回退瀏覽,而瀏覽者選擇本頁中任意一個鏈接前進(jìn)的概率是相等的。在每個一個頁面,瀏覽者都有可能對本頁面的鏈接不再感興趣,從而隨機(jī)選擇一個新的頁面開始新的瀏覽。這個離開的可能設(shè)為d。從而頁面的PageRank值就是瀏覽者訪問到該網(wǎng)頁的概率。設(shè)定一個網(wǎng)頁A,假設(shè)指向它的網(wǎng)頁有T1,T2,...,Tn。令C(A)為A出發(fā)指向其它頁面的鏈接數(shù)目,PR(A)為A的PageRank,d為衰減因子(通常設(shè)為0.85),則有:陳杰浙江大學(xué)《主題搜索引擎中網(wǎng)絡(luò)蜘蛛搜索策略研究》MapReducMapReduce是一種編程模型,用于大規(guī)模數(shù)百度白科MapReduce

e據(jù)集(大于1TB)的并行運(yùn)算。概念"Map(映射)〃和"Reduce(化簡)",和他們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。他極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。當(dāng)前的軟件實現(xiàn)是指定一個Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(化簡)函數(shù),用來保證所有映射的鍵值對中的每一個共享相同的鍵組/view/2902.htmU得◎ 性嚴(yán)htm威?iM勺眷it學(xué)牙i?sraw*幡明酷理券衲■: 的娜?匠料Ei?— ?—?gt?用戶注冊?U得◎ 性嚴(yán)htm威?iM勺眷it學(xué)牙i?sraw*幡明酷理券衲■: 的娜?匠料Ei?— ?—?gt?用戶注冊?am歡迎光臨卜來就送Inspiron靈越LSR筆記本電腦!!【①3)*■卜主 頁G#H-商品耕,品牌直銷>電競社區(qū)>聯(lián)系我的新品上架-£-3Lue眼世蛆I^S?1eel.ItrlGE"E柏利3[心耳機(jī)-E-3L齡藤標(biāo)黑?右豈m._.燮…瞰HRf場JEJECS7leiin無志藻t理胃■國汛..<!--savedfromurl=(0048)file:///C:/Users/Administrator/Desktop/image.htm--><html><head><metahttp-equiv="Content-Type"content="text/html;charset=GBK"><title>藍(lán)天數(shù)碼城_專業(yè)的電競鼠標(biāo),耳機(jī),鍵盤網(wǎng)上購物商城</title><metaname="description"contents"藍(lán)天數(shù)碼城是專業(yè)的電競鼠標(biāo),耳機(jī),鍵盤網(wǎng)上購物商城,為您提供愉悅的網(wǎng)上商城購物體驗”/>v,£,=ireds[O。pj><ij><JJ/><PV><UU=1P匹IL,=叫其。LL戶WP!M0#?場幽§/s。四一xopw/?,戶方s§uit><pj><PV><uu=iP匹IL,=叫其。L6*9“=WP!M涕df??乙()—xopw/s。四一xopw/?,戶方s§uit>v""=treds[o。pj><PV><uu=iP匹£L=叫其。Ld£“=WPg涕d「【()—xopw/s。四一xopw/?,戶方s§uit><u^tt=UBdSMOItt£t=UBdspOpj><IJ><JJ/><PV><pj><PV><uu=iP“1“=叫其叫點*9“7用!從搭訴?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP“L,=叫其。LL戶WPM搭訴?場幽§/s。四一xopw/?,戶方s§uit><pj><PV><uu=iP“L,=叫其。LL戶WPM搭訴?場幽§/s。四一xopw/?,戶方s§uit><pj><PV><uu=iP“L,=叫其。L£,=WP!M搭訴?場幽§/s。四一xopw/?,戶方s§uit><pj><PV><uu=iP“【“=叫其°L計乙戶WPM搭訴?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP“【“=叫其°L6乙L,=WP!M搭訴?場幽§/s。四一xopw/?,戶方s§uit><pj><PV><uu=iP“L,=叫其°LL戶WPM搭訴?場幽初sou〕—xopuy?,戶方s§uii><pj><ij><Xpoqj><u0u=§UP^dSIP3uOtt=SmppBdn90“0“二rapmq,£88“=叫其°L巽0L,=WP!MuI0—u=PJ°叫咧〉<—(psd,xapm)saongqoMiojqa%—j><tti9jugou=u§TpAip><uQu=jq§T9qUT§IBUIuOt=qjpiMm§iBuiuot=UT§JBuidojttQt=m§iBuiygi 鹵q^poq><pBaq/></ttMonojtxgpuTtt=u=jugjuoottsjoqoiu=guiBuBpui>v/“帥宜'舞il'兇曾“FUOIUOOuSpIOMX95[t=gUIBUBPUI><PV><UU=1P ulu=WJAV0#?場幽g/s。四一xopw/?,戶方sSuiT><pj><PV><uu=iP“IL,=叫其叫“L,=WP!M涕d「[【—xopw/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP“IL,=叫其。L6此廣WPg涕d「o【—xopw/s。四一xopw/?,戶方sSuit>v,£,=ireds[oopj><ij><JJ/><PV><UU=1P“乙戶叫其。LL戶WP!M0#?場幽§/s。四一xopw/?,戶方sSuiT><pj><PV><uu=iP“乙戶叫其。L0£乙戶WPg涕d「6(PxQpu!/s。四一xopw/?,戶方sSuit>v""=treds[o。pj><PV><uu=iP“£【“=叫其。L0£L,=WP!M涕d「8(PxQpu!/s。四一xopw/?,戶方sSuit>v,z“=tredsMO、乙戶uwds[oopj><ij><JJ/><PV><uu=iPu98lu=m§PHulu=WJAV搭訴?場幽g/s。四一xopw/?,戶方sSuit><pj><PV><uu=iPu98lu=m§PHulu=WJAV涕dfz()—xopw/s。四一xopw/?,戶方sSuit><pj><ij><JJ/><PV><UU=1P“L,=叫其。LL戶WP!M0#?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iPM8L,=叫其。L6££“=WP!M涕叩為一xopuys。四一xopw/?,戶方sSuit><u^t=UBdSMOIu^t=TOdspopj><PV><UU=1P“L,=叫其。LL戶WP!M涕d「£0—xopw/s。四一xopw/?,戶方sSuit><pj><ij><JJ/><PV><UU=1P“0"=叫其叫“L,=WP!M0#?場幽§/s。四一xopw/?,戶方sSuiT><pj><PV><uu=iP點9乙戶叫其。L**9“=WP!M涕d0()—xopw/s。四一xopw/?,戶方sSuit><u9tt=UBdSMOIpj></tr><tr><tdrowspan="8"><imgsrc="./index_files/index_12.jpg"widths"1"height="219"alt=""x/td><tdcolspan="5"rowspan="2"><imgsrc="./index_files/index_l3.jpg"width="379"height="42"alt=""x/td><td><imgsrc=”./index_files/分隔符.gif”widths"1"height="24"alt=""x/td></tr><tr><tdrowspan="8"><imgsrc="./index_files/index_14.jpg"widths"644"height="227"alt=""x/td><td><imgsrc=”./index_files/分隔符.gif”width」'1”height」'18”alt=""x/td></tr><tr><tdrowspan="6"><imgsrc="./index_files/index_15.jpg"widths"129"height="177"alt=""x/td><tdcolspan="2"><imgsrc="./index_files/index_16.jpg"width="248"height="4"alt=""x/td><tdcolspan="2"rowspan="7"><imgsrc="./index_files/index_17.jpg"width="2"height="209"alt=""x/td><td><imgsrc="./index_files/分隔符.gif"widths"1"height="4"alt=""x/td></tr><tr><tdcolspan="2"><imgsrc="./index_files/index_l8.jpg"width="248"height="41"alt=""x/td><td><imgsrc=”./index_files/分隔符.gif”widths"1"height="41"alt=""x/td></tr><tr><tdcolspan="2"><imgsrc="./index_files/index_19.jpg"width="248"height="46"alt=""x/td><td><PV><UU=1P“60L=叫其。L乙戶涕df??此一xopw/s。四一xopw/?,戶方sSuit>v,z“=ireds[oopj><ij><JJ/><PV><UU=1PM9L=iq3!°LL=WP!M搭訴?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iPM9L,=叫其。L9*9“=WP!M涕df??此一xopuys。四一xopw/?,戶方sSuit>v,£,=ireds[oopj><ij><JJ/><PV><UU=1P“乙£“=叫其。LL戶WP!M0#?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP*0£“=叫其。L0£L,=WP!M涕d「£『xopw/s。四一xopw/?,戶方sSuit><u£tt=UBdSMOItt^t=UBdspOpj><IJ><JJ/><PV><uu=iP“乙戶叫其。LL戶WPM搭訴?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><UU=1P“01£“=叫其叫*此廣WP!M涕d[?乙乙—xopw/s。四一xopw/?,戶方sSuiT><ut7t=TOdsM0iu^t=TOdspopj><IJ><JJ/><PV><UU=1P*£“=叫其°LL戶WP!M0#?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP*£“=叫其叫*此廣WPg涕d「[『xopw/s。四一xopw/?,戶方sSuit>v,z“=ireds[oopj><ij><JJ/><PV><UU=1P“9"=叫其°LL戶WP!M0#?場幽§/s。四一xopw/?,戶方sSuit><pj><PV><uu=iP“9"=叫其。L洲乙戶WPg涕d「o乙—xopw/s。四一xopw/?,戶方sSuit>v,z“=ireds[oopj><ij><JJ/><td><imgsrc="./index_files/index_26.jpg"width="644"height="109"alt=""></td><td><imgsrc="./index_files/分隔符.gif"width="1"height="109"alt=""></td></tr></tbody></table></div><!--EndSaveforWebSlices--></body></html>7.選做:提供網(wǎng)絡(luò)蜘蛛程序完整源代碼及實際運(yùn)行結(jié)果界面截屏(實驗報告中需包含源代碼和界面截屏)。importjavax.swing.*;importjava.awt.*;//needthistoaccessthecolorobject/**IntegerVerifier.java**//**InputVerifiertoverifierintegertextfields*Checksforvalidintegerinput,andtoseeifthenumberisbetweenaspecifiedmaxandminvalue.*@authorMarkPendergast*/publicclassIntegerVerifierextendsjavax.swing.InputVerifier(/**listenertogetvalid/invaliddatareports*/privateVerifierListenerlistener=null;/**blankfieldsallowed,trueforok,falseforerror*/privatebooleanblankOk=false;/**minimumvalidvalue*/intminValue=Integer.MIN_VLUE;/**maximumvalidvalue*/intmaxValue=Integer.MAX_WLUE;/**CreatesanewinstanceofIntegerVerifier*@paramalistenerVerifierListenertoreceiveinvalid/validdataclass(nullmeansnolistener)@paramblankokiftrue,thenthefieldcanbeleftblank@paramminminimumvalidvalue@parammaxmaximumvalidvalue*/publicIntegerVerifier(VerifierListeneralistener,booleanblankok,intmin,intmax)(listener=alistener;blankOk=blankok;minValue=min;maxValue=max;}/**Verifiescontentsofthespecifiedcomponent*@paramjComponentthecomponenttocheck@returntrueifthecomponentisok,elsefalse**/publicbooleanverify(javax.swing.JComponentjComponent)(JTextFieldthefield=(JTextField)jComponent;Stringinput=thefield.getText();intnumber;input=input.trim();//stripoffleadingandtrailingspacesasthesegivesInteger.parseIntproblemsif(input.length()==0&&blankOk){thefield.setForeground(Color.black);if(listener!=null)listener.validData(jComponent);returntrue;//ifempty,justreturntrue}elseif(input.length()==0&&!blankOk){reportError(thefield,"Fieldcannotbeblank!");returnfalse;//ifempty,justreturntrue}/*trytoconverttoaninteger*/try{number=Integer.parseInt(input);}catch(NumberFormatExceptione){reportError(thefield,"Youmustenteravalidnumber");returnfalse;}/*testifitsintherange*/if(number<minValue||number>maxValue){reportError(thefield,"Youmustenteranumberbetween"+minValue+"and"+maxValue);returnfalse;}/*reportgooddata*/thefield.setForeground(Color.black);thefield.setText(""+number);//resetwhatweconvertedintothecomponentif(listener!=null)listener.validData(jComponent);returntrue;//validinputfound}/**reporterrortothelistener(ifany)@paramthefieldtextfieldbeingchecked@parammessageerrormessagetoreport*/privatevoidreportError(JTextFieldthefield,Stringmessage){thefield.setForeground(Color.red);//paintthetextred,returnfalseinvalidinputif(listener!=null)listener.invalidData(message,thefield);}}/**Spider.java**/importjava.util.*;importjava.io.*;import.*;importjavax.swing.*;importjavax.swing.tree.*;importjavax.swing.text.html.parser.*;importjavax.swing.text.html.HTMLEditorKit.*;importjavax.swing.text.html.*;importjavax.swing.text.*;/**Objectusedtosearchtheweb(orasubsetofgivendomains)foralistofkeywords@authorMarkPendergast*/publicclassSpiderextendsThread(/**sitevisitlimit(stopssearchatsomepoint)*/privateintsiteLimit=100;/**searchdepthlimit*/privateintdepthLimit=100;/**keywordlistforseach*/privateStringkeywordList[];/**iptypelist*/privateStringipDomainList[];/**visitedtree*/privateJTreesearchTree=null;/**messageJTextArea,placetoposterrors*/privateJTextAreamessageArea;/**placetoputsearchstatistics*/privateJLabelstatsLabel;/**keeptrackofwebsitessearched*/privateintsitesSearched=0;/**keeptrackofwebsitesfoundwithmatchingcriteria*/privateintsitesFound=0;/**startingsiteforthesearch*/privateStringstartSite;/**flagusedtostopsearch*/privatebooleanstopSearch=false;/**CreatesanewinstanceofSpider@paramatreeJTreeusedtodisplaythesearchspace@paramamessageareaJTextAreausedtodisplayerror/warningmessages@paramastatlabelJLabeltodisplaynumberofsearchedsitesandhits@paramakeywordlistlistofkeywordstosearchfor@paramaipdomainlistlistoftopleveldomains@paramasitelimitmaximumnumberofwebpagestolookat@paramadepthlimitmaximumnumberoflevelsdowntosearch(controlsrecursion)@paramastartsitewebsitetousetostartthesearch*/publicSpider(JTreeatree,JTextAreaamessagearea,JLabelastatlabel,Stringastartsite,String[]akeywordlist,String[]aipdomainlist,intasitelimit,intadepthlimit)(searchTree=atree;//placetodisplaysearchtreemessageArea=amessagearea;//placetodisplayerrormessagesstatsLabel=astatlabel;//placetoputrunstatisticsstartSite=fixHref(astartsite);keywordList=newString[akeywordlist.length];for(inti=0;i<akeywordlist.length;i++)keywordList[i]=akeywordlist[i].toUpperCase();//usealluppercaseformatchingipDomainList=newString[aipdomainlist.length];for(inti=0;i<aipdomainlist.length;i++)ipDomainList[i]=aipdomainlist[i].toUpperCase();//usealluppercaseformatchingsiteLimit=asitelimit;//maxnumberofsitestolookatdepthLimit=adepthlimit;//maxdepthofrecursiontouseDefaultMutableTreeNoderoot=newDefaultMutableTreeNode(newUrlTreeNode("Root"));DefaultTreeModeltreeModel=newDefaultTreeModel(root);//createatreemodelwitharootsearchTree.setModel(treeModel);searchTree.setCellRenderer(newUrlNodeRenderer());//useacustomcellrenderer}/**startrunningthesearchinanewthread*/publicvoidrun(){DefaultTreeModeltreeModel=(DefaultTreeModel)searchTree.getModel();//getourmodelDefaultMutableTreeNoderoot=(DefaultMutableTreeNode)treeModel.getRoot();Stringurllc=startSite.toLowerCase();if(!urllc.startsWith("http://")&&!urllc.startsWith("ftp://")&&!urllc.startsWith("www.")){startSite="file:///"+startSite;//noteyoumusthave3slashes!}else//httpmissing?if(urllc.startsWith("www.")){startSite="http://"+startSite;//tackonhttp://}startSite=startSite.replace('\\','/');//fixbadslashessitesFound=0;sitesSearched=0;updateStats();searchWeb(root,startSite);//searchthewebmessageArea.append("Done!\n\n");}/**searchtheurlsearchtreetoseeifwe'vealreadyvisitedthespecifiedurl@paramurlstringurltosearchfor@returntrueiftheurlisalreadyinthetree*/publicbooleanurlHasBeenVisited(Stringurlstring){Stringteststring=fixHref(urlstring);DefaultTreeModeltreeModel=(DefaultTreeModel)searchTree.getModel();//getourmodelDefaultMutableTreeNoderoot=(DefaultMutableTreeNode)treeModel.getRoot();Enumerationetree=root.breadthFirstEnumeration();while(etree.hasMoreElements()){UrlTreeNode node =(UrlTreeNode)(((DefaultMutableTreeNode)etree.nextElement()).getUserObject());if(nodeinstanceofUrlTreeNode&&node.equals(teststring))returntrue;}returnfalse;}/**Checkdepthofsearch@returntrueifdepthlimitexceeded@paramnodesearchtreenodetotestthedepthlimitof*/publicbooleandepthLimitExceeded(DefaultMutableTreeNodenode){if(node.getLevel()>=depthLimit)returntrue;elsereturnfalse;}/**addanodetothesearchtree@paramparentnodeparenttoaddthenewnodeunder@paramnewnodenodetobeaddedtothetree**/privateDefaultMutableTreeNodeaddNode(DefaultMutableTreeNodeparentnode,UrlTreeNodenewnode){DefaultMutableTreeNodenode=newDefaultMutableTreeNode(newnode);DefaultTreeModeltreeModel=(DefaultTreeModel)searchTree.getModel();//getourmodelintindex=treeModel.getChildCount(parentnode);//howmanychildrenaretherealready?treeModel.insertNodeInto(node,parentnode,index);//addaslastchildTreePathtp=newTreePath(parentnode.getPath());searchTree.expandPath(tp);//makesuretheusercanseethenodejustaddedreturnnode;}/**determinesifthegivenurlisinaoneofthetopleveldomainsinthedomainsearchlist*@paramurlurltobechecked@returntrueifitsok,elsefalseifurlshouldbeskipped*/privatebooleanisDomainOk(URLurl){if(url.getProtocol().equals("file"))returntrue;//fileprotocolalwaysokStringhost=url.getHost();intlastdot=host.lastIndexOf(".”);if(lastdot<=0)returntrue;Stringdomain=host.substring(lastdot);//justthe.comor.edupartif(ipDomainList.length==0)returntrue;for(inti=0;i<ipDomainList.length;i++)if(ipDomainList[i].equalsIgnoreCase("<any>"))returntrue;if(ipDomainList[i].equalsIgnoreCase(domain))returntrue;}returnfalse;}/***upatestatisticslabel*/privatevoidupdateStats(){statsLabel.setText("Sitessearched:"+sitesSearched+"Sitesfound:"+sitesFound);}/**repairsasloppyhref,flipsbackwards/,addsmissing/@returnrepairedwebpagereference@paramhrefwebsitereference*/publicstaticStringfixHref(Stringhref){Stringnewhref=href.replace('\\','/');//fixsloppywebreferencesintlastdot=newhref.lastIndexOf('.');intlastslash=newhref.lastIndexOf('/');if(lastslash>lastdot){if(newhref.charAt(newhref.length()-1)!='/')newhref=newhref+"/";//addonmissing/}returnnewhref;/**recursiveroutinetosearchtheweb@paramparentnodeparentnodeinthesearchtree@paramurlstrwebpageaddresstosearch*/publicvoidsearchWeb(DefaultMutableTreeNodeparentnode,Stringurlstr){if(urlHasBeenVisited(urlstr))//havewebeenhere?return;//yes,justreturnif(depthLimitExceeded(parentnode))return;if(sitesSearched>siteLimit)return;yield();//allowthemainprogramtorunif(stopSearch)return;messageArea.append("Searching:"+urlstr+"\n");sitesSearched++;updateStats();////nowlookinthefile//try{URLurl=newURL(urlstr);//createtheurlobjectfromastring.Stringprotocol=url.getProtocol();//asktheurlforitsprotocolif(!protocol.equalsIgnoreCase("http")&&!protocol.equalsIgnoreCase("file")){messageArea.append("Skipping:"+urlstr+"notahttpsite\n\n");return;}Stringpath=url.getPath();//asktheurlforitspathintlastdot=path.lastIndexOf(".");//checkforfileextensionif(lastdot>0){Stringextension=path.substring(lastdot);//justthefileextensionif(!extension.equalsIgnoreCase(".html")&&!extension.equalsIgnoreCase(".htm"))return;//skipeverythingbuthtmlfiles}if(!isDomainOk(url)){messageArea.append("Skipping:"+urlstr+"notindomainlist\n\n");return;}UrlTreeNodenewnode=newUrlTreeNode(url);//createthenodeInputStreamin=url.openStream();//asktheurlobjecttocreateaninputstreamInputStreamReaderisr=newInputStreamReader(in);//convertthestreamtoareader.DefaultMutableTreeNodetreenode=addNode(parentnode,newnode);SpiderParserCallbackcb=newSpiderParserCallback(treenode);//createacallbackobjectParserDelegatorpd=newParserDelegator();//createthedelegatorpd.parse(isr,cb,true);//parsethestreamisr.close();//closethestream}//endtrycatch(MalformedURLExceptionex){messageArea.append("BadURLencountered:"+urlstr+"\n\n");}catch(IOExceptione){messageArea.append(" IOException,couldnotaccesssite"+e.getMessage()+"\n\n");}yield();return;}/***Stopsthesearch.*/publicvoidstopSearch(){stopSearch=true;}/***Innerclassusedtohtmlhandleparsercallbacks*/publicclassSpiderParserCallbackextendsHTMLEditorKit.ParserCallback{/**urlnodebeingparsed*/privateUrlTreeNodenode;/**treenode*/privateDefaultMutableTreeNodetreenode;/**contentsoflasttextelement*/privateStringlastText="";/**CreatesanewinstanceofSpiderParserCallback@paramatreenodesearchtreenodethatisbeingparsed*/publicSpiderParserCallback(DefaultMutableTreeNodeatreenode){treenode=atreenode;node=(UrlTreeNode)treenode.getUserObject();}/**handleHTMLtagsthatdon'thaveastartandendtag@paramtHTMLtag@paramaHTMLattributes@paramposPositionwithinfile*/publicvoidhandleSimpleTag(HTML.Tagt,MutableAttributeSeta,intpos){if(t.equals(HTML.Tag.IMG)){node.addImages(1);return;}if(t.equals(HTML.Tag.BASE)){Objectvalue=a.getAttribute(HTML.Attribute.HREF);if(value!=null)node.setBase(fixHref(value.toString()));}}/**takecareofstarttags@paramtHTMLtag@paramaHTMLattributes@paramposPositionwithinfile*/publicvoidhandleStartTag(HTML.Tagt,MutableAttributeSeta,intpos)if(t.equals(HTML.Tag.TITLE)){lastText="";return;}if(t.equals(HTML.Tag.A)){Objectvalue=a.getAttribute(HTML.Attribute.HREF);if(value!=null){node.addLinks(1);Stringhref=value.toString();href=fixHref(href);try{URLreferencedURL=newURL(node.getBase(),href);searchWeb(treenode,referencedURL.getProtocol()+"://"+referencedURL.getHost()+referencedURL.getPath());}catch(MalformedURLExceptione){messageArea.append("BadURLencountered:"+href+"\n\n");return;}}}}/**takecareofstarttags@paramtHTMLtag@paramposPositionwithinfile*/publicvoidhandleEndTag(HTML.Tagt,intpos)if(t.equals(HTML.Tag.TITLE)&&lastText!=null){node.setTitle(lastText.trim());DefaultTreeModeltm=(DefaultTreeModel)searchTree.getModel();tm.nodeChanged(treenode);}}/**takecareoftextbetweentags,checkagainstkeywordlistformatches,ifmatchfound,setthenodematchstatustotrue@paramdataTextbetweentags@parampospositionoftextwithinwebpage*/publicvoidhandleText(char[]data,intpos){lastText=newString(data);node.addChars(lastText.length());Stringtext=lastText.toUpperCase();for(inti=0;i<keywordList.length;i++){if(text.indexOf(keywordList[i])>=0){if(!node.isMatch()){sitesFound++;updateStats();}node.setMatch(keywordList[i]);return;}}}}/*SpiderControl.java**/importjava.awt.*;importjavax.swing.*;importjavax.swing.tree.*;importjava.util.*;import.*;/**UserinterfacetoconductwebsearcheswiththeSpiderobject@authorMarkPendergast*/publicclassSpiderControlextendsjavax.swing.JFrameimplementsVerifierListener(/**CreatesnewformSpiderControl*/publicSpiderControl()(initComponents();setSize(650,600);setTitle("WebSpiderDemo");////centertheframeonthescreen//Dimensionoursize=getSize();Dimensionscreensize=Toolkit.getDefaultToolkit().getScreenSize();intx=(screensize.width-oursize.width)/2;inty=(screensize.height-oursize.height)/2;x=Math.max(0,x);//keepthecorneronthescreeny=Math.max(0,y);//setLocation(x,y);DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("Empty");DefaultTreeModeltreeModel=newDefaultTreeModel(root);//createatreemodelwitharootsearchTree.setModel(treeModel);URLiconurl=getClass().getResource("SPIDERWEB.gif");//capitalizationcountsonthefilenameif(iconurl!=null){ImageIconic=newImageIcon(iconurl);setIconImage(ic.getImage());//telltheframetosetisasitsicon}}/**Thismethodiscalledfromwithintheconstructortoinitializetheform.WARNING:DoNOTmodifythiscode.ThecontentofthismethodisalwaysregeneratedbytheFormEditor.*/privatevoidinitComponents(){//GEN-BEGIN:initComponentstoolBar=newjavax.swing.JPanel();startButton=newjavax.swing.JButton();stopButton=newjavax.swing.JButton();clearMessageButton=newjavax.swing.JButton();viewButton=newjavax.swing.JButton();exitButton=newjavax.swing.JButton();centerPane=newjavax.swing.JTabbedPane();formTab=newjavax.swing.JPanel();siteLabel=newjavax.swing.JLabel();siteField=newjavax.swing.JTextField();depthLabel=newjavax.swing.JLabel();depthField=newjavax.swing.JTextField();keywordLabel=newjavax.swing.JLabel();keywordPane=newjavax.swing.JScrollPane();keywordArea=newjavax.swing.JTextArea();domainLabel=newjavax.swing.JLabel();domainPane=newjavax.swing.JScrollPane();domainList=newjavax.swing.JList();startingLabel=newjavax.swing.JLabel();errorLabel=newjavax.swing.JLabel();jTextArea1=newjavax.swing.JTextArea();startSiteField=newjavax.swing.JTextField();treeTab=newjavax.swing.JPanel();searchTreePane=newjavax.swing.JScrollPane();searchTree=newjavax.swing.JTree();pageStatistics=newjavax.swing.JTextArea();messageTab=newjavax.swing.JScrollPane();messageArea=newjavax.swing.JTextArea();statusLabel=newjavax.swing.JLabel();setBackground(newjava.awt.Color(153,153,255));addWindowListener(newjava.awt.event.WindowAdapter()(publicvoidwindowClosing(java.awt.event.WindowEventevt)(exitForm(evt);}});toolBar.setLayout(newjava.awt.FlowLayout(java.awt.FlowLayout.LEFT));toolBar.setBackground(newjava.awt.Color(204,204,204));startButton.setFont(newjava.awt.Font("Arial”,1,11));startButton.setText("StartSearch");startButton.setToolTipText("Startthesearch");startButton.addActionListener(newjava.awt.event.ActionListener()(publicvoidactionPerformed(java.awt.event.ActionEventevt)(startButtonActionPerformed(evt);}});toolBar.add(startButton);stopButton.setFont(newjava.awt.Font("Arial",1,11));stopButton.setText("StopSearch");stopButton.setToolTipText("Stopthesearchthatisinprogress");stopButton.addActionListener(newjava.awt.event.ActionListener()(publicvoidactionPerformed(java.awt.event.ActionEventevt)(stopButtonActionPerformed(evt);}

溫馨提示

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

評論

0/150

提交評論