畢業設計總結

畢業答辯已經過去兩個多星期,成績良好,也沒想衝優,考研之後越發的懶散。近日想想應該做個總結,從一個整體的角度來看待畢設,也許會有不一樣的收穫。

畢業設計題目是“面向竹藤領域的網絡爬蟲系統的研究與開發”,題目很長,因而有點小玄乎,糊弄人。導師名義上是一個老教授,實際上是與老教授同一個課題組 的年輕老師。

--------------------------------------------------------------************------------------------------------------------------------

畢設的具體內容大致如下:

1.基於開源爬蟲Heritrix進行擴展定製,形成一個符合特定需求(即面向竹藤領域)的聚焦爬蟲(注:聚焦爬蟲 的工作流程比較複雜,需要根據一定的網頁分析算法過濾與主題無關的網頁,保存有用的連接並且添加到等待抓取得url對列中,並根據一定的搜索策略 從等待隊列中選擇下一步要抓取的連接。重複着一個過程,直到滿足一定條件爲止。)。

本來個人想基於HttpClient和HTMLParser從頭開始寫爬蟲,但導師考慮到爬蟲的性能以及工作量的問題,建議基於已有的開源爬蟲進行擴展。於是我對很多開源爬蟲進行特性的對比,最終由於靈活的可擴展性而選擇了Heritrix,簡單的說,Heritrix是一個爬蟲框架。

接下來的工作說難不難,說容易也不容易,個人認爲重點難點在於瞭解Heritrix的體系結構---靈活的模塊式結構。只有充分了解這一點,纔會知道對哪個模塊進行擴展,怎樣擴展,爲什麼可以這樣擴展。由於以前沒接觸過類似的工作,所以開始時候非常沒有方向。幸好有個同學以前做過這方面的開發,而且Heritrix相關文檔也比較多,畢設得以順利進行。

圖1:Heritrix體系結構

擴展工作則是按照特定需求編寫兩個類插入上圖所示的Extractor Chain和Postprocess Chain,替換或者配合已有的類進行工作。因爲同學做過這方面的工作,通過請教使得擴展沒有太大的難度。我分別針對三個竹藤領域的重要網站寫了Extractor抽取類,我覺得這樣的抽取類沒有多大的實用性,因爲按照我的抽取策略,每個網站的域名不一樣,結構也不一樣,就必須寫出對應的抽取類。

代碼1:針對國際竹藤網絡中心 寫的zhutengArticleExtractor.java

Postprocess擴展則更加簡單,就是設置特定的限制條件過濾不符合條件的鏈接。

代碼2

2.利用HTMLParser庫處理上個步驟獲取的網頁數據。這個階段讓我比較鬱悶,因爲所使用的方法通用性非常差,以致我認爲自己的工作沒有任何意義。但又想不到更好的方法。

圖2.HTMLParser庫功能結構圖

我的方法就是先利用Filter模式過濾網頁源碼內容,得到符合需求的內容所在的標籤,然後利用Visitor模式過濾標籤,得到標籤之間的純文本。也是因爲一般不同網站的網頁特定內容所使用的標籤是不一樣的,這種方法使得爲某個網站寫的解析類不適用於另一個網站,侷限性太大。


代碼3.網頁解析關鍵部分(解析而得的純文本以數據庫和文本文件分別存儲)

3.基於LAMP技術實現一個簡單的搜索引擎,並利用jQuery處理界面。

圖3.搜索主頁面

圖4.數據庫表結構

圖5.搜索結果頁面

圖6.jQuery AccordionMenu顯示效果

Ubuntu中有LAMP套件可供一鍵安裝,非常方便,省去了繁瑣的配置工作。

jQuery做出來的頁面效果確實非常不錯,值得多學多用,當然根本的是javascript和CSS,學會了這兩個,jQuery就很簡單了。

使用LAMP時,需要注意的是:訪問數據庫的編碼方式需和數據庫編碼一致,否則中文就會變成亂碼。所以在php訪問數據庫的代碼中一般會添加一條語句設置編碼,如下:

*******************************************************我的收穫****************************************************

1.畢業設計過程中,每個星期都會有導師見面,雖然老師沒給過我什麼直接的意見,但在我提出某種設計上想法或者問題的解決方案時,他最常說的一句話是“你嘗試一下 ”...是的,學計算機的人就是應該凡事先自己嘗試一下。通過自己的嘗試驗證所得到的一切會理解得倍加深刻。這是畢業設計給我的最大收穫。

2.畢設之前我只自學過一點Java的基礎知識,畢設過程中我逐漸初步掌握Java編程,學習了正則表達式,初步學習LAMP技術開發以及jQuery的基本原理。

3.經過畢設課題,我已基本理解網絡爬蟲的原理,明白該如何從頭開始實現一個簡單的爬蟲,也許以後會動手將其實現。

4.當沒有好的解決方案時,也許自己該換個角度思考問題。比如在第二個步驟中解析網頁,自己的要求過於精確(只考慮如何得到自己想得到的東西),也許本應該逆向思考---如何去除自己不想要的東西,這樣得到的結果也許不夠精確,不夠完美,但通用性會好得多。

現在想想,自己最後做出來的東西是有些偏題的,二,三步驟的工作都不是課題所要求的,而第一步驟的工作又做得不好。由於爬取的數據量不大,基於Heritrix進行擴展所實現的爬蟲反而顯得笨重,Heritrix的絕大部分功能都沒有得到挖掘使用,性能優勢也沒有體現出來,所以完全可以自己從頭實現一個簡單的爬蟲,功能足夠並易於擴展即可。當然如果課題一開始就計劃如此,如果沒有花時間瞭解Heritrix體系結構從而理解網絡爬蟲的工作原理,可能這種嘗試已經失敗了或者遭受了極大的挫折。



發佈了51 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章