999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ICE的分布式爬蟲設計與實現

2015-12-02 02:28:46雷滋和陶宏才
成都信息工程大學學報 2015年6期
關鍵詞:用戶系統

雷滋和, 陶宏才

(西南交通大學信息科學與技術學院,四川成都611756)

0 引言

隨著移動智能和互聯網信息技術的飛速發展,近年來,Twitter、Facebook、新浪微博為代表的社交網絡[1]的出現和快速發展深深地影響了人們的交流方式,成為生活中不可或缺的一部分。社交網絡集交友、傳媒、電商等多種功能于一體,吸引了不同年齡段、不同性別、不同職業、不同國籍的大量用戶。

微博是一種社交網站,不過隨著快速發展及用戶的需求,已經逐漸演變成一種社會化自媒體。平臺中媒體用戶利用微博吸引關注,偶像明星利用微博保持和粉絲的交流,商家用戶利用微博發布一些促銷信息和商品廣告。草根用戶利用微博關注最新新聞和親朋好友的最新動態。微博平臺由于自身的一些特性,如簡潔性、傳播性、實時性等,吸引了大量用戶。

由于社交網絡吸引了大量用戶,因此,對社交網絡數據的分析管理也有很多研究。通過對微博數據的挖掘,可以分析預測用戶的愛好,獲取社會熱點新聞輿論,挖掘人際關系,預測信息傳播趨勢等。同時,通過挖掘用戶興趣,也可進行商業推廣等。不過,要做到上述這些數據的分析,最重要的一步就是需要進行數據采集。為此,針對新浪微博,采用中間件ICE,設計實現了一個分布式網絡爬蟲系統,以采集微博數據。

1 技術簡介

1.1 爬蟲技術

網絡爬蟲(Crawler)又稱為網頁蜘蛛,是一種按照某個規則自動從互聯網獲取信息資源的程序。爬蟲從一個或多個初始的頁面URL開始,通過分析源文件中的URL,提取出新的URL鏈接;然后又利用這些鏈接,繼續尋找新的鏈接。如此不斷循環,直至抓取和分析完所有頁面。作為搜索引擎和網絡數據挖掘的基礎組成部分,網絡爬蟲起著重要的數據采集作用。

早期的Google爬蟲由斯坦福大學設計[3]。該爬蟲由一個URL服務器將URL分發到若干爬蟲節點,各爬蟲通過單線程異步I/O方式爬取網頁。Mercator[4]爬蟲由康柏系統研究中心的 Allan Heydon和MarcNajork開發,采用多線程同步方式以及一些優化策略(如DNS緩沖、延遲存儲等)爬取網頁。國內也有機構對爬蟲進行研究,例如,北大天網[5]開發的分布式網絡爬蟲,采用兩階段哈希機制實現了億級數量的網頁爬取。

1.2 ICE中間件技術

ICE網絡通信引擎[6-7],是一種面向對象的高性能中間件,提供完善的、適合于異構網絡環境的分布式系統解決方案,包括庫、API和工具。

圖1 ICE邏輯結構圖

圖1展示了ICE客戶與服務器內部的邏輯結構圖,服務端與客戶端是由ICE核心庫、Slice接口的生成代碼以及應用程序代碼組成。ICE核心庫包含網絡通信、多線程等一些鏈接庫且提供了API接口,應用程序通過ICE API可訪問核心庫并進行事務管理。代理由Slice接口生成,主要有2個功能:(1)為客戶提供訪問服務端接口;(2)為數據傳輸提供整編和解編功能,整編將復雜的數據結構序列化,轉換為數據傳輸的標準形式,解編則將收到的數據反序列化。骨架亦由Slice接口生成,是代理在服務端的等價物,提供向上調用接口及整編和解編功能。對象適配器為ICE API之一,負責創建傳給客戶的代理,且將客戶端的請求轉換成服務端對應對象上的特定方法。

2 分布式爬蟲的設計實現

2.1 爬蟲基本結構

分布式爬蟲一般分為主從式和對等式2種結構,文中采用主從式結構進行分布式爬蟲的設計,系統分為服務端和客戶端。服務端能夠進行任務的調度與數據存儲,客戶端進行數據的爬取。客戶端與服務端進行通信時,文中采用ICE中間件技術進行通信。

圖2 分布式爬蟲框架

圖2給出整個爬蟲的架構圖。整個爬蟲框架主要分為3部分:

(1)消息中間件。為客戶端和服務端提供通信。

(2)爬蟲服務端。爬蟲服務端包括2個模塊:調度服務和存儲服務。調度服務端從任務列表中取出任務后,向爬蟲客戶端分發任務;存儲服務端負責將爬蟲爬取到的數據存儲到DB中。

(3)爬蟲客戶端。主要分布于各個節點上,爬蟲客戶端從調度服務器獲取任務,然后進行微博數據爬取,將爬取到的數據發送到存儲服務器,進行統一存儲。

框架通過ICE中間件技術,將各個功能模塊分布到各個Server上,各個模塊分工明確,并且不相互干擾。如若爬取更多數據,只需要增加爬蟲客戶端即可。

2.2 ICE中間件設計

作為一個面向對象的中間件平臺,ICE提供了一系列的工具、API和庫建立面向對象的客戶端和服務器的網絡通信,ICE適合在異構環境中應用,并且應用的源碼都可以移植。

圖3給出基于ICE應用程序的開發流程。系統開發時首先需要定制公共接口,其功能在服務端實現。通過接口,爬蟲客戶端可以向服務端發送請求,服務端根據接口的請求完成相應的操作。ICE通過Slice語言來編寫公共的接口文件,它是以一種獨立于特定編程語言的方式定義數據、接口、操作等,然后通過ICE內置編譯器轉換成特定語言的API。在編寫ICE應用時,均需進行Slice接口的定義。

圖3 開發流程

在爬蟲系統中,涉及到服務模塊在爬蟲系統中擔當著不同的任務,因此,這里給定2個Slice。表1給出涉及到的2個服務模塊同爬蟲客戶端的接口。

可以看到,在Slice中,定義爬蟲服務端與客戶端進行交互的數據類型以及相對應的接口。在Slice定義后,可以根據Slice生成相應的骨架和代理。ICE提供了生成骨架和代理的工具,基于Python語言,生成骨架和代理代碼如下:

Ice.loadSlice('scheduler_server.ice')

import weiboCrawler

通過loadSlice,即可將Slice語言轉換成骨架(或代理),在形成的骨架(或代理)中,不僅包含所定義的接口,源碼同時為客戶和服務器提供針對特定類型的運行時支持。在接口確定后,便可以進行爬蟲服務端和客戶端的開發。服務端實現接口中所定義的功能,客戶端通過代理,調用接口中的方法,便可在服務端執行對應的方法,實現與服務端的交互。需要說明的是,圖3中最下一層形成的即是圖2的分布式爬蟲框架。其中,用2個簡略的ICE框表示圖2中的中間件部分。

表1 調度服務模塊和存儲服務模塊的Slice接口

2.3 爬蟲服務端設計

由Slice生成的骨架類是一個抽象的接口類,在服務端進行設計時,需要繼承骨架類,并將對應接口的功能實現。爬蟲系統包含調度服務和存儲服務2個服務端。

2.3.1 調度服務

模塊為整個爬蟲系統的控制節點,整個爬蟲系統需要依賴此節點獲取爬取任務。客戶端通過接口獲取需要爬取的微博用戶ID,在爬取完畢后通過接口通知調度服務。因此,服務模塊與客戶端交互有2個接口:

getUser:爬蟲客戶端通過該接口獲取需要爬取的用戶ID。

putUser:爬蟲客戶端通過該接口通知調度服務某個微博用戶爬取完畢。

系統通過任務隊列的方式來實現任務的調度。在系統中,爬取一個微博用戶微博數據為一條任務,客戶端通過從服務端獲取所要爬取的微博用戶ID即任務ID對微博數據進行爬取。系統采用ICE內置數據庫Berkeley DB實現任務隊列。系統中涉及2個數據庫,一個用來存儲未爬取的用戶ID,另一個存儲已經爬取完畢的用戶ID。客戶端獲取時,都是從未爬取的數據庫中獲取需要爬取的用戶ID,通過2個數據庫,起到了任務隊列的作用。系統進行任務調度的主要流程為:啟動調度服務端,系統讀取未爬取的微博用戶ID到任務隊列;客戶端通過接口從服務端獲取任務;服務端從任務隊列取出任務ID,分發給客戶端;客戶端執行任務完畢,通知服務端,服務端將完成的任務ID存儲到數據庫中去。

2.3.2 存儲服務

模塊為爬蟲系統的存儲節點,所有爬蟲客戶端爬取的微博數據都會發送到本模塊進行存儲。模塊為爬蟲客戶端提供的接口為writeWB,客戶端通過調用該接口即可進行數據的存儲。

系統采用分布式數據庫Hbase[9]對爬取的微博數據存儲,HBase是一個分布式的、面向列的開源數據庫,適合非結構化數據存儲的數據庫。文中主要對微博數據的ID、內容、用戶ID、發布時間等字段存儲。系統中通過Thrift來對Hbase進行訪問,存儲微博數據。存儲微博數據的具體流程為:啟動 Hbase并啟動Hbase的Thrift服務;通過Thrift與Hbase建立服務;啟動爬蟲的存儲服務,爬蟲客戶端通過接口將爬取的微博數據發送到服務端;服務端接收到數據后,利用Thrift API將微博數據存儲于數據庫中去。

在調度服務和存儲服務完成對應功能后,均需要建立一個通信器(communicator),完成對ICE運行時服務的初始化。然后,創建一個對象適配器(adapter),并創建代理接口、設置代理標識,用以將客戶的請求映射到編程語言對象上的特定方法創建可以傳給客戶的代理。系統涉及2個標識,分別是調度服務和存儲服務,客戶端通過這2個標識可以識別對應的代理。設置好后,將代理增加到適配器中去。具體過程如下面代碼所示:

服務端在創建完畢后,通過適配器的activate方法將其激活,然后調用waitForShutdown方法啟動通信器,以響應和處理客戶端發出的連接請求。

2.4 爬蟲客戶端設計

在進行客戶端的功能開發時,客戶端需要與服務端取得通信。客戶端與服務端的一次通信過程為:創建通信器,初始化ICE運行時服務;通過服務端地址和代理標識,獲取服務端在客戶端的遠程代理;客戶端通過代理調用接口中的方法,與服務端進行通信;客戶端執行完畢,通信結束,銷毀通信器。至此,客戶端與服務端就完成一次通信。

爬蟲客戶端進行初始化的代碼如下所示:

每個爬蟲節點創建一個通信器,通過初始化服務代理Prx并且調用checkedCast方法,將服務代理轉換成服務端在客戶端對應的代理,爬蟲系統中,包含調度代理和存儲代理2個代理。ICE運行時,在庫的支持下,每個節點與服務器的通信器就建立了連接。然后,爬蟲節點就可以通過代理Prx調用接口中數據和方法。這樣,訪問遠程對象和數據就如同本地訪問一樣,實際代碼運行于服務端。爬蟲節點正是利用這個特點,與調度服務及存儲服務進行數據的交互。

圖4 爬取流程

爬蟲節點主要負責從網絡上爬取數據,具體流程如圖4所示。

(1)模擬登錄。微博同傳統的web網站不同,以前的網站不需要登錄,而微博需要進入個人主頁需要登錄,否則訪問將會跳轉到登錄頁面。因此,在進行數據爬取時,需要設計登錄模塊,只有登錄后的用戶才可進行微博數據的爬取。文中采用SESSION機制,通過COOKIE和URL重寫實現用戶登錄。

(2)登錄成功后,爬蟲通過調度服務端代理,與調度服務端進行通信,獲取微博用戶的ID,利用用戶ID和新浪微博url(http://weibo.com/aj/mblog/mbloglist)分段抓取用戶的微博數據。此時返回的是JSON數據,需先將JSON解析,然后利用BeautifulSoup解析出用戶的每條微博數據。Beautiful Soup提供一些簡單的、python式的函數處理導航、搜索、修改分析樹等。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數據。

(3)解析完畢后,爬蟲利用存儲端代理,訪問數據存儲方法,將解析的數據發送到存儲模塊,進行微博數據的存儲。

(4)爬蟲節點爬取完一個客戶的微博數據后,通知調度服務器爬取完畢,同時會重新獲取新的用戶ID,重新進行爬取。

3 系統部署與運行

實驗采用了5臺機器,圖5為實驗網絡拓撲圖。各機器均為Linux環境,通過無線路由器TL-WR841N(通過100 Mbps WAN口連至Internet)通信。各機器的具體配置如表2所示。

表2 系統部署

實驗中,調度模塊部署在機器a上,機器b用于存儲微博數據,其余3臺機器為爬蟲節點,用于爬取微博數據。系統在爬蟲節點配置了新浪微博賬號進行登錄驗證后,即可對數據進行爬取。盡管新浪微博開放平臺提供了訪問接口,但基于該接口的爬蟲在爬取數據時,需要申請訪問授權并受訪問次數限制。與這種基于微博開放平臺訪問接口的爬蟲不同,系統勿需授權申請且不受訪問次數限制,通過在各個爬蟲節點對訪問網頁頻率進行設置,能有效避免因爬取過快而導致的爬取失敗。實驗了相同時間內不同爬蟲節點數下系統的爬取效果,如表3所示。由表3可以看到,隨著爬蟲節點數的增加,系統爬取的微博數量亦在成倍增加。因此,系統只需增加新的爬蟲節點,勿需對已有系統進行變更,就能極大提高系統的爬取能力,具有較強的適應性和可擴展性。

表3 相同時間內不同爬蟲節點數下系統的爬取效果

4 結束語

結合消息中間件ICE設計實現一個分布式爬蟲系統。文中介紹爬蟲及ICE工作原理,討論基于ICE中間件的分布式爬蟲的實現方法。基于ICE,將爬蟲的各個模塊獨立開來,系統具有可擴展性、適應性。實驗表明,爬蟲系統能夠快速地從互聯網爬取微博數據。

[1] 李林容.社交網絡的特性及其發展趨勢[J].新聞界,2010,(5):32-34.

[2] 周德懋,李舟軍.高性能網絡爬蟲:研究綜述[J].計算機科學,2009,36(8):26-29.

[3] Brin S,Page L.The anatomy of a large-scale hypertextual Web search engine[J].Computer Networks& Isdn Systems,1998,30(98):107-117.

[4] Heydon A,Najork M.Mercator:A scalable,extensible Web crawler[J].World Wide Web-internet& Web Information Systems,1999,2(4):219-229.

[5] 北京大學天網搜索引擎[EB/OL].http://e.pku.edu.cn,2015-05-06.

[6] 聶彤彤.中間件技術的發展與應用[J].中國信息導報,2005,(7):59-61.

[7] Henning M,Spruiell M.Distributed Programming with Ice[R].Zeroc Inc Revision,2003.

[8] Leader-us.ZeroC Ice權威指南[M].北京:電子工業出版社.

[9] Apache HBase Reference Guide[EB/OL].http://hbase.apache.org/book.html,2015-06-08.

[10] 劉裕,吳堅.中間件技術與ICE[J].微機發展,2004,14(10):37-39.

[11] 張俊軍,章旋.ICE中間件技術及其應用研究[J].計算機與現代化,2012(5):192-194.

[12] Boldi P,Codenotti B,Santini M,et al.Ubi-Crawler:a scalable fully distributed Web crawler[J].Software Practice& Experience,2004,34(8):711-726.

[13] 丁云亮,谷利澤,楊榆.基于分布式中間件ICE的應用架構研究[J].計算機應用,2009,29(S2):27-28.

[14] Zhang L,Yun ming Y E,Song H,et al.Design and Implementation of a Distributed High-Performance Web Crawler[J].Journal of Shanghai Jiaotong University,2004,38(1):59-61.

[15] 葉允明,于水,馬范援,等.分布式Web Crawler的研究:結構、算法和策略[J].電子學報,2002,30(S1):2008-2011.

[16] 許笑,張偉哲,張宏莉,等.廣域網分布式Web爬蟲[J].軟件學報,2010,21(5):1067-1082.

猜你喜歡
用戶系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
主站蜘蛛池模板: 99热线精品大全在线观看| 欧美一区二区精品久久久| 黄色网站在线观看无码| 国产流白浆视频| 国产亚洲视频在线观看| 免费看av在线网站网址| 91九色国产在线| 久久这里只有精品66| 国产熟女一级毛片| 五月激激激综合网色播免费| 亚洲视频欧美不卡| 国产视频大全| 日本久久免费| 精品一区二区三区自慰喷水| 最新亚洲人成无码网站欣赏网| 久操线在视频在线观看| 伊人久久婷婷| 天堂成人av| 国产毛片不卡| 国产色偷丝袜婷婷无码麻豆制服| 欧洲av毛片| 日日拍夜夜操| 欧美 亚洲 日韩 国产| 香蕉久人久人青草青草| 精品视频福利| 亚洲AV无码久久精品色欲| 久久国产成人精品国产成人亚洲| 国产喷水视频| 亚洲伊人久久精品影院| 成人午夜网址| 欧美全免费aaaaaa特黄在线| 欧美精品综合视频一区二区| 人人爽人人爽人人片| 91香蕉视频下载网站| 中文字幕在线视频免费| 国产精品欧美亚洲韩国日本不卡| 亚洲精品在线观看91| 波多野结衣国产精品| 亚洲精品亚洲人成在线| A级全黄试看30分钟小视频| 亚洲免费人成影院| 天天躁夜夜躁狠狠躁图片| 日韩高清成人| 国产成人喷潮在线观看| 日韩精品一区二区深田咏美| 国产成人在线无码免费视频| 97国产一区二区精品久久呦| 国产色婷婷| 91精品综合| 在线观看国产网址你懂的| 欧美国产视频| 久久青草免费91线频观看不卡| 亚洲最大福利网站| 欧美第一页在线| 婷婷亚洲视频| 欧美精品综合视频一区二区| 亚洲欧美另类中文字幕| 99在线观看视频免费| 一本久道久综合久久鬼色| 99精品在线看| 2021最新国产精品网站| 国产成年无码AⅤ片在线| 亚洲AⅤ综合在线欧美一区| 国产精品毛片在线直播完整版| 国产一区二区网站| 亚洲精品在线观看91| 97在线碰| 亚洲欧洲日韩综合色天使| 不卡色老大久久综合网| 69精品在线观看| 九九线精品视频在线观看| 亚洲欧美日韩精品专区| 亚洲欧美自拍中文| 草草影院国产第一页| 91外围女在线观看| 青青草原国产一区二区| 国产成人免费| 亚洲香蕉伊综合在人在线| 女人18毛片一级毛片在线 | 欧美精品另类| a级毛片毛片免费观看久潮| 欧美一级黄色影院|