




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1分布式爬蟲系統(tǒng)的設(shè)計與實現(xiàn)摘要:隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的人通過互聯(lián)網(wǎng)獲取每日新聞內(nèi)容。但是,隨著互聯(lián)網(wǎng)的高速發(fā)展下,互聯(lián)網(wǎng)上的信息也存在著數(shù)量繁多,范圍廣泛,重復(fù)率過高等問題。由于目前的搜索引擎往往通過模糊匹配的方式來顯示與用戶搜索內(nèi)容所相關(guān)的信息,導(dǎo)致部分用戶無法通過搜索引擎快速的得到他們所需求的特定內(nèi)容。對于部分用戶的一些具體化、精細化的需求,就需要這樣一個網(wǎng)絡(luò)爬蟲,可以實時爬取新聞類網(wǎng)站的信息,并根據(jù)爬取的內(nèi)容將新聞進行分類,通過分類進行展示并統(tǒng)計出各個分類下的新聞總數(shù),使用戶可以快速獲取到想要的新聞內(nèi)容,大大的減少了用戶查詢新聞的時間,使整個新聞瀏覽過程變得非常便利。本文通過研究網(wǎng)絡(luò)爬蟲的現(xiàn)狀,分析得到本系統(tǒng)核心模塊分別是:爬蟲模塊、數(shù)據(jù)清洗模塊、數(shù)據(jù)存儲模塊、數(shù)據(jù)統(tǒng)計分析模塊以及數(shù)據(jù)顯示模塊。系統(tǒng)采用Python作為開發(fā)語言,使用Scrapy框架進行爬蟲架構(gòu)搭建,數(shù)據(jù)庫選擇Redis和MongoDB數(shù)據(jù)庫,前端采用與JavaScript技術(shù)進行開發(fā)。創(chuàng)建一個方便快捷,直觀的新聞類爬蟲系統(tǒng)。本系統(tǒng)可以根據(jù)字段的設(shè)計爬取到相應(yīng)的內(nèi)容,并將數(shù)據(jù)存儲到本地數(shù)據(jù)庫,通過連接數(shù)據(jù)庫顯示新聞一級分類、二級分類、新聞標題、新聞內(nèi)容。并可以統(tǒng)計出各個分類下爬取到的總新聞數(shù)。使用戶可以非常便利的通過本系統(tǒng)獲取新聞信息。經(jīng)測試,本系統(tǒng)功能開發(fā)齊全,是一套性能穩(wěn)定且無上手難度的爬蟲系統(tǒng)。關(guān)鍵詞:分布式爬蟲系統(tǒng);MongoDB;數(shù)據(jù)庫原理目錄1緒論 11.1研究目的及意義 11.1.1研究目的 11.1.2研究意義 11.2國內(nèi)外研究現(xiàn)狀 11.2.1國外研究現(xiàn)狀 11.2.2國內(nèi)研究現(xiàn)狀 21.3本課題研究內(nèi)容和研究步驟 31.3.1研究內(nèi)容 31.3.2研究步驟 31.4論文組織結(jié)構(gòu) 42開發(fā)工具及相關(guān)技術(shù) 52.1Python 52.2Pycharm集成開發(fā)工具 52.3Scrapy 52.4Xpath 52.5Redis數(shù)據(jù)庫 62.6MongoDB數(shù)據(jù)庫 62.7本章小結(jié) 63系統(tǒng)分析 73.1系統(tǒng)設(shè)計目標 73.2系統(tǒng)可行性分析 73.2.1技術(shù)可行性 73.2.2經(jīng)濟可行性 73.2.3操作可行性 73.3功能需求分析 83.4本章小結(jié) 94系統(tǒng)設(shè)計 104.1系統(tǒng)總體設(shè)計 104.2.1系統(tǒng)邏輯設(shè)計 104.2.2系統(tǒng)工作流程 104.2數(shù)據(jù)庫設(shè)計 114.3本章小結(jié) 125系統(tǒng)實現(xiàn) 135.1爬蟲模塊 135.2可視化模塊 155.2.1頁面統(tǒng)計展示模塊 155.2.2新聞內(nèi)容模塊 165.3本章小結(jié) 166系統(tǒng)測試 186.1測試目的 186.2測試方法 186.3測試用例 186.4本章小結(jié) 207總結(jié)與展望 217.1總結(jié) 217.2展望 21參考文獻 231緒論1.1研究目的及意義1.1.1研究目的隨著互聯(lián)網(wǎng)時代的快速發(fā)展,人們獲取信息的方式逐漸多樣化。在網(wǎng)絡(luò)的快速普及下,越來越多的人都會選擇從互聯(lián)網(wǎng)上獲取自己所需要的信息。根據(jù)中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)在京發(fā)布的第46次《中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》中顯示,截止到2020年6月,中國網(wǎng)民的數(shù)量以達到9.4億,較2020年3月增加3625萬?;ヂ?lián)網(wǎng)普及率達67%,較同年三月份提升2.5個百分點[1]。但是,隨著互聯(lián)網(wǎng)的高速發(fā)展下,互聯(lián)網(wǎng)上的信息也存在著數(shù)量繁多,范圍廣泛,重復(fù)率過高等問題。由于目前的搜索引擎往往通過模糊匹配的方式來顯示與用戶搜索內(nèi)容所相關(guān)的信息,導(dǎo)致部分用戶無法通過搜索引擎快速的得到他們所需求的特定內(nèi)容[2]。對于部分用戶的一些具體化、精細化的需求,網(wǎng)絡(luò)爬蟲應(yīng)運而生。1.1.2研究意義網(wǎng)絡(luò)爬蟲作為獲取特定信息的一項工具。早在90年代初就已被廣泛應(yīng)用。其主要目標就是精確獲取互聯(lián)網(wǎng)上的內(nèi)容以方便人們使用。但在最初階段,一個網(wǎng)絡(luò)爬蟲往往都是在一臺機器上運行。但隨著互聯(lián)網(wǎng)的快速發(fā)展以及網(wǎng)站數(shù)量的的快速增長,單機版的爬蟲已經(jīng)很難在短時間內(nèi)獲取大量特定的信息。在這樣的一個背景下,研究制作一個支持多臺機器并行采集數(shù)據(jù)的分布式網(wǎng)絡(luò)爬蟲是很有必要的。通過分布式技術(shù),能夠解決單個服務(wù)器出現(xiàn)的性能不足等問題。通過各個服務(wù)器檢索并交換數(shù)據(jù),來提高數(shù)據(jù)的采集,并能減輕服務(wù)器的負擔。且能通過分布式技術(shù)將采集到的數(shù)據(jù)分開存儲,能夠提高數(shù)據(jù)的查詢效率且更有利于數(shù)據(jù)庫的管理。這就是研究分布式網(wǎng)絡(luò)爬蟲的意義所在。1.2國內(nèi)外研究現(xiàn)狀1.2.1國外研究現(xiàn)狀在國外,對于爬蟲的研究可以追溯到1993年,出現(xiàn)了諸如WorldWideWebWorm等爬蟲程序[3]。它們的主要功能是利用有限的URL種子幾何去收集并統(tǒng)計網(wǎng)絡(luò)信息。通過反復(fù)下載Web頁面來更新它們的URL倉庫。在1994年,誕生了兩個新的網(wǎng)絡(luò)爬蟲程序:webCrawler和MOMspider[4]。它們除了去收集與統(tǒng)計外,還首次引入了禮貌爬取和黑名單的概念。到了1998年。為了解決爬蟲的可延展性。SergeyMikhaylovichBrin和LawrenceEdwardLarryPage設(shè)計了一個大規(guī)模網(wǎng)絡(luò)爬蟲,也就是如今家喻戶曉的Google[5]。它通過數(shù)據(jù)壓縮以及建立索引等方式來優(yōu)化對磁盤的訪問,減少磁盤的訪問時間。并通過PageRank算法來計算用戶訪問該頁面的幾率,通過該幾率值來對頁面進行不同頻率的訪問,來減少冷門頁面的訪問率以進一步優(yōu)化爬蟲程序?qū)W(wǎng)絡(luò)資源的訪問,進而實現(xiàn)對所爬取頁面的快速更新[6]。直到目前,網(wǎng)絡(luò)爬蟲的技術(shù)也在不斷的發(fā)展,像IBM的webFountain就能夠在高更新率的前提下對網(wǎng)頁進行整體離線。UbiCrawler通過P2P技術(shù)將網(wǎng)頁去重的工作分擔給了每位用戶[7]。諸如此類,國外對于網(wǎng)絡(luò)爬蟲的研究仍然火熱。1.2.2國內(nèi)研究現(xiàn)狀關(guān)于國內(nèi)對于網(wǎng)絡(luò)爬蟲的研究,比較知名的如百度的baiduspider,有道的youdaobot等商業(yè)爬蟲[8]。像百度的baiduspider就可以根據(jù)服務(wù)器的負載能力動態(tài)調(diào)整訪問密度,從而降低服務(wù)器的壓力。而非商業(yè)的網(wǎng)絡(luò)爬蟲,比較有名的比如北京大學網(wǎng)絡(luò)實驗室研究的北大天網(wǎng)和上海交通大學設(shè)計的lgoo系統(tǒng)。北大天網(wǎng)最初是一個集中式爬蟲,后來轉(zhuǎn)變?yōu)榉植际脚老x。作為一個面向局域網(wǎng)的分布式網(wǎng)絡(luò)爬蟲系統(tǒng),北大天網(wǎng)的抓取數(shù)和穩(wěn)定性都比以前提高了許多。主節(jié)點進行任務(wù)分配,從節(jié)點負責采集,并采用廣度優(yōu)先策略進行抓取[9]。而上海交通大學所研究的lgoo系統(tǒng)則可以通過跨局域網(wǎng)進行爬蟲節(jié)點部署,采用二級哈希映射算法進行任務(wù)的分配工作,并能保證各個爬蟲節(jié)點的負載均衡。是一個基于網(wǎng)格服務(wù)的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)[10]。綜上所述,目前國內(nèi)外科研機構(gòu)對于網(wǎng)絡(luò)爬蟲的進行了大量的研究,并在服務(wù)器負載能力、磁盤訪問時間、冷門網(wǎng)絡(luò)資源訪問頻率等方面做了相應(yīng)的研究與優(yōu)化,但是針對目前日益增長的網(wǎng)民量,研究制作一個針對于特定類別網(wǎng)站的網(wǎng)絡(luò)爬蟲并通過友好的可視化界面來顯示相應(yīng)內(nèi)容也變得尤為重要,針對這兩個部分,本課題將研究開發(fā)一套適用于新浪等新聞網(wǎng)站的爬蟲系統(tǒng),分析網(wǎng)站結(jié)構(gòu),采集網(wǎng)站的分類信息資源,并對采集結(jié)果進行保存以及提供一個友好的可視化界面來供用戶使用。通過這樣一套系統(tǒng),可以實現(xiàn)對特定類別信息的爬取與存儲,使用戶可以更好的獲取相應(yīng)的內(nèi)容,并通過友好的可視化界面,使用戶可以更加方便簡單的去使用本系統(tǒng)。1.3本課題研究內(nèi)容和研究步驟1.3.1研究內(nèi)容本課題基于目前網(wǎng)絡(luò)爬蟲的研究背景以及國內(nèi)外的研究現(xiàn)狀,研究開發(fā)一套適用于新浪等新聞網(wǎng)站的爬蟲系統(tǒng)。本課題的主要研究內(nèi)容如下:(1)爬蟲技術(shù)研究研究爬蟲的相關(guān)技術(shù)。根據(jù)國內(nèi)外現(xiàn)狀的研究,重點研究分布式爬蟲的可伸縮性、性能和有效性、可擴展性以及分布式爬蟲的爬取策略、工作分配模式以及節(jié)點部署等相關(guān)內(nèi)容。(2)開發(fā)框架及技術(shù)研究研究分布式爬蟲系統(tǒng)所用的框架以及開發(fā)技術(shù)。對各類可開發(fā)語言進行分析比較。分析各類框架的優(yōu)缺點。包括Python的Scrapy庫,Requests庫,分析其優(yōu)缺點,討論其適用性。1.3.2研究步驟本項目在深入學習分布式網(wǎng)絡(luò)爬蟲的相關(guān)技術(shù),分析新浪等典型新聞網(wǎng)站的結(jié)構(gòu)基礎(chǔ)上,根據(jù)系統(tǒng)功能需求,采用Python語言進行開發(fā),使用Scrapy與Django框架進行系統(tǒng)搭建,采用Xpath技術(shù)對數(shù)據(jù)進行提取解析,通過Redis和MongoDB數(shù)據(jù)庫來完成分布式和數(shù)據(jù)的存儲,實現(xiàn)一套適用于新浪等新聞網(wǎng)站的方便用戶快速獲取信息的分布式爬蟲系統(tǒng)。本課題采用的研究步驟如下所示:(1)總體結(jié)構(gòu)根據(jù)目前的國內(nèi)外現(xiàn)狀分析以及用戶需求調(diào)研,確定系統(tǒng)的功能模塊為爬蟲模塊;數(shù)據(jù)清洗模塊;數(shù)據(jù)存儲模塊;數(shù)據(jù)顯示模塊以及數(shù)據(jù)統(tǒng)計分析模塊。并根據(jù)用戶的需求,對系統(tǒng)進行相應(yīng)的功能設(shè)計:爬蟲模塊:要求分析網(wǎng)站結(jié)構(gòu),實現(xiàn)爬蟲策略、內(nèi)容數(shù)據(jù)字段設(shè)計和增量爬取、去重;數(shù)據(jù)清洗模塊:要求能夠?qū)Σ杉Y(jié)果因格式等原因引起的亂碼進行清洗與處理;數(shù)據(jù)存儲模塊:實現(xiàn)抓取字段設(shè)計和數(shù)據(jù)存儲功能;數(shù)據(jù)顯示模塊:實現(xiàn)數(shù)據(jù)的可視化分類顯示;數(shù)據(jù)統(tǒng)計分析模塊:能夠針對采集結(jié)果進行分析統(tǒng)計。(2)模塊實現(xiàn)系統(tǒng)方面選擇使用Python語言進行開發(fā),Python的優(yōu)勢在于程序編寫簡潔快速,代碼開發(fā)效率高,且擁有大量優(yōu)質(zhì)的文檔與第三方庫,非常方便使用??蚣芊矫孢x擇Scrapy框架,Scrapy是一套基于Twisted的異步處理框架,是一個通過Python實現(xiàn)的爬蟲框架,擁有強大的統(tǒng)計能力,能在不同的url上爬行,并且支持shell方式,方便進行獨立調(diào)試。針對爬蟲模塊,使用Xpath技術(shù)對下載的網(wǎng)頁進行提取解析;數(shù)據(jù)庫方面使用Redis數(shù)據(jù)庫做分布式;使用MongoDb數(shù)據(jù)庫做數(shù)據(jù)存儲。本系統(tǒng)通過scrapy框架,對爬蟲進行命名,并設(shè)定初始爬取頁面,之后在item.py中定義本系統(tǒng)所需要的字段。字段定義完成后通過Xpath技術(shù)對頁面進行提取解析,并根據(jù)設(shè)計好的字段進行相應(yīng)的爬取。并將爬取好的數(shù)據(jù)存入MongoDb中。(3)測試對所設(shè)計的系統(tǒng)進行相應(yīng)的黑盒測試與白盒測試。所用測試技術(shù)包括單元測試、系統(tǒng)測試、集成測試、壓力測試等。并根據(jù)測試結(jié)果對系統(tǒng)進行相應(yīng)的完善。1.4論文組織結(jié)構(gòu)本論文章節(jié)組織框架具體如下:第一章,緒論。對本文的研究背景、國內(nèi)外現(xiàn)狀及研究目的進行了概述。第二章,開發(fā)工具及相關(guān)技術(shù)。對平臺開發(fā)所用的技術(shù)及其功能進行初步的介紹,并對本系統(tǒng)所涉及的技術(shù)做相關(guān)說明。第三章,系統(tǒng)分析。明確本系統(tǒng)的設(shè)計目標,對可行度和用戶需求進行了分析。第四章,系統(tǒng)設(shè)計。就平臺架構(gòu)、平臺功能結(jié)構(gòu)、數(shù)據(jù)庫表及數(shù)據(jù)庫概念模型進行了設(shè)計。第五章,系統(tǒng)實現(xiàn)。通過劃分不同的角色,對不同角色的不同功能分別進行設(shè)計與實現(xiàn),詳細描述本平臺的頁面布局及其功能實現(xiàn)的具體邏輯。第六章,系統(tǒng)測試。完成對本平臺核心模塊的測試。第七章,總結(jié)與展望。總結(jié)全文,分析本系統(tǒng)已經(jīng)打到的效果以及暴露出的漏洞,以此對未來系統(tǒng)的優(yōu)化思路進行展望。
2開發(fā)工具及相關(guān)技術(shù)2.1PythonPython是一種解釋型、面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。Python的設(shè)計具有很強的可讀性,具有比其他語言更有特色語法結(jié)構(gòu)的特性。它的最大的優(yōu)勢之一是豐富的庫,并且在各個平臺的兼容性很好。開發(fā)者可以通過調(diào)用這些成熟的庫來迅速編寫程序,包括正則表達式、XML、HTML等。同時它是免費、開源的,兼容大量的第三方庫,并且許多難以解決的問題都可以在各個論壇例如CSDN,博客園上找到相應(yīng)的解答[11]。因此,本系統(tǒng)采用Python作為開發(fā)最大的語言使用。2.2Pycharm集成開發(fā)工具PyCharm是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,比如調(diào)試、語法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以用于支持Django框架下的專業(yè)Web開發(fā)。并且,PyCharm可以快速添加第三方庫,在開發(fā)過程中提供了極大的便利[12]。因此,本系統(tǒng)采用它作為開發(fā)環(huán)境。2.3ScrapyScrapy是適用于Python的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。它最大的優(yōu)點在于是一個框架,開發(fā)者可以根據(jù)自己的需求對其進行修改,以達到自己的目的。并且Scrapy提供了很多強大的特性來使得爬取更為簡單高效,例如HTML,XML源數(shù)據(jù)的選擇及提取支持、提供了一系列可復(fù)用的過濾器、高擴展性等[13]。因此,本系統(tǒng)采用Scrapy作為爬蟲框架來使用。2.4XpathXpath是一門在XML文檔中查找信息的語言。它包含一個標準函數(shù)庫,并且含有超過100個內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值、日期和時間比較、節(jié)點和QName處理、序列處理、邏輯值等。通過Xpath,可以在爬取過程中迅速提取需要爬取的信息[14]。因此,本系統(tǒng)采用Xpath進行信息的提取。2.5Redis數(shù)據(jù)庫Redis是完全開源的,遵守BSD協(xié)議,是一個高性能的key-value數(shù)據(jù)庫。它支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。它擁有豐富的數(shù)據(jù)類型–Redis支持二進制案例的Strings,Lists,Hashes,Sets及OrderedSets數(shù)據(jù)類型操作。并且它的性能極高,讀的速度可達到110000次/s,寫的速度可達到81000次/s[15]。因此,本系統(tǒng)采用Redis數(shù)據(jù)庫進行分布式的搭建。2.6MongoDB數(shù)據(jù)庫MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。它是一個面向文檔存儲的數(shù)據(jù)庫,操作起來比較簡單和容易,支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組,支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。并且允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接進行調(diào)用。因此,本系統(tǒng)采用MongoDB數(shù)據(jù)庫進行數(shù)據(jù)的存儲。2.7本章小結(jié)本章主要是對本系統(tǒng)的開發(fā)工具以及所用到的技術(shù)進行了簡單介紹,首先介紹了開發(fā)工具Pycharm,然后介紹了系統(tǒng)開發(fā)所用語言Python,包括基于Python開發(fā)的Scrapy爬蟲框架,Xpath技術(shù)等。最后對分布式以及數(shù)據(jù)存儲所用的MongoDB數(shù)據(jù)庫和Redis數(shù)據(jù)庫進行了相關(guān)介紹。3系統(tǒng)分析3.1系統(tǒng)設(shè)計目標隨著互聯(lián)網(wǎng)時代的快速發(fā)展,人們獲取信息的方式逐漸多樣化。在網(wǎng)絡(luò)的快速普及下,越來越多的人都會選擇從互聯(lián)網(wǎng)上獲取自己所需要的信息。但是,隨著互聯(lián)網(wǎng)的高速發(fā)展下,互聯(lián)網(wǎng)上的信息也存在著數(shù)量繁多,范圍廣泛,重復(fù)率過高等問題。由于目前的搜索引擎往往通過模糊匹配的方式來顯示與用戶搜索內(nèi)容所相關(guān)的信息,導(dǎo)致部分用戶無法通過搜索引擎快速的得到他們所需求的特定內(nèi)容[2]。對于部分用戶的一些具體化、精細化的需求,網(wǎng)絡(luò)爬蟲應(yīng)運而生。以新浪等新聞類網(wǎng)站的用戶作為服務(wù)對象,針對現(xiàn)在網(wǎng)絡(luò)爬蟲中存在的問題,開發(fā)一套基于Scrapy的網(wǎng)絡(luò)爬蟲,方便用戶對新聞類的信息進行獲取,節(jié)省用戶的時間,提高新聞類信息的獲取效率。3.2系統(tǒng)可行性分析3.2.1技術(shù)可行性開發(fā)系統(tǒng)采用Windows10操作系統(tǒng),為了讓本系統(tǒng)可以跨平臺進行搭建,系統(tǒng)開發(fā)選擇Python體系。爬蟲框架采用Scrapy框架進行搭建,利用眾多技術(shù)進行開發(fā),例如Xpath、HTML等。數(shù)據(jù)庫采用Redis和MongoDB,Redis做分布式,MongoDB做數(shù)據(jù)的存儲。本系統(tǒng)開發(fā)的是一套分布式爬蟲系統(tǒng),滿足給關(guān)系型數(shù)據(jù)庫的使用條件。所以采用Redis和MongoDB作為本系統(tǒng)的數(shù)據(jù)庫。3.2.2經(jīng)濟可行性在整個系統(tǒng)的實現(xiàn)過程中,設(shè)計與開發(fā)成本極低,投入的開發(fā)成員與物理條件極少。軟件方面,所采用的技術(shù)和軟件大部分為免費開源版本,因此整套系統(tǒng)的開發(fā)成本幾乎為0;硬件方面,個人主機完全滿足本系統(tǒng)的開發(fā)需求,硬件配置方面建議,運行內(nèi)存滿足8G及以上,處理器方面建議I5及以上。3.2.3操作可行性為了使用戶在操作該系統(tǒng)時方便、快捷且容易上手。在閱讀相關(guān)資料后,針對同類系統(tǒng)在使用過程中存在的一些問題,對該系統(tǒng)的設(shè)計進行一些相應(yīng)的處理。頁面采用極簡思想進行設(shè)計。降低頁面操作復(fù)雜度,使頁面簡潔直觀,方便用戶使用。通過將查詢部分直接通過NOSQL語句進行處理,提高頁面響應(yīng)速度,提高用戶使用體驗。本系統(tǒng)的目標在于讓用戶能夠快速獲取到自己所需要的信息,所以在頁面設(shè)計上要求能夠直觀的顯示新聞內(nèi)容。通過顯示分類來引導(dǎo)用戶,且不需要用戶提供任何信息,做到每個人都可以便利地去使用本系統(tǒng)。3.3功能需求分析本系統(tǒng)重點在于對新聞類網(wǎng)站的爬取,根據(jù)特殊字段的設(shè)計來爬取所需要的內(nèi)容,過濾掉無用內(nèi)容。并通過redis數(shù)據(jù)庫進行分布式的部署,使其他機器也可以對爬取到的鏈接進行處理,爬取到相應(yīng)數(shù)據(jù)并上傳至redis,再將redis上的數(shù)據(jù)存入mongoDB數(shù)據(jù)庫來實現(xiàn)數(shù)據(jù)的保存。最后將數(shù)據(jù)庫的內(nèi)容顯示到網(wǎng)站上,實現(xiàn)可視化以供用戶們使用。根據(jù)上述系統(tǒng)的功能需求分析,設(shè)計系統(tǒng)整體功能模塊圖,如圖3-1所示。圖3-1系統(tǒng)功能結(jié)構(gòu)圖從圖3-1中可看出,本系統(tǒng)分為爬蟲系統(tǒng)和顯示系統(tǒng)2個子系統(tǒng),其中爬蟲系統(tǒng)主要實現(xiàn)數(shù)據(jù)采集、數(shù)據(jù)清洗、數(shù)據(jù)存儲功能。顯示系統(tǒng)主要實現(xiàn)數(shù)據(jù)顯示、數(shù)據(jù)統(tǒng)計分析功能(1)數(shù)據(jù)采集模塊該模塊重點在于對新浪網(wǎng)的網(wǎng)站結(jié)構(gòu)進行分析,實現(xiàn)爬蟲策略,對內(nèi)容數(shù)據(jù)字段進行設(shè)計,實現(xiàn)數(shù)據(jù)的增量爬取、去重。通過Scrpay框架,實現(xiàn)對新浪等新聞類網(wǎng)站的爬取。(2)數(shù)據(jù)清洗模塊該模塊重點在于通過對特殊字段的設(shè)計,過濾掉不需要的內(nèi)容,只爬取所需要的新聞內(nèi)容,降低爬蟲系統(tǒng)的負荷。通過Panda函數(shù)對數(shù)據(jù)進行清洗和處理,并對對采集結(jié)果進行格式轉(zhuǎn)換。(3)數(shù)據(jù)存儲模塊該模塊重點在于對爬取到的數(shù)據(jù)進行存儲。根據(jù)爬蟲模塊爬取到的數(shù)據(jù),將url存儲在Redis數(shù)據(jù)庫中供爬蟲機器使用,爬蟲機器通過redis數(shù)據(jù)庫中的url進行網(wǎng)站的爬取,實現(xiàn)分布式爬取技術(shù),并將爬取到的數(shù)據(jù)存儲進本地mongoDB數(shù)據(jù)庫中實現(xiàn)數(shù)據(jù)的本地存儲。(4)數(shù)據(jù)統(tǒng)計分析模塊該模塊重點在于對爬取到的數(shù)據(jù)進行分析統(tǒng)計,將各個類別的新聞進行分類。(5)數(shù)據(jù)顯示模塊該模塊重點在于實現(xiàn)數(shù)據(jù)的可視化分類顯示,顯示各個新聞的標題以及詳細內(nèi)容。3.4本章小結(jié)本章對本系統(tǒng)的可行性分析以及需求分析進行了介紹??尚行苑治鰪募夹g(shù)可行性、經(jīng)濟可行性、操作可行性上對本系統(tǒng)進行介紹。需求分析從整個系統(tǒng)功能模塊出發(fā),分析了該系統(tǒng)所要完成的模塊以及各個模塊的功能,確保在開發(fā)過程中能夠滿足用戶需求。4系統(tǒng)設(shè)計4.1系統(tǒng)總體設(shè)計4.2.1系統(tǒng)邏輯設(shè)計通過功能需求分析可知,本系統(tǒng)是一個從互聯(lián)網(wǎng)上對新聞類網(wǎng)站的各類別新聞進行抓取,并保存在數(shù)據(jù)庫中的一個系統(tǒng)。本系統(tǒng)邏輯結(jié)構(gòu)如圖4-1所示。圖4-1系統(tǒng)邏輯結(jié)構(gòu)4.2.2系統(tǒng)工作流程本系統(tǒng)無需登錄,直接打開頁面即可訪問所爬取到的所有數(shù)據(jù),爬取結(jié)束后會將爬取到的具體數(shù)據(jù)內(nèi)容顯示在界面,其工作流程如圖4-2所示:圖4-2系統(tǒng)工作流程4.2系統(tǒng)功能模塊4.2.1數(shù)據(jù)采集模塊本系統(tǒng)選取的網(wǎng)站為新浪網(wǎng),初始URL為/guide/。在確定好URL后,通過Python的Scrapy模塊向網(wǎng)站發(fā)送請求下頁面,用以獲得網(wǎng)頁源代碼的相關(guān)信息。獲得源碼信息后,通過特定字段的設(shè)計與Xpath技術(shù)過濾掉不需要的內(nèi)容,只采集特定的內(nèi)容字段。4.2.2數(shù)據(jù)清洗模塊在對網(wǎng)頁的指定數(shù)據(jù)進行采集后,本系統(tǒng)通過數(shù)據(jù)清洗模塊對數(shù)據(jù)進行清洗,主要使用的方法為URL去重。本系統(tǒng)URL去重的主要實現(xiàn)思路為:通過數(shù)據(jù)庫的創(chuàng)建將已爬取到的URL保存下來,當新的URL被爬取時,通過與數(shù)據(jù)庫中的URL對比來判斷是否爬取到相同的頁面。如果相同,就將該URL丟棄,繼續(xù)爬取下一個并進行對比;如果不同,就將該URL保存下來,加入隊列中供爬蟲系統(tǒng)進行解析。4.3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫作為存儲內(nèi)容的工具,是系統(tǒng)的核心部分。本系統(tǒng)采用MongoDB數(shù)據(jù)庫對數(shù)據(jù)庫進行設(shè)計,通過設(shè)計好的字段直接將爬取到的相應(yīng)字段的內(nèi)容存儲進MongoDB數(shù)據(jù)庫中。為了提高信息的提取性能,應(yīng)該合理的對數(shù)據(jù)庫進行設(shè)計。本系統(tǒng)的具體思路是通過Python中的pymongo模塊對MongoDB數(shù)據(jù)庫進行操作。其執(zhí)行過程如圖4-3所示:圖4-3數(shù)據(jù)庫操作過程本系統(tǒng)創(chuàng)建的數(shù)據(jù)庫名為HN,在該數(shù)據(jù)庫下創(chuàng)建了用于保存數(shù)據(jù)的集合HN2,集合HN2的結(jié)構(gòu)如表4-1所示:序號字段名數(shù)據(jù)類型備注1_idobjectId唯一標識2article_urlString文章的鏈接3article_titleString文章的標題4article_contentString文章的內(nèi)容5parent_titleString大類的標題6parent_urlString大類的鏈接7subtitleString小類的標題8suburlString小類的鏈接9subpathString子類路徑4.3本章小結(jié)本章根據(jù)需求分析中確定的功能模塊,對系統(tǒng)中的邏輯設(shè)計以及工作流程進行了介紹,以及對數(shù)據(jù)庫的設(shè)計,對數(shù)據(jù)的存儲進行了相應(yīng)的介紹。5系統(tǒng)實現(xiàn)5.1爬蟲模塊本系統(tǒng)的爬蟲功能實現(xiàn)如圖5-1所示:圖5-1爬蟲模塊功能實現(xiàn)流程圖5.1.1數(shù)據(jù)采集模塊本系統(tǒng)選取的網(wǎng)站為“新浪網(wǎng)”,通過分析該網(wǎng)站結(jié)構(gòu),對頁面進行相應(yīng)的爬取。具體爬取手段為通過Xpath技術(shù)和正則表達式獲取大類的標題以及鏈接,接下來獲取小類的標題和鏈接。然后爬取所有大類下的連接以及小類下的鏈接,判斷該小類屬于哪一個大類,對所有新聞進行具體分類,最后處理爬取到的所有鏈接,獲得爬取內(nèi)容。具體實現(xiàn)頁面如圖5-2所示:圖5-2數(shù)據(jù)采集模塊實現(xiàn)5.2.2數(shù)據(jù)清洗模塊在爬取到頁面的特定內(nèi)容后,本系統(tǒng)通過URL去重的方式對數(shù)據(jù)進行清洗,通過創(chuàng)建數(shù)據(jù)庫采集URL隊列,將新爬取的URL與隊列中的URL進行對比來判斷頁面是否重復(fù),如果重復(fù),則丟棄該URL,繼續(xù)爬取下一個,若不重復(fù),則將該URL放入URL隊列中以供處理。頁面URL隊列如圖5-3所示:圖5-3數(shù)據(jù)清洗模塊實現(xiàn)5.2.3數(shù)據(jù)存儲模塊通過分析網(wǎng)站結(jié)構(gòu),設(shè)計內(nèi)容字段對新聞網(wǎng)站進行爬取,對爬取到的結(jié)果進行清洗與處理并將最終獲得的內(nèi)容存儲進本地數(shù)據(jù)庫中。數(shù)據(jù)存儲模塊采用MongoDB數(shù)據(jù)庫進行存儲,采用Python中的pymongo模塊對MongoDB數(shù)據(jù)庫進行操作,通過設(shè)計好的字段直接將爬取到的相應(yīng)字段的內(nèi)容存儲進MongoDB數(shù)據(jù)庫中。存儲內(nèi)容如圖5-4所示:圖5-4爬取內(nèi)容界面5.2可視化模塊5.2.1頁面統(tǒng)計展示模塊通過jsp對爬取到的各類別的內(nèi)容數(shù)進行統(tǒng)計,并根據(jù)所有分類進行索引的創(chuàng)建,顯示在頁面的左側(cè)邊欄內(nèi)。通過點擊分類,顯示該類別內(nèi)容的總數(shù)以及對應(yīng)的文章標題。具體統(tǒng)計展示如圖5-5所示圖5-5頁面統(tǒng)計展示界面5.2.2新聞內(nèi)容模塊新聞內(nèi)容模塊主要負責新聞的詳細顯示,通過簡潔的界面方便用戶進行新聞的查看。通過點擊新聞標題,跳轉(zhuǎn)至對應(yīng)的詳細內(nèi)容頁面,通過點擊返回上一級即可返回至標題頁面。內(nèi)容顯示頁面如圖5-6所示。圖5-6新聞詳細內(nèi)容頁面5.3本章小結(jié)本章主要對系統(tǒng)的實現(xiàn)過程進行了介紹,首先對爬蟲模塊進行了介紹,然后對系統(tǒng)的可視化功能進行了介紹,包括分類功能的實現(xiàn),各個分類數(shù)據(jù)量統(tǒng)計的實現(xiàn)以及新聞詳細內(nèi)容的實現(xiàn)。6系統(tǒng)測試6.1測試目的軟件測試是人工的,或通過使用工具來自動的運行被測軟件系統(tǒng),或靜態(tài)檢查被測軟件系統(tǒng)的過程,其目的在于校驗被測軟件系統(tǒng)是否滿足需求,或要弄清楚實際的系統(tǒng)輸出與預(yù)期系統(tǒng)輸出之間的差異。測試的目的在于及時發(fā)現(xiàn)軟件中存在的錯誤或者缺陷,通過修復(fù)問題與缺陷使程序能夠符合設(shè)計要求。6.2測試方法本系統(tǒng)采用黑盒測試與白盒測試對系統(tǒng)進行測試,采用的測試方法有單元測試、集成測試、系統(tǒng)測試。在軟件的開發(fā)過程中,會對每個完成的功能模塊進行單元測試,通過系統(tǒng)實際輸出與預(yù)期輸出的對比來判斷該模塊是否正確。當各個單元的測試完成后,需要對單元進行集成,并進行相應(yīng)的集成測試,通過集成測試來檢查各個單元間的集成是否符合需求。集成測試完成后要對系統(tǒng)進行部署,并進行系統(tǒng)測試,來判斷該系統(tǒng)在各類環(huán)境下能否正常運行。整個系統(tǒng)完成開發(fā)后,則需要通過黑盒測試法來對系統(tǒng)的整個功能進行測試。黑盒測試相當于把系統(tǒng)看作一個黑盒子,不考慮其內(nèi)部邏輯結(jié)構(gòu)以及代碼。只通過對程序輸入來獲得輸出,并將實際輸出與預(yù)期輸出進行比較,來判斷該功能是否符合需求,從而發(fā)現(xiàn)系統(tǒng)中存在的錯誤與缺陷。6.3測試用例可視化測試。測試系統(tǒng)的可視化模塊能否正常運行以及能否達到預(yù)期需求。測試數(shù)據(jù)見表6-1。表6-1可視化測試用例表用例編號用例名稱測試過程期望結(jié)果實際結(jié)果結(jié)果對比001收藏分類顯示點擊收藏分類顯示收藏分類下的二級分類與收藏類新聞顯示收藏分類下的二級分類與收藏類新聞符合期望002圖片分類顯示點擊圖片分類顯示圖片分類下的二級分類與圖片類新聞顯示圖片分類下的二級分類與圖片類新聞符合期望003教育分類顯示點擊教育分類顯示教育分類下的二級分類與教育類新聞顯示教育分類下的二級分類與教育類新聞符合期望004旅游分類顯示點擊旅游分類顯示旅游分類下的二級分類與旅游類新聞顯示旅游分類下的二級分類與旅游類新聞符合期望005游戲分類顯示點擊游戲分類顯示游戲分類下的二級分類與游戲類新聞顯示游戲分類下的二級分類與游戲類新聞符合期望006科技分類顯示點擊科技分類顯示科技分類下的二級分類與科技類新聞顯示科技分類下的二級分類與科技類新聞符合期望007佛學分類顯示點擊佛學分類顯示佛學分類下的二級分類與佛學類新聞顯示佛學分類下的二級分類與佛學類新聞符合期望008女性分類顯示點擊女性分類顯示女性分類下的二級分類與女性類新聞顯示女性分類下的二級分類與女性類新聞符合期望009時尚分類顯示點擊時尚分類顯示時尚分類下的二級分類與時尚類新聞顯示時尚分類下的二級分類與時尚類新聞符合期望010拍賣分類顯示點擊收藏分類下的拍賣顯示拍賣類新聞的標題顯示拍賣類新聞的標題符合期望011外語分類顯示點擊教育分類下的外語顯示外語類新聞的標題顯示外語類新聞的標題符合期望012會計分類顯示點擊教育分類下的會計顯示會計類新聞的標題顯示會計類新聞的標題符合期望013考研分類顯示點擊教育分類下的考研顯示考研類新聞的標題顯示考研類新聞的標題符合期望014解夢分類顯示點擊星座分類下的解夢顯示解夢類新聞的標題顯示解夢類新聞的標題符合期望015早教分類顯示點擊育兒分類下的早教顯示早教類新聞的標題顯示早教類新聞的標題符合期望016基金分類顯示點擊財經(jīng)分類下的基金顯示基金類新聞的標題顯示基金類新聞的標題符合期望017股票分類顯示點擊股票分類下的拍賣顯示股票類新聞的標題顯示股票類新聞的標題符合期望018黃金分類顯示點擊財經(jīng)分類下的黃金顯示黃金類新聞的標題顯示黃金類新聞的標題符合期望019詳細內(nèi)容顯示點擊新聞標題顯示新聞詳細內(nèi)容顯示新聞詳細內(nèi)容符合期望6.4本章小結(jié)本章主要對系統(tǒng)的功能進行了詳細測試,通過對期望輸出與實際輸出的對比,確定本系統(tǒng)的功能在測試的過程中沒有發(fā)現(xiàn)問題,目前的業(yè)務(wù)邏輯可以實現(xiàn)本系統(tǒng)所需要完成的功能。網(wǎng)頁顯示直觀,用戶可以通過簡單的點擊,獲取到想要的新聞內(nèi)容。7總結(jié)與展望7.1總結(jié)隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的人通過互聯(lián)網(wǎng)獲取每日新聞內(nèi)容。但是,隨著互聯(lián)網(wǎng)的高速發(fā)展下,互聯(lián)網(wǎng)上的信息也存在著數(shù)量繁多,范圍廣泛,重復(fù)率過高等問題。由于目前的搜索引擎往往通過模糊匹配的方式來顯示與用戶搜索內(nèi)容所相關(guān)的信息,導(dǎo)致部分用戶無法通過搜索引擎快速的得到他們所需求的特定內(nèi)容。對于部分用戶的一些具體化、精細化的需求,就需要這樣一個網(wǎng)絡(luò)爬蟲,可以實時爬取新聞類網(wǎng)站的信息,并根據(jù)爬取的內(nèi)容將新聞進行分類,通過分類進行展示并統(tǒng)計出各個分類下的新聞總數(shù),使用戶可以快速獲取到想要的新聞內(nèi)容,大大的減少了用戶查詢新聞的時間,使整個新聞瀏覽過程變得非常便利。本文的主要工作內(nèi)容如下:(1)以爬蟲系統(tǒng)的研究背景為起點,對國內(nèi)外現(xiàn)狀進行研究,借鑒一些已有的研究成果與相關(guān)文獻,通過分析已有成果所存在的缺陷來確定研究的目標與具體內(nèi)容。(2)對本系統(tǒng)開發(fā)所用到的技術(shù)進行大概介紹,并詳細分析這些技術(shù)所實現(xiàn)的功能,選擇最適合的技術(shù)進行系統(tǒng)的開發(fā)。(3)分別從經(jīng)濟可行性、技術(shù)可行性以及操作可行性上對本系統(tǒng)進行分析。對爬蟲模塊、數(shù)據(jù)清洗模塊、數(shù)據(jù)存儲模塊、數(shù)據(jù)統(tǒng)計分析模塊、數(shù)據(jù)顯示模塊進行詳細分析。在此基礎(chǔ)上對本系統(tǒng)的功能與需求進行分析,提出了本系統(tǒng)的各個模塊的功能的詳細信息。(4)在系統(tǒng)設(shè)計上采用三層架構(gòu)對本系統(tǒng)進行搭建,并對各層的功能進行了概要介紹。對數(shù)據(jù)庫的設(shè)計進行了介紹。(5)在系統(tǒng)實現(xiàn)部分中,對系統(tǒng)的各個功能模塊進行了介紹,并對各個模塊的實現(xiàn)思路以及所用到的技術(shù)進行了簡要的介紹。(6)在系統(tǒng)測試部分,通過對本系統(tǒng)的分類顯示功能,分類統(tǒng)計功能,標題顯示功能以及詳細內(nèi)容顯示功能進行測試,確認本系統(tǒng)滿足設(shè)計要求,符合預(yù)期目標。7.2展望隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)站的日益增多以及用戶對于通過網(wǎng)絡(luò)獲取信息的需求,設(shè)計本系統(tǒng)來完成對新聞類網(wǎng)站的爬取與顯示,使用戶能夠更快速的獲取到自己想要的新聞內(nèi)容。但由于本系統(tǒng)在開發(fā)階段存在的時間以及人力方面的問題,還存在一些不足,在后續(xù)的開發(fā)中,計劃能夠完成以下內(nèi)容。(1)爬取網(wǎng)站擴充對于一個新聞類網(wǎng)站的爬蟲系統(tǒng)來說,不應(yīng)只將爬取對象設(shè)計為單個網(wǎng)站,應(yīng)該要通過合適的字段設(shè)計,能夠爬取到各類新聞網(wǎng)站的新聞內(nèi)容,如華商網(wǎng),人民日報等,這樣才能夠滿足更多用戶的需求。(2)功能擴充對于本系統(tǒng)的可視化部分還可以有更多的功能來使它更加完善,例如增加搜索欄、統(tǒng)計每天
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中藥炮制工中級習題庫及參考答案
- 接觸網(wǎng)中級工練習題及答案
- 中國刨削系統(tǒng)項目投資可行性研究報告
- 中國醫(yī)用射波刀行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 統(tǒng)計站工作總結(jié)
- 護士年度考核總結(jié)
- 酒店話務(wù)員個人總結(jié)
- 食品公司質(zhì)量體系運行總結(jié)
- 醫(yī)院信息化建設(shè)項目可行性研究報告
- Triptolide-Standard-生命科學試劑-MCE
- 軟件開發(fā)項目工作量及報價模板
- 八年級上冊英語閱讀還原50題-含答案
- 中國鋁業(yè)股份有限公司鞏義市齊興鋁土礦礦產(chǎn)資源開采與生態(tài)修復(fù)方案
- 腹膜透析相關(guān)性腹膜炎的護理查房
- 網(wǎng)優(yōu)案例匯總
- 病毒性心肌炎病歷模板
- 倉庫每日檢查記錄表倉庫每日檢查內(nèi)容及每日巡查事項
- 唐詩長恨歌白居易注音版
- (8.2)-7.2舞臺服裝設(shè)計-舞臺服裝色彩
- 早產(chǎn)兒視網(wǎng)膜病變
- 矮小癥診治指南
評論
0/150
提交評論