国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Storm的可擴展的分布式網(wǎng)絡爬蟲系統(tǒng)設計研究

2024-09-04 00:00:00池國俊
電腦知識與技術(shù) 2024年20期

關(guān)鍵詞:Storm;可擴展;分布式;網(wǎng)絡爬蟲;系統(tǒng)設計

0 引言

在互聯(lián)網(wǎng)時代背景下,大量新型商業(yè)模式被廣泛應用于互聯(lián)網(wǎng)領域中,造成互聯(lián)網(wǎng)上所創(chuàng)建的站點數(shù)量急劇增加,導致互聯(lián)網(wǎng)上的信息資源呈現(xiàn)出指數(shù)型爆炸式增長。在海量互聯(lián)網(wǎng)信息資源中,人們?nèi)粝肟焖贆z索和查閱自己感興趣的網(wǎng)絡資源,必須加強對網(wǎng)絡爬蟲技術(shù)的應用[1]。然而,傳統(tǒng)單機網(wǎng)絡爬蟲技術(shù)過于落后,難以滿足現(xiàn)代化日益增長的數(shù)據(jù)抓取使用需求。分布式網(wǎng)絡爬蟲系統(tǒng)的設計和應用可以解決上述問題,該系統(tǒng)主要應用Storm云平臺,確保多臺機器在運行期間能夠高效地分工合作,使得網(wǎng)絡爬蟲速率和性能不斷提升。因此,在Storm云平臺的應用背景下,強化對新型分布式網(wǎng)絡爬蟲系統(tǒng)設計和實現(xiàn)的研究顯得尤為重要。

1 提出問題

傳統(tǒng)單機網(wǎng)絡爬蟲技術(shù)因過于落后,難以滿足現(xiàn)代化日益增長的數(shù)據(jù)抓取使用需求。而分布式網(wǎng)絡爬蟲系統(tǒng)的設計和應用可以解決以上問題,該系統(tǒng)主要應用Storm云平臺,確保多臺機器在運行期間,能夠高效地分工合作,使得網(wǎng)絡爬蟲速率和性能不斷提升。

2 具體設計方案

2.1 系統(tǒng)設計原則與關(guān)鍵技術(shù)

2.1.1 系統(tǒng)設計原則

該系統(tǒng)設計目的是提高分布式網(wǎng)絡爬蟲的速度和性能,為用戶打造安全可靠的網(wǎng)絡環(huán)境。因此,系統(tǒng)設計應遵循以下幾個原則:1) 效率性原則。通過提升系統(tǒng)效率,避免因系統(tǒng)運行過慢而降低用戶體驗。為滿足系統(tǒng)效率性需求,應將系統(tǒng)內(nèi)部網(wǎng)絡帶寬設置在萬兆以上,避免因網(wǎng)絡運行緩慢而降低系統(tǒng)整體運行效率。2) 可靠性原則。系統(tǒng)可靠性主要是指系統(tǒng)正常執(zhí)行一段時間所對應的概率,系統(tǒng)實際運行過程中,如果出現(xiàn)非法輸入數(shù)據(jù)行為,或者某硬件部分出現(xiàn)異常問題,此時,系統(tǒng)仍然繼續(xù)穩(wěn)定執(zhí)行相關(guān)功能的概率,通過提高系統(tǒng)可靠性,可以確保系統(tǒng)能夠正常、穩(wěn)定、安全地運行。3) 安全性原則。系統(tǒng)安全性需求主要涉及數(shù)據(jù)預防丟失、禁止網(wǎng)絡病毒入侵系統(tǒng)等,通過對系統(tǒng)進行安全化設計,可以實現(xiàn)對系統(tǒng)數(shù)據(jù)訪問流程的保護,避免系統(tǒng)數(shù)據(jù)出現(xiàn)丟失、泄露等風險,同時,還要加強對系統(tǒng)權(quán)限安全化管理,避免因出現(xiàn)非法人員登錄和訪問該系統(tǒng)造成重要系統(tǒng)數(shù)據(jù)丟失。

2.1.2 Storm 云平臺

Storm的出現(xiàn)填補了這一空白。Storm云平臺由Nathan Marz開發(fā),后被Twitter收購。收購后,Twitter 將Storm開源,隨后社區(qū)越來活躍,使用者越來越多,名聲大噪,被很多企業(yè)采納使用,甚至很多被用于二次開發(fā),催生了許多優(yōu)秀產(chǎn)品。Storm主打計算實時流數(shù)據(jù),使得對源源不斷的流數(shù)據(jù)處理起來變得更加方便,彌補了Hadoop批處理在實時數(shù)據(jù)的低效性[2]。

2.2 系統(tǒng)總體設計

2.2.1 系統(tǒng)框架設計

應用本文系統(tǒng)抓取新浪微博平臺數(shù)據(jù)時,首先,利用Storm云平臺對網(wǎng)絡爬蟲相關(guān)數(shù)據(jù)進行抓取,隨后,將抓取好的數(shù)據(jù)安全傳輸并存儲至分布式數(shù)據(jù)庫中,為后期的聚類、分類等業(yè)務處理提供依據(jù)。與傳統(tǒng)單機網(wǎng)絡爬蟲技術(shù)相比,本文系統(tǒng)具有數(shù)據(jù)處理速度快、容錯性高等優(yōu)勢。本文系統(tǒng)總體框架如圖1所示,從圖1中可以看出,本文系統(tǒng)主要包含種子URL 文檔、模擬登錄、URL優(yōu)化鏈接、網(wǎng)頁下載等模塊,這些模塊既相互獨立又相互聯(lián)系,在實際運行期間分工明確[3]。

2.2.2 系統(tǒng)數(shù)據(jù)庫設計

當網(wǎng)絡數(shù)據(jù)被成功抓取后,需將抓取的數(shù)據(jù)存儲到數(shù)據(jù)庫中,以便后期相關(guān)人員查看和調(diào)用。因此,在進行本文系統(tǒng)設計期間,要重視對系統(tǒng)數(shù)據(jù)庫的設計。系統(tǒng)數(shù)據(jù)庫中包含多種數(shù)據(jù)表,為保證數(shù)據(jù)庫設計質(zhì)量,本文重點設計了搜索結(jié)果表、用戶信息表、微博評論信息表、微博轉(zhuǎn)發(fā)信息表等數(shù)據(jù)表[4]。其中,搜索結(jié)果表包含微博發(fā)表時間、微博發(fā)表設備、微博地址、微博內(nèi)容等屬性;用戶信息表包含用戶姓名、用戶昵稱、用戶地址、用戶粉絲數(shù)、用戶微博數(shù)、用戶關(guān)注數(shù)等屬性;微博評論信息表主要包含微博評論內(nèi)容、評論時間、被點贊次數(shù)等屬性;微博轉(zhuǎn)發(fā)信息表主要包含微博轉(zhuǎn)發(fā)時間、微博轉(zhuǎn)發(fā)次數(shù)、微博點贊次數(shù)、微博URL地址等屬性。

另外,為確保所設計的數(shù)據(jù)庫能更好地滿足數(shù)據(jù)的增刪改查操作,現(xiàn)將數(shù)據(jù)庫操作封裝類的主要代碼編寫如下:

2.3 系統(tǒng)模塊設計

2.3.1 種子URL 文檔模塊

首先初始化種子URL文檔。Storm集群在Topol?ogy的Spout中將該種子URL讀入集群中,作為網(wǎng)絡爬蟲的入口。在該Topology中,Spout為系統(tǒng)消息讀入的接口,因此種子URL在該Spout中的nextTuple()函數(shù)中發(fā)送給下一個Bolt來處理。Storm的Topology在初始化的時候會先初始化open()函數(shù),因此種子URL可以在該函數(shù)中直接獲取[5]。

2.3.2 模擬登錄模塊設計

模擬登錄模塊是使用程序模擬真實新浪微博用戶來登錄新浪微博平臺,目的是獲取Cookie。其中,需要跟新浪微博身份認證平臺進行一系列的交互。

2.3.3 URL 優(yōu)化鏈接模塊

URL優(yōu)化鏈接的具體流程如圖2所示。從圖2中可以看出,首先獲取微博URL,通過應用Chrome瀏覽器開發(fā)工具快速查找和獲取微博URL地址(如:http://weibo. com/aj/v6/comment/big? id=3817652743101226&page=2) 。其次,獲取微博ID。結(jié)合所獲取的微博URL,不難發(fā)現(xiàn)微博的唯一ID為“3817652743101226”。最后,對獲取的微博URL地址進行轉(zhuǎn)化,使其轉(zhuǎn)化為某條微博評論或者轉(zhuǎn)發(fā)期間可以翻頁的地址,該地址可被新浪微博平臺快速識別和獲取[6]。

2.3.4 網(wǎng)頁下載模塊設計

在設計網(wǎng)頁下載模塊時,為提高網(wǎng)頁下載速度,須運用多線程思想。具體操作包括:使用線程連接池對線程進行統(tǒng)一管理,減少線程的創(chuàng)建或者銷毀,從而達到提高系統(tǒng)程序執(zhí)行性能的目的。在進行網(wǎng)頁信息抓取時,要運用get請求,當get請求發(fā)送結(jié)束后,從新浪微博平臺中抓取和查找HTTP狀態(tài)響應值。針對所獲取的狀態(tài)響應值進行個性化操作和處理。當響應碼顯示為“200”,說明本文系統(tǒng)服務器成功接收和發(fā)送get請求,并成功返回相應的響應數(shù)據(jù),此時網(wǎng)頁下載成功[7]。

2.3.5 網(wǎng)頁解析模塊設計

運用網(wǎng)頁下載模塊,所下載的網(wǎng)頁通常含有冗余、無利用價值的數(shù)據(jù),此時,需要將所下載好的原始網(wǎng)頁數(shù)據(jù)傳輸和發(fā)送至網(wǎng)頁解析模塊,由網(wǎng)頁解析模塊對這些數(shù)據(jù)進行篩選解析處理。在設計網(wǎng)頁解析模塊時,通常會用到HTML文檔解析器。該解析模塊所解析內(nèi)容主要包含以下兩個部分:1) 從網(wǎng)頁中,解析出所需要的URL鏈接,然后,將該鏈接發(fā)送和傳輸至URL鏈接優(yōu)化模塊中,由URL鏈接優(yōu)化模塊對該鏈接進行優(yōu)化處理,并將最終優(yōu)化處理結(jié)果發(fā)送和存儲至數(shù)據(jù)庫中[8]。2) 從網(wǎng)頁中解析出微博評論等所需數(shù)據(jù)。總之,網(wǎng)頁解析模塊用于對微博數(shù)據(jù)、微博用戶數(shù)據(jù)、微博轉(zhuǎn)發(fā)數(shù)據(jù)等多種數(shù)據(jù)的統(tǒng)一解析處理。

2.3.6 數(shù)據(jù)存儲模塊設計

在設計數(shù)據(jù)存儲模塊時,需要使用Java來操作分布式數(shù)據(jù)庫,需要在工程中添加mongojavadriver2.9.3.jar依賴,而后可以通過程序來對分布式數(shù)據(jù)庫進行增刪改查等操作。在操作整個集群的時候,由于仲裁節(jié)點不存儲數(shù)據(jù),只負責投票,因此前端不需要連接到仲裁節(jié)點。在分布式數(shù)據(jù)庫中建立一個名為“的數(shù)據(jù)庫,然后連接到數(shù)據(jù)庫中具體的集合。

3 設計方案執(zhí)行效果

3.1 Storm 集群環(huán)境搭建

在Storm集群中,含有三個節(jié)點,這些節(jié)點主要運行于Nimbus、Supervisor后臺程序中。在搭建Storm集群環(huán)境時,需要在下載和安裝Zookeeper集群的基礎上,做好對Storm相關(guān)參數(shù)的配置,然后,啟動所創(chuàng)建好的Storm集群。

3.2 系統(tǒng)功能測試

為測試系統(tǒng)功能實現(xiàn)效果,本文以“新浪微博”為應用場景,通過對“地震”“傷亡”關(guān)鍵字眼進行主題搜索,從微博數(shù)據(jù)、用戶數(shù)據(jù)兩個角度分析,測試系統(tǒng)所抓取信息數(shù)據(jù)情況。通過搜索以上關(guān)鍵字眼,系統(tǒng)會自動呈現(xiàn)出2 000條微博數(shù)據(jù),即2 000個用戶發(fā)表了2 000條微博數(shù)據(jù)。通過查看分布式數(shù)據(jù)庫,獲得如表1所示的文檔數(shù)。

從表1中的數(shù)據(jù)可以看出,本文系統(tǒng)抓取準確率達到百分之百,這說明新浪微博中“地震”“傷亡”不同主題下的各項數(shù)據(jù)均成功抓取。因此,本文系統(tǒng)所含有的模擬登錄、網(wǎng)頁下載、數(shù)據(jù)存儲等功能模塊可以正常、穩(wěn)定地運行。

為測試和驗證本文系統(tǒng)在抓取微博評論信息、微博轉(zhuǎn)發(fā)信息方面的性能,以“某一條微博”為案例,該條微博含有19 890條微博轉(zhuǎn)發(fā)量和19 190條微博評論量,通過調(diào)用分布式數(shù)據(jù)庫查看轉(zhuǎn)發(fā)信息和評論信息所對應的文檔數(shù),獲得如表2所示的查看結(jié)果。

從表2中的數(shù)據(jù)可以看出,本文系統(tǒng)抓取準確率達到百分之百,這說明本文系統(tǒng)全部下載所有評論數(shù)、轉(zhuǎn)發(fā)數(shù)。因此,本文系統(tǒng)通過利用微博的UR地址,可以成功抓取和獲得所有微博的評論數(shù)和轉(zhuǎn)發(fā)數(shù),具有穩(wěn)定可靠、數(shù)據(jù)處理能力強等特點。

4 結(jié)束語

綜上所述,本文所設計的分布式網(wǎng)絡爬蟲系統(tǒng)主要運用Storm云平臺,該云平臺具有強大的在功能拓展性和并行處理能力等特性,通過運用Storm云平臺這些特性,可以最大限度地提高分布式網(wǎng)絡爬蟲速度和性能。本文系統(tǒng)在具體設計時,選用“新浪微博”這一應用場景,通過抓取新浪微博平臺相關(guān)數(shù)據(jù),并將所抓取好的數(shù)據(jù)安全、可靠地存儲到指定的數(shù)據(jù)庫中,方便其他人員查看和調(diào)用??傊?,本文提出的基于Storm可擴展的分布式網(wǎng)絡爬蟲系統(tǒng)設計方案具有較高的有效性和可靠性;實現(xiàn)對系統(tǒng)種子URL文檔、模擬登錄、URL優(yōu)化鏈接、網(wǎng)頁下載等多個模塊的成功設計和開發(fā),保證系統(tǒng)各功能模塊運行安全性和可靠性,符合預期設計標準和要求,值得被進一步推廣和應用。

永春县| 招远市| 隆回县| 诸城市| 哈巴河县| 永清县| 四子王旗| 蓝田县| 监利县| 合江县| 鹿泉市| 禹州市| 涟水县| 日土县| 灵丘县| 太和县| 南岸区| 土默特左旗| 鄂托克前旗| 南汇区| 松滋市| 东平县| 临桂县| 简阳市| 紫金县| 柘城县| 德安县| 丰镇市| 西藏| 潞西市| 双峰县| 甘南县| 福贡县| 衡水市| 柘荣县| 石河子市| 许昌市| 宜昌市| 册亨县| 垫江县| 泗阳县|