亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ICE的分布式爬蟲設計與實現(xiàn)

        2015-12-02 02:28:46雷滋和陶宏才
        成都信息工程大學學報 2015年6期
        關鍵詞:爬蟲服務端中間件

        雷滋和, 陶宏才

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

        0 引言

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

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

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

        1 技術簡介

        1.1 爬蟲技術

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

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

        1.2 ICE中間件技術

        ICE網(wǎng)絡通信引擎[6-7],是一種面向?qū)ο蟮母咝阅苤虚g件,提供完善的、適合于異構網(wǎng)絡環(huán)境的分布式系統(tǒng)解決方案,包括庫、API和工具。

        圖1 ICE邏輯結構圖

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

        2 分布式爬蟲的設計實現(xiàn)

        2.1 爬蟲基本結構

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

        圖2 分布式爬蟲框架

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

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

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

        (3)爬蟲客戶端。主要分布于各個節(jié)點上,爬蟲客戶端從調(diào)度服務器獲取任務,然后進行微博數(shù)據(jù)爬取,將爬取到的數(shù)據(jù)發(fā)送到存儲服務器,進行統(tǒng)一存儲。

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

        2.2 ICE中間件設計

        作為一個面向?qū)ο蟮闹虚g件平臺,ICE提供了一系列的工具、API和庫建立面向?qū)ο蟮目蛻舳撕头掌鞯木W(wǎng)絡通信,ICE適合在異構環(huán)境中應用,并且應用的源碼都可以移植。

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

        圖3 開發(fā)流程

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

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

        Ice.loadSlice('scheduler_server.ice')

        import weiboCrawler

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

        表1 調(diào)度服務模塊和存儲服務模塊的Slice接口

        2.3 爬蟲服務端設計

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

        2.3.1 調(diào)度服務

        模塊為整個爬蟲系統(tǒng)的控制節(jié)點,整個爬蟲系統(tǒng)需要依賴此節(jié)點獲取爬取任務??蛻舳送ㄟ^接口獲取需要爬取的微博用戶ID,在爬取完畢后通過接口通知調(diào)度服務。因此,服務模塊與客戶端交互有2個接口:

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

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

        系統(tǒng)通過任務隊列的方式來實現(xiàn)任務的調(diào)度。在系統(tǒng)中,爬取一個微博用戶微博數(shù)據(jù)為一條任務,客戶端通過從服務端獲取所要爬取的微博用戶ID即任務ID對微博數(shù)據(jù)進行爬取。系統(tǒng)采用ICE內(nèi)置數(shù)據(jù)庫Berkeley DB實現(xiàn)任務隊列。系統(tǒng)中涉及2個數(shù)據(jù)庫,一個用來存儲未爬取的用戶ID,另一個存儲已經(jīng)爬取完畢的用戶ID??蛻舳双@取時,都是從未爬取的數(shù)據(jù)庫中獲取需要爬取的用戶ID,通過2個數(shù)據(jù)庫,起到了任務隊列的作用。系統(tǒng)進行任務調(diào)度的主要流程為:啟動調(diào)度服務端,系統(tǒng)讀取未爬取的微博用戶ID到任務隊列;客戶端通過接口從服務端獲取任務;服務端從任務隊列取出任務ID,分發(fā)給客戶端;客戶端執(zhí)行任務完畢,通知服務端,服務端將完成的任務ID存儲到數(shù)據(jù)庫中去。

        2.3.2 存儲服務

        模塊為爬蟲系統(tǒng)的存儲節(jié)點,所有爬蟲客戶端爬取的微博數(shù)據(jù)都會發(fā)送到本模塊進行存儲。模塊為爬蟲客戶端提供的接口為writeWB,客戶端通過調(diào)用該接口即可進行數(shù)據(jù)的存儲。

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

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

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

        2.4 爬蟲客戶端設計

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

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

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

        圖4 爬取流程

        爬蟲節(jié)點主要負責從網(wǎng)絡上爬取數(shù)據(jù),具體流程如圖4所示。

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

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

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

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

        3 系統(tǒng)部署與運行

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

        表2 系統(tǒng)部署

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

        表3 相同時間內(nèi)不同爬蟲節(jié)點數(shù)下系統(tǒng)的爬取效果

        4 結束語

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

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

        [2] 周德懋,李舟軍.高性能網(wǎng)絡爬蟲:研究綜述[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] 北京大學天網(wǎng)搜索引擎[EB/OL].http://e.pku.edu.cn,2015-05-06.

        [6] 聶彤彤.中間件技術的發(fā)展與應用[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].北京:電子工業(yè)出版社.

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

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

        [11] 張俊軍,章旋.ICE中間件技術及其應用研究[J].計算機與現(xiàn)代化,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] 許笑,張偉哲,張宏莉,等.廣域網(wǎng)分布式Web爬蟲[J].軟件學報,2010,21(5):1067-1082.

        猜你喜歡
        爬蟲服務端中間件
        利用網(wǎng)絡爬蟲技術驗證房地產(chǎn)灰犀牛之說
        基于Python的網(wǎng)絡爬蟲和反爬蟲技術研究
        RFID中間件技術及其應用研究
        電子制作(2018年14期)2018-08-21 01:38:10
        云存儲中基于相似性的客戶-服務端雙端數(shù)據(jù)去重方法
        基于VanConnect中間件的設計與開發(fā)
        電子測試(2018年10期)2018-06-26 05:54:02
        新時期《移動Web服務端開發(fā)》課程教學改革的研究
        消費導刊(2018年8期)2018-05-25 13:19:48
        利用爬蟲技術的Geo-Gnutel la VANET流量采集
        電子測試(2018年1期)2018-04-18 11:53:04
        在Windows Server 2008上創(chuàng)建應用
        大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡爬蟲技術
        電子制作(2017年9期)2017-04-17 03:00:46
        中間件在高速公路領域的應用
        无码欧亚熟妇人妻AV在线外遇| 加勒比特在线视频播放| 亚洲精品国产综合久久| 刚出嫁新婚少妇很紧很爽| 亚洲精品久久7777777| 欧美熟妇精品一区二区三区| 九九99久久精品午夜剧场免费| 亚洲乱码中文字幕第一页| 久久无码潮喷a片无码高潮| 女人扒开屁股爽桶30分钟| 91精品国产91久久久无码95| 一区二区免费国产a在亚洲| 日韩女优av一区二区| 久久中文精品无码中文字幕下载| 国产精品亚洲成在人线| 亚洲VR永久无码一区| 男女啪啪啪的高清视频| 亚洲高清在线天堂精品| 高清破外女出血av毛片| 国产欧美精品一区二区三区,| 久久精品国产亚洲av高清蜜臀| 国产精品毛片一区二区三区| 久久精品国产字幕高潮| 18无码粉嫩小泬无套在线观看| 黄色大片一区二区中文字幕| 韩国日本一区二区在线 | 亚洲成人免费网址| 日本大胆人体亚裔一区二区| 亚洲成人av大片在线观看| 白白在线视频免费观看嘛| 2021久久精品国产99国产精品 | 中文无码精品a∨在线观看不卡| 国产高清无码在线| 少妇高潮太爽了免费网站| 欧美疯狂性受xxxxx喷水| 色爱无码av综合区| 一本色道久久综合亚洲精品小说 | 亚洲色自偷自拍另类小说| 日韩肥熟妇无码一区二区三区 | 国产成人亚洲精品77| 久久黄色精品内射胖女人|