【正文】
erver是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase、AshtonTate三家公司共同開發(fā)的,并于1988年推出了第一個(gè)在OS/2版本上運(yùn)行的SQL Server系統(tǒng)。SQL Server 2005的常見(jiàn)版本包括如下四種: 1)個(gè)人版(Personal Edition):用于單機(jī)系統(tǒng)或客戶機(jī);2) 標(biāo)準(zhǔn)版(Standard Edition):用于小型的工作組或部門; 3)企業(yè)版(Enterprise Edition):支持所有的SQL Server 2005特性,可作為大型Web站點(diǎn)、企業(yè)OLTP(聯(lián)機(jī)事務(wù)處理)以及數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)等的產(chǎn)品數(shù)據(jù)庫(kù)服務(wù)器;4)開發(fā)者版(Developer Edition):用于程序員開發(fā)應(yīng)用程序,這些程序需要SQL Server 2005作為數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備[7]。ExtJS最開始基于YUI技術(shù),由開發(fā)人員Jack Slocum開發(fā),通過(guò)參考Java SWING等機(jī)制來(lái)組織可視化組件,從UI界面上CSS樣式的應(yīng)用,到數(shù)據(jù)解析過(guò)程中的異常處理,都可算是一款不可多得的JavaScript客戶端技術(shù)的精品。 HTTPClientHTTPClient是Apache Jakarta Common下的子項(xiàng)目,可以用來(lái)提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包。HTTPClient所提供的主要功能包括:1) 實(shí)現(xiàn)了所有HTTP的方法(GET,POST,PUT,HEAD 等);2) 支持自動(dòng)轉(zhuǎn)向;3) 支持 HTTPS 協(xié)議;4) 支持代理服務(wù)器。2)信息轉(zhuǎn)換功能:1 鏈接重寫,用于修改頁(yè)面中的所有超鏈接;2 網(wǎng)頁(yè)內(nèi)容拷貝,用于將網(wǎng)頁(yè)內(nèi)容保存到本地;3 內(nèi)容檢驗(yàn),可以用來(lái)過(guò)濾網(wǎng)頁(yè)上一些令人不愉快的字詞;4 HTML信息清洗,把本來(lái)亂七八糟的HTML信息格式化;5 轉(zhuǎn)成XML格式數(shù)據(jù)。 系統(tǒng)可行性研究 技術(shù)可行性1)軟件可行性新聞爬蟲系統(tǒng)所需要的數(shù)據(jù)源可以通過(guò)編寫網(wǎng)絡(luò)爬蟲程序來(lái)實(shí)現(xiàn)定向抓取,通過(guò)定制爬行過(guò)程中的過(guò)濾條件和爬行策略,爬蟲程序所獲取的數(shù)據(jù)量和抓取的效率都能得到很好的保證。 操作可行性本系統(tǒng)在用戶界面層利用ExtJS框架結(jié)合Google Visualization API進(jìn)行構(gòu)建。 經(jīng)濟(jì)可行性經(jīng)過(guò)不斷的系統(tǒng)完善和功能增強(qiáng)過(guò)程,成型之后的新聞爬蟲系統(tǒng)能夠?yàn)楦鱾€(gè)行業(yè)按需提供不同的服務(wù)。出于性能和成本上的考量,本系統(tǒng)不需要也不可能對(duì)整個(gè)互聯(lián)網(wǎng)來(lái)做遍歷抓取。他們需要不斷的知道外屆對(duì)企業(yè)的評(píng)價(jià),是否有競(jìng)爭(zhēng)對(duì)手惡意中傷等,從而在第一時(shí)間作出應(yīng)對(duì)措施,減少破壞性和蔓延速度,以維護(hù)形象和贏得消費(fèi)者的同情和理解。數(shù)據(jù)源的配置需要定期進(jìn)行更新和維護(hù),系統(tǒng)需要提供有良好的接口,盡量降低配置的難度和維護(hù)的工作量。4) 進(jìn)入WEB頁(yè)測(cè)試本地服務(wù)器和系統(tǒng)是否運(yùn)行正常。 功能需求分析根據(jù)上文對(duì)于用戶用例的分析,可以總結(jié)出本系統(tǒng)的功能需求:1) 針對(duì)管理員用戶:a) 對(duì)爬蟲爬取的數(shù)據(jù)源進(jìn)行便捷的管理操作,包括對(duì)數(shù)據(jù)源的增 加和刪除以及對(duì)于數(shù)據(jù)抓取策略的修改;b) 觸發(fā)一次數(shù)據(jù)采集的過(guò)程,包括指定一次手動(dòng)采集的過(guò)程和觸 發(fā)一次定時(shí)采集的過(guò)程以實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)獲取和增量獲??;c) 對(duì)于數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行分析;d) 具備普通用戶能夠使用的所有功能,可進(jìn)入WEB頁(yè)測(cè)試本地 服務(wù)器和系統(tǒng)是否運(yùn)行正常。4 系統(tǒng)總體設(shè)計(jì)系統(tǒng)需求分析階段主要提出了系統(tǒng)需要做什么,系統(tǒng)設(shè)計(jì)階段需要解決的問(wèn)題就是系統(tǒng)需要怎么做。過(guò)多的重復(fù)性數(shù)據(jù)會(huì)嚴(yán)重影響系統(tǒng)的執(zhí)行性能,當(dāng)這些數(shù)據(jù)的一個(gè)實(shí)例發(fā)生改變時(shí),其他數(shù)據(jù)也都要進(jìn)行相應(yīng)的改變。其總體的工程如圖42所示:數(shù)據(jù)存儲(chǔ):將獲取的新聞數(shù)據(jù)存入數(shù)據(jù)庫(kù)中數(shù)據(jù)取得:利用爬蟲程序獲得網(wǎng)頁(yè)中的新聞數(shù)據(jù)數(shù)據(jù)爬取選擇:選擇要爬取得新聞?lì)悇e和方式 開始 數(shù)據(jù)可視化:將新聞信息以及分析結(jié)果輸?shù)角芭_(tái) 開始 圖42 系統(tǒng)主要工作流程 數(shù)據(jù)獲取功能模塊在該新聞爬蟲系統(tǒng)中,數(shù)據(jù)的獲取主要依靠網(wǎng)絡(luò)爬蟲來(lái)實(shí)現(xiàn)。一方面,能夠被過(guò)濾器識(shí)別的URL符合用戶預(yù)定義的過(guò)濾規(guī)則,這些URL全部都是用戶所期望獲取的數(shù)據(jù)來(lái)源,數(shù)據(jù)抓取的準(zhǔn)確性得到很好的保證;另一方面,由于大量不符合條件的URL都被過(guò)濾掉了,爬行隊(duì)列中僅僅加入符合條件的URL,大大節(jié)省了寶貴的內(nèi)存空間。頁(yè)面解析子模塊的工作方式如圖45所示:圖45 頁(yè)面解析子模塊3) 爬行控制子模塊爬行控制模塊是整個(gè)爬蟲程序的核心,它控制著整個(gè)爬蟲的抓取策略(寬度優(yōu)先或者深度優(yōu)先)以及停止條件。 數(shù)據(jù)獲取模塊數(shù)據(jù)獲取模塊主要利用Java語(yǔ)言結(jié)合HTTPClient開源工具編寫了一個(gè)針對(duì)新聞的可擴(kuò)展的網(wǎng)絡(luò)爬蟲,該爬蟲程序能夠按照廣度優(yōu)先的爬行策略對(duì)新聞數(shù)據(jù)進(jìn)行全面的定向抓取以及周期性的增量抓取。界面下方的空白區(qū)域使用JTextArea實(shí)現(xiàn),其作用是截獲系統(tǒng)的控制臺(tái)輸出并進(jìn)行顯示,用于指示當(dāng)前的爬行動(dòng)態(tài)信息。操作效果如圖52所示:圖52 “建立連接”操作 “開始爬行”操作用戶在取得到數(shù)據(jù)庫(kù)的連接之后,可以通過(guò)選擇新聞?lì)悇e(可細(xì)分為china、world、society、mil)開始抓取數(shù)據(jù),數(shù)據(jù)來(lái)源和爬行限制選項(xiàng)可在界面上部進(jìn)行控制。例如在新聞?lì)悇e下選國(guó)內(nèi)下的港澳臺(tái)快訊,然后輸入關(guān)鍵字,日期關(guān)鍵字為“臺(tái)灣”時(shí)間為20140609,進(jìn)行檢索,則檢索過(guò)程圖如圖57所示: 圖57檢索過(guò)程圖檢索的結(jié)果圖如下圖58所示: 圖58 檢索結(jié)果圖當(dāng)點(diǎn)擊第二個(gè)結(jié)果時(shí)新聞內(nèi)容展示圖如下圖59所示:圖59新聞內(nèi)容展示圖 按時(shí)辰分析折線圖用戶需要輸入日期進(jìn)行檢索,查看當(dāng)前日期下的新聞數(shù)量隨時(shí)間的變化圖。當(dāng)輸入時(shí)間為“20140608”時(shí)國(guó)內(nèi)新聞69條,國(guó)外29條,社會(huì)23條,軍事12條,可見(jiàn)仍然是軍事新聞數(shù)量最少。6 系統(tǒng)測(cè)試與發(fā)布 系統(tǒng)測(cè)試是針對(duì)整個(gè)產(chǎn)品系統(tǒng)進(jìn)行的測(cè)試,目的是驗(yàn)證系統(tǒng)是否滿足了需求規(guī)格的定義,找出與需求規(guī)格不符或與之矛盾的地方,從而提出更加完善的方案??梢苑?wù)于測(cè)試目標(biāo)的規(guī)則為: 測(cè)試是一個(gè)為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程。首先,測(cè)試并不僅僅是為了要找出錯(cuò)誤,通過(guò)分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的分布特征,可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前所采用的軟件過(guò)程的缺陷以便改進(jìn);其次,沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的,完整的測(cè)試是評(píng)定軟件質(zhì)量的方法之一。軟件的白盒測(cè)試又稱為“結(jié)構(gòu)測(cè)試”,這種方法是把測(cè)試對(duì)象看作一個(gè)打開的盒子,它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)以及有關(guān)信息來(lái)設(shè)計(jì)或選擇測(cè)試用例,從而對(duì)程序所有邏輯路徑進(jìn)行測(cè)試,檢查程序的功能是否符合其功能需求。 設(shè)計(jì)測(cè)試用例針對(duì)系統(tǒng)不同的功能模塊,設(shè)計(jì)8個(gè)測(cè)試用例分別進(jìn)行測(cè)試,如表61至表68所示:表61 測(cè)試用例一測(cè)試用例編號(hào)Testing_Crawling測(cè)試項(xiàng)目數(shù)據(jù)獲取模塊手動(dòng)抓取功能預(yù)設(shè)條件當(dāng)前已連接到數(shù)據(jù)庫(kù)服務(wù)器輸入數(shù)據(jù)源URL種子集合操作步驟(1)選擇數(shù)據(jù)來(lái)源(2)點(diǎn)擊“爬取所有新聞”按鈕預(yù)期輸出(1) 抓取的數(shù)據(jù)逐條存入數(shù)據(jù)庫(kù)中(2) 抓取狀態(tài)實(shí)時(shí)輸出至控制臺(tái)狀態(tài)欄表62 測(cè)試用例二測(cè)試用例編號(hào)Testing_KeepCrawling測(cè)試項(xiàng)目數(shù)據(jù)獲取模塊增量抓取功能預(yù)設(shè)條件當(dāng)前已連接到數(shù)據(jù)庫(kù)服務(wù)器輸入需要進(jìn)行增量采集(周期性任務(wù))的頁(yè)面URL操作步驟(1)選擇數(shù)據(jù)來(lái)源(2)點(diǎn)擊“增量抓取”按鈕預(yù)期輸出(1) 增量抓取的數(shù)據(jù)逐條存入數(shù)據(jù)庫(kù)中(2) 抓取狀態(tài)實(shí)時(shí)輸出至控制臺(tái)狀態(tài)欄(3) 抓取任務(wù)定時(shí)進(jìn)行觸發(fā)表63 測(cè)試用例三測(cè)試用例編號(hào)Testing_VisualGragf測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊分析圖預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入(1) 需要進(jìn)行檢索的關(guān)鍵詞(2) 檢索日期操作步驟(1)輸入關(guān)鍵詞和日期(2)點(diǎn)擊“搜索”按鈕預(yù)期輸出與該關(guān)鍵詞相關(guān)的新聞標(biāo)題以及新聞發(fā)布時(shí)間表64 測(cè)試用例四測(cè)試用例編號(hào)Testing_NewsContent測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊新聞內(nèi)容展現(xiàn)預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入輸入查看的新聞標(biāo)題操作步驟點(diǎn)擊要查看的新聞的標(biāo)題預(yù)期輸出該新聞的正文內(nèi)容表65 測(cè)試用例五測(cè)試用例編號(hào)Testing_TypeAnalysis測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊新聞?lì)愋头治鲋鶢顖D預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入需要進(jìn)行檢索的日期操作步驟(1)輸入日期(2)點(diǎn)擊“搜索”按鈕預(yù)期輸出(1) 新聞?lì)愋头治霰恚?) 新聞?lì)愋头治鲋鶢顖D表66 測(cè)試用例六測(cè)試用例編號(hào)Testing_SmallTypeAnalysis測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊新聞小類型分析柱狀圖預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入需要進(jìn)行檢索的日期操作步驟(1)輸入日期(2)點(diǎn)擊“搜索”按鈕預(yù)期輸出(1)新聞小類型分析表(2)新聞小類型分析柱狀圖表67 測(cè)試用例七測(cè)試用例編號(hào)Testing_DayTime測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊一天中新聞數(shù)量變化折線圖預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入需要進(jìn)行檢索的日期操作步驟(1)輸入日期(2)點(diǎn)擊“搜索”按鈕預(yù)期輸出新聞數(shù)量隨時(shí)間變化折線圖表68 測(cè)試用例八測(cè)試用例編號(hào)Testing_yearTime測(cè)試項(xiàng)目數(shù)據(jù)可視化模塊一年中新聞數(shù)量變化折線圖預(yù)設(shè)條件TOMCAT服務(wù)器已開啟輸入需要進(jìn)行檢索的日期操作步驟(1)輸入日期(2)點(diǎn)擊“搜索”按鈕預(yù)期輸出(1) 新聞數(shù)量隨月份變化折線圖(2)新聞數(shù)量按月份變化分析表 測(cè)試結(jié)果軟件測(cè)試的步驟執(zhí)行過(guò)后,整個(gè)測(cè)試活動(dòng)并未結(jié)束而對(duì)于測(cè)試結(jié)果分析才是最為重要的環(huán)節(jié),詳細(xì)分析并總結(jié)測(cè)試結(jié)果對(duì)下一輪測(cè)試工作的開展具有很大的借鑒意義。 7 總結(jié)在互聯(lián)網(wǎng)產(chǎn)業(yè)高速發(fā)展的今天,新聞爬蟲系統(tǒng)正在扮演著越來(lái)越重要的角色,成為新聞熱點(diǎn)分析系統(tǒng)數(shù)據(jù)來(lái)源的有效工具。3) 將整個(gè)系統(tǒng)打造成一個(gè)多數(shù)據(jù)源、功能強(qiáng)大的智能新聞爬取分析平臺(tái)。當(dāng)對(duì)了這些比較熟悉后才開始著手做新聞爬蟲系統(tǒng);其次,通過(guò)這次的畢業(yè)設(shè)計(jì)深刻的體會(huì)到扎實(shí)的編程功底是每一個(gè)出色的程序員都必須具備的基礎(chǔ)條件。在今后的學(xué)習(xí)過(guò)程中,我會(huì)繼續(xù)嚴(yán)格要求自己,以做產(chǎn)品的態(tài)度來(lái)對(duì)待所有的工作,力求完美。在此向各位學(xué)者表示衷心的感謝附錄1 英文原文ABSTRACT Crawling the web is deceptively simple: the basic algorithm i(a)Fetch a page (b) Parse it to extract all linked URLs (c) For all the URLs not seen before repeat (a)–(c).However the size of the web estimated at over 4 billion pages and its rate of change (estimated at 7 per week )move this plan from a trivial programming exercise to a serious algorithmic and system design challenge. Indeed these two factors alone imply that for a reasonably fresh and plete crawl of the web step a must be executed about a thousand times per second and thus the membership test c must be done well over ten thousand times per second against a set too large to store in main memory. This requires a distributed architecture which further plicates the membership test. A crucial way to speed up the test is to cache that is to store in main memory adynamic subset of the “seen” URLs. The main goal of this paper is to carefully investigate several URL caching techniques for web crawling. We consider both practical algorithms: random replacement static cache LRU and CLOCK and theoretical limits: clairvoyant caching and infinite cache. We performed about 1800simulations using these algorithms with various cache sizes using actual log data ex