?

基于眾包的社交網絡數據采集模型設計與實現

2015-01-02 02:00高夢超胡慶寶程耀東李海波
計算機工程 2015年4期
關鍵詞:任務調度爬蟲服務端

高夢超,胡慶寶,程耀東,周 旭,李海波,杜 然

(1.四川大學計算機學院,成都610065;2.中國科學院高能物理研究所計算中心,北京100049;3.中國科學院聲學研究所,北京100190)

1 概述

互聯網的興起打破了傳統的社會交往方式,簡單、快捷和無距離的社交體驗推動社交網絡快速發展,以Facebook、Twitter、微博等為代表的應用吸引了大量活躍網絡用戶,社交網絡信息呈現爆發式的增長。社交網絡信息反映了用戶的網絡行為特征,通過對這些信息的研究,可以實現社會輿論監控、網絡營銷、股市預測等。社交網絡信息的重要價值在于實時性,如何快速、準確、有效地獲取目標信息非常重要。但社交網絡屬于Deep Web的專有網絡[1],信息量大、主題性強,傳統搜索引擎無法索引這些Deep Web頁面,只有通過網站提供的查詢接口或登錄網站才能訪問其信息,這增加了獲取社交網絡信息的難度。

目前國外有關社交網絡數據采集模型的研究較少,對社交網絡的研究主要集中在社會網絡分析領域。國內社交網絡平臺的數據采集技術研究有一定成果,如文獻[2]提出并實現一種利用新浪微博應用程序接口(Application Programming Interface,API)和網絡數據流相結合的方式采集數據,文獻[3]利用人人網開發平臺提供的API實現數據采集,并通過WebBrowser和HttpFox監測信息交互時的數據包,實現動態獲取Ajax頁面信息等。

本文采用模擬登錄技術,利用社交平臺賬戶獲取平臺訪問權限,通過設置初始任務集對目標信息進行定向獲取,避免請求不相關的信息頁面,既保證了信息的實時性,又提高了信息獲取效率。但是頻繁地使用缺少維護的社交賬戶爬取數據,容易導致賬戶被平臺封殺,為獲取大量有效的社交賬戶并在服務器端避免繁重的賬戶維護工作,利用Hadoop平臺的MapReduce計算模型處理結果數據[4],選擇基于Hadoop分布式文件系統(Hadoop Distributed File System,HDFS)的HBase數據庫存儲MapReduce處理結果,完成海量數據的有效存儲。

2 數據采集模型設計

2.1 設計原理

大規模獲取社交網絡數據需要解決3個問題:(1)獲取社交平臺的數據采集權限;(2)數據的快速采集;(3)數據的有效存儲。

一些社交平臺如Twitter、新浪微博、人人網等,允許用戶申請平臺數據的采集權限,并提供了相應的API接口采集數據,通過注冊社交平臺、申請API授權、調用API方法等流程獲取社交信息數據。但社交平臺采集權限的申請比較嚴格,申請成功后對于數據的采集也有限制。因此,本文采用網絡爬蟲的方式,利用社交賬戶模擬登錄社交平臺,訪問社交平臺的網頁信息,并在爬蟲任務執行完畢后,及時返回任務執行結果。

為提高數據的采集速度,本文采用分布式采集方式,通過設置初始任務集,按照任務調度機制把數據采集任務下發到用戶機器,由用戶機器完成整個數據的獲取工作。然而,為了保護數據,減輕服務器的負擔,社交平臺通常會采取一些反爬蟲措施,如封殺賬號、封鎖登錄IP等。隨著社交賬戶的申請流程越來越嚴格,社交賬戶的獲取和有效性維護也成為制約大規模采集社交網絡數據的瓶頸之一。

為解決以上問題,本文引入眾包思想。眾包是一種分布式的問題解決和生產模式,由美國《連線》記者Jeff Howe于2006年6月提出,即指公司或機構把公司內部任務以公開的方式外包給非特定的大眾網絡的行為。本文參考其商業運作模式,將其運用到互聯網的相互協作中,通過社交網絡的數據共享吸引網絡用戶作為志愿者參與到該項目平臺中,由志愿者提供計算資源和社交賬戶在本地完成信息的分布式采集,并由志愿者負責維護自己的社交賬戶,解決了計算資源和社交賬戶的獲取以及維護大量社交賬戶的難題。

本文采集模型采用自主開發的C/S架構軟件系統作為分布式采集的基礎框架,利用Hadoop計算平臺[5]作為采集模型的數據處理框架。爬蟲應用獲取到的初始數據是非結構化和半結構化的網頁信息,對網頁信息進行抽取后,得到指定格式的目標結果數據,經過MapReduce計算模型的處理后,保存在HBase數據庫中。

MapReduce編程模型是Hadoop平臺的核心技術之一,它掩蓋了分布式計算底層實現的細節,并提供相關接口,使編程人員能夠快速實現分布式并行編程。HBase是一個分布式存儲模型,是Bigtable[6]的開源實現,把HDFS作為HBase的支撐系統,一方面可以提高數據的可靠性和系統的健壯性,另一方面也可以采用MapReduce模型處理HBase中的數據,便于充分發揮HBase的大數據處理能力。采集模型整體結構如圖1所示。

圖1 采集模型整體結構

2.2 功能架構

采集模型基于眾包模式,采用C/S架構,包含了服務端、客戶端、存儲系統與爬蟲系統4個模塊。服務端是系統控制核心,控制任務在下發前的一切操作以及結果校驗等工作,且系統只有一個服務端??蛻舳酥糜诜植际綑C器節點中,通過socket套接字與服務端通信,接收服務端命令、調用爬蟲程序等。存儲系統采用HDFS,具體的數據獲取工作由爬蟲程序使用HttpClient對象來模擬瀏覽器操作完成。

系統的主題爬蟲應用程序通過HttpClient對象模擬瀏覽器操作實現。HttpClient[7]是 Apache Jakarta Common下的子項目,它是一個客戶端的傳輸類,支持自動轉向、HTTPS協議、代理服務器等。爬蟲的模擬登錄功能模塊與數據獲取功能是基于HttpClient提供的HTTP方式與Cookies管理功能實現。

HDFS是 Hadoop核心技術之一[8-10],可以運行在通用硬件上、具備高度容錯性、支持超大文件的分布式文件系統以及以流的形式訪問文件系統中的數據,適合大規模數據集上的應用。HDFS程序的文件操作模式大部分是一次寫入、多次讀取的簡單數據一致性模型,這種設計簡化了數據一致的問題并使高吞吐量的數據訪問變得可能[11],非常適合網絡爬蟲程序。采集模型各組成部分在運行時的調用關系如圖2所示。

圖2 采集模型中各組成部分在運行時的調用關系

在客戶端啟動后,調用爬蟲程序向服務器請求任務并執行數據獲取任務。服務端的控制模塊負責管理服務端與客戶端的通信,并接收第三方提交的任務需求。Mysql數據庫用來存儲和任務有關的一切數據,并接收任務調度中心的命令生成任務。任務調度中心接收爬蟲程序的任務請求,并返回任務文件,由爬蟲程序完成具體的數據獲取操作。數據獲取結果返回給服務端的接收模塊后,再由校驗模塊負責校驗,并修改Mysql數據庫中任務狀態。校驗成功后,如果任務是第三方提出的,將數據獲取結果發送給第三方,否則傳輸給 HDFS,利用MapReduce完成數據結果的存儲。

3 數據采集模型的功能實現

3.1 邏輯功能

眾包模式的實現需要基于C/S架構的通信主體。服務端包含控制模塊、任務調度模塊、接收模塊、校驗模塊和Mysql數據庫??蛻舳酥饕δ苁墙邮辗掌髅?、啟動爬蟲程序等。

控制模塊向客戶端下發命令并接收客戶端的反饋信息,并接收第三方提交的任務需求參數,并根據配置文件將其轉化為相應的任務類型,存儲到Mysql數據庫中,等待任務調度模塊的調度。

任務調度模塊的核心功能是保證客戶端爬蟲程序能有序地獲取到有效任務。任務調度模塊、接收模塊、校驗模塊共同維護Mqsql數據庫中的taskinfo表。taskinfo表設計了14個字段,包含索引值taskhash、任務類型type、任務狀態state、任務創建時間createtime、任務下發時間requestindex、任務超時時間mactimelength等。taskinfo表包含了每一個任務的索引目錄,但是沒有任務內容,任務內容存放在次級任務表里,每種小任務對應一個次級任務表,每一個任務文件都由若干個小任務組成。任務調度模塊創建任務時,使用taskhash來標識任務的唯一性,并按照 createtime設定任務的優先級,同時選擇taskhash作為次級任務表的外鍵,并在次級任務表中添加與taskhash相應的任務內容。任務調度模塊根據state的狀態決定任務的下發。state有7種狀態,分別 是 created,dealing,dealed,analysing,failed,success,stop。任務調度模塊接收到爬蟲程序的任務請求后,選擇 taskinfo表中 state為 created或 failed狀態的優先級最高的任務的taskhash,通過SQL語句查詢次級任務表,生成最終任務文件,以json文件格式返回給爬蟲程序。state狀態之間的轉換如圖3所示。

圖3 任務狀態轉換

對于只需要執行一次的任務,在state轉換成success后,任務結束。對于需要循環執行的任務,如定時爬取社交網絡用戶的注冊信息來保證信息的動態更新等,state在轉換到success一定時間內,如果沒有被修改為stop狀態,會轉換到created狀態,重新等待節點請求。

接收模塊使用超文本預處理器(PHP)代碼實現,調用PHP代碼的標準函數move_uploaded_file,接收使用repost上傳的文件,并存儲到磁盤指定位置。如果壓縮包為空,state被修改為failed,否則修改為dealed。如果壓縮包非空,進入到校驗模塊,修改state狀態為analysing。壓縮包由包含json字符串的文件組成,校驗模塊根據C語言標準函數json_object_object_get,json_object_get_string,json_object_array_length對上傳的json數據進行抽取分析,如果與定義的結果格式一致,校驗成功,修改state狀態為success,否則state被修改為failed。在該任務被重新下發后,state被修改為dealing。校驗成功后的文件被發送到HDFS中進行進一步處理,最后完成數據存儲。

客戶端使用MFC框架實現,機器節點通過安裝客戶端即可選擇加入系統中的某一項目,通過節點自身的運算能力為項目提供計算資源。

3.2 主題爬蟲

主題爬蟲應用程序是實現數據獲取的核心模塊?;谏缃痪W絡信息的特點,爬蟲程序包含模擬登錄、請求任務、執行任務、數據上傳4個功能,與傳統爬蟲程序的區別是增加模擬登錄功能,通過構建目標數據所在頁面的URL實現信息的定向獲取。本文以新浪微博為例,介紹爬蟲的工作原理。

針對新浪微博的主題爬蟲應用程序,基于J2SE平臺進行實現。模擬登錄功能的實現方式是讀取包含賬號信息的配置文件,模擬網頁登錄新浪微博的過程,獲取訪問新浪微博頁面時所需要的有效認證信息,即需要保存在本地的Cookie信息。程序向新浪服務器發送經過加密的用戶名(username)和密碼(password),服務器從傳遞的URL參數中提取字符串并解密得到原用戶名和密碼,其中對username和password的加密是模擬登錄過程中的關鍵步驟。對username進行Base64編碼得到用戶名的加密結果。但password的加密過程比較復雜。首先利用HttpClient對象訪問新浪服務器獲取服務器時間(servertime)、一個隨機生成的字符串(nonce)2個參數。然后利用新浪服務器給出的pubkey和rsakv值創建RSA算法公鑰(key)。將servertime,nonce和password按序拼接成新的字符串message,使用key對message進行RSA加密并將加密結果轉化為十六進制,得到password的加密結果。將加密后的用戶名和密碼一起作為請求通行證的URL請求的報頭信息傳遞給新浪服務器,新浪服務器經過驗證無誤后,返回登錄成功信息,HttpClient保存有效的Cookies值。模擬登錄成功后,程序會向服務端請求數據獲取任務,否則結束本次任務。

任務請求模塊向服務端的調度中心請求數據獲取任務。爬蟲程序通過httpClient的HttpGet方法,對指定 PHP頁面進行請求,獲取任務對應的taskhash。然后把 taskhash和機器 mac地址作為URL參數對另一PHP頁面進行請求,服務端PHP頁面接收到請求后,服務端程序對taskhash和mac地址進行驗證,檢測無誤后,通過SQL語句查詢次級任務表,并把查詢結果組合成任務文件,以json字符串的形式返回給爬蟲程序。

任務執行模塊解析任務文件,完成具體的數據獲取操作。在爬蟲程序中,不同數據類型的獲取功能被封裝成了不同類對象,以便程序調用。在執行數據獲取任務時,根據目標數據的類型調用相應的類對象,然后執行相應的成員函數來獲取數據。

對定向獲取的微博信息的網頁源碼使用正則表達式進行正則匹配,將結果轉化為json數據并存儲到指定文件中,直到獲取微博內容的任務全部完成。將結果數據壓縮后,上傳給服務端的接收模塊,本次任務結束。主題爬蟲系統流程如圖4所示。

圖4 主題爬蟲系統流程

3.3 數據處理

MapReduce計算模型[12]在執行計算任務時,需要HDFS集群的支持。HDFS采用主從(Master/Slave)體系結構,包含名字節點NameNode、數據節點DataNode和客戶端Client 3個重要部分。一個HDFS集群是由一個NameNode和若干個DataNode組成。

在寫入HBase數據庫前,需要使用MapReduce計算模型對原始數據進行清洗、篩選、統計等。MapReduce計算模型劃分為Map和Reduce 2個階段,分別采用Map()函數和Reduce()函數進行處理。其中,Map()函數主要對爬蟲獲取的結果數據進行格式清理,生成<key,list<value>>形式的中間結果,交由Reduce函數進行處理。Reduce函數對中間結果中相同鍵的所有值進行規約,可以去除結果中相同的記錄,利用Java API與HBase數據庫進行交互,通過創建 Put對象,實現數據批量導入HBase數據庫中。

為便于程序執行,采集模型將MapReduce程序封裝成Jar包,利用Shell腳本進行控制執行,在簡化數據處理步驟的同時,也通過對數據的集中處理,提高了MapReduce程序的工作效率。

4 實驗結果與分析

本文數據獲取系統目前處于測試階段,擁有146個志愿機器節點,分布在北京、??诤痛髴c3個地區。在普通網絡環境下,經過一個月的試運行,系統數據獲取結果如表1所示。

表1 系統試運行的數據獲取結果

從結果可以看出,數據獲取系統的任務成功率約為92%,數據獲取效率很高,完成了預期結果。對抓取數據進行統計分析,可以觀察微博數據走勢。鳳凰衛視2013年6月的微博轉發統計如圖5所示。

圖5 鳳凰衛視2013年6月中旬微博評論轉發數量統計

5 結束語

本文設計并實現一個基于眾包模式的社交網絡數據采集模型,把數據獲取任務下發到不同的機器節點,通過主題爬蟲執行任務,實現對網頁信息的定向獲取,提高數據獲取速度。利用Hadoop分布式文件系統存儲結果數據,在實現對數據進行有效存儲的同時,提高信息檢索效率,為進一步分析社交網絡數據提供功能支持。今后將對采集模型的任務調度系統進行優化,并開放用戶管理平臺,提高用戶參與度。

[1] 高 原.面向領域的 Deep Web信息抽取技術研究[D].南京:南京信息工程大學,2013.

[2] 黃延煒,劉嘉勇.新浪微博數據獲取技術研究[J].信息安全與通信保密,2013,(6):71-73.

[3] 鄧夏瑋.基于社交網絡的用戶行為研究[D].北京:北京交通大學,2012.

[4] Prabhakar C.CloudComputingwithAmazonWeb Services,Part5:Dataset Processing in the Cloud with SimpleDB[EB/OL].(2009-05-11).http://www.ibm.com/developerworks/library/ar-cloudaws5/.

[5] Hadoop[EB/OL].[2013-05-28].http://hadoop.apache.org/.

[6] Chang F,Dean J,Ghemawat S,et al.Bigtable:A Distributed Storage System for Structured Data[J].ACM Transactions on Computer Systems,2008,26(2):4-12.

[7] HttpClient Tutorial[EB/OL].[2013-05-28].http://hc.apache.org/httpcomponents-client-ga/tutorial/pdf/httpclient-tutorial.pdf.

[8] Hayes B.Cloud Computing[J].Communications of the ACM,2008,51(7):9-11.

[9] Konstantin S,Hairong K,Sanjay R,et al.The Hadoop Distributed File System[C]//Proceedings of the 26th Symposium on Mass Storage Systems and Technologies.Washington D.C.,USA:IEEE Computer Society,2010:1-10.

[10] 陳 康,鄭緯民.云計算:系統實現與研究現狀[J].軟件學報,2009,20(5):1337-1348.

[11] 崔 杰,李陶深,蘭紅星.基于Hadoop的海量數據存儲平臺設計與開發[J].計算機研究與發展,2012,49(Sl):12-18.

[12] 董西成.Hadoop技術內幕:深入解析MapReduce架構設計與實現原理[M].北京:機械工業出版社,2013.

猜你喜歡
任務調度爬蟲服務端
利用網絡爬蟲技術驗證房地產灰犀牛之說
基于Python的網絡爬蟲和反爬蟲技術研究
基于改進NSGA-Ⅱ算法的協同制造任務調度研究
基于時間負載均衡蟻群算法的云任務調度優化
云存儲中基于相似性的客戶-服務端雙端數據去重方法
新時期《移動Web服務端開發》課程教學改革的研究
利用爬蟲技術的Geo-Gnutel la VANET流量采集
在Windows Server 2008上創建應用
大數據環境下基于python的網絡爬蟲技術
云計算環境中任務調度策略
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合