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

        ?

        社交網(wǎng)絡(luò)挖掘方案研究

        2015-07-20 11:01俞忻峰
        現(xiàn)代電子技術(shù) 2015年4期
        關(guān)鍵詞:條數(shù)爬蟲(chóng)新浪

        俞忻峰

        (南京理工大學(xué),江蘇 南京 210014)

        根據(jù)中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)發(fā)布了第33次《中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》指出:社交網(wǎng)站的整體覆蓋率為61.7%,中國(guó)互聯(lián)網(wǎng)用戶(hù)總數(shù)已經(jīng)達(dá)到6.18億,互聯(lián)網(wǎng)的滲透率已經(jīng)達(dá)到67.8%。其中微博等社交網(wǎng)絡(luò)的使用規(guī)模為2.81億,網(wǎng)中微博的使用率[1]為45.5%。

        社交網(wǎng)絡(luò)的使用率越來(lái)越高,微博等社交應(yīng)用在越來(lái)越流行。微博相比傳統(tǒng)網(wǎng)絡(luò)的應(yīng)用形式而言,微博的信息傳播速度更快,覆蓋人群大,更新更加頻繁。因此,如何有效的采集微博應(yīng)用中的各種信息,對(duì)于分析數(shù)據(jù)的隱性特征,研究用戶(hù)的偏好,用戶(hù)的個(gè)性化推薦以及趨勢(shì)的預(yù)測(cè)具有非常重要的意義。

        傳統(tǒng)的微博類(lèi)數(shù)據(jù)挖掘方法有兩種:

        (1)通過(guò)網(wǎng)絡(luò)爬蟲(chóng)抓取信息,比如周立柱等人提出網(wǎng)絡(luò)爬蟲(chóng)方案[2],但爬蟲(chóng)的效率不是很高,抓取的數(shù)據(jù)量比較少,同時(shí)必須繞過(guò)新浪微博的模擬登陸,才能有效采集新浪微博的數(shù)據(jù)。

        (2)黃延煒等人研究的利用網(wǎng)絡(luò)數(shù)據(jù)采集設(shè)備直接截取微博在網(wǎng)絡(luò)中的傳輸數(shù)據(jù)[3],這種方法和網(wǎng)絡(luò)爬蟲(chóng)相似,效率不高,對(duì)數(shù)據(jù)的提取過(guò)程十分復(fù)雜。

        本文主要立足于如何獲取新浪微博上的數(shù)據(jù)展開(kāi)研究:采取兩種方法來(lái)獲取新浪微博上的數(shù)據(jù)。第一種方法是基于微博第三方應(yīng)用接口的(API),對(duì)接口編程獲取數(shù)據(jù)。第二種方式是采用網(wǎng)絡(luò)爬蟲(chóng)的方式,基于NodeJS實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲(chóng)。最后比較兩種方式采取數(shù)據(jù)的優(yōu)缺點(diǎn),進(jìn)一步優(yōu)化微博的采集方法,提出兩種方法相融合的方法。

        1 基于新浪API的方案

        對(duì)于獲取社交網(wǎng)站數(shù)據(jù),可以通過(guò)第三方應(yīng)用平臺(tái)接口(API)來(lái)獲取社交網(wǎng)站上的數(shù)據(jù)。在使用微博官方API之前,必須要接入微博應(yīng)用,成為微博的開(kāi)發(fā)者,在創(chuàng)建完應(yīng)用之后,系統(tǒng)會(huì)返回給一個(gè)AppKey和AppSe?cret。App Key是應(yīng)用的惟一識(shí)別標(biāo)志,微博開(kāi)放平臺(tái)通過(guò)App Key鑒別應(yīng)用的身份。App Secret是給應(yīng)用分配的密鑰,保證應(yīng)用來(lái)源的可靠性[4]。

        1.1 Oauth2認(rèn)證

        調(diào)用新浪微博的API必須通過(guò)新浪微博的用戶(hù)認(rèn)證?,F(xiàn)在新浪微博的用戶(hù)認(rèn)證采取的是Oauth2的認(rèn)證(見(jiàn)圖1)。Oauth2認(rèn)證簡(jiǎn)化了之前的繁瑣的Oauth認(rèn)證,同時(shí)安全性也得到很大的提高,是用戶(hù)未來(lái)的主要授權(quán)認(rèn)證方式?,F(xiàn)在國(guó)內(nèi)主流的社交網(wǎng)站的授權(quán)方式都采用的是Oauth2。Oauth2認(rèn)證過(guò)程為:

        (1)Client發(fā)送 Authorization Request給 Resource Owner(個(gè)人),然后Resource Owner會(huì)返回一個(gè)Authori?zation Grant碼給 Client。

        (2)Client拿到Authorization Grant后向Authoriza?tion Server(認(rèn)證服務(wù)器)發(fā)請(qǐng)求,接著Authorization Server會(huì)返還一個(gè)Access Token給Client。

        (3)Client拿著Access Token去訪問(wèn)Resource Server(資源服務(wù)器),Resource Server會(huì)把相應(yīng)資源給Client。

        圖1 Oauth2認(rèn)證流程圖

        1.2 接入API

        常規(guī)的接入新浪微博應(yīng)用主要有三種方式:

        (1)網(wǎng)站接入:微連接是微博針對(duì)第三方網(wǎng)站提供的社會(huì)化網(wǎng)絡(luò)解決方案。為第三方網(wǎng)站提供用戶(hù)身份系統(tǒng)及社交關(guān)系導(dǎo)入。

        (2)站內(nèi)應(yīng)用:站內(nèi)應(yīng)用能使你的Web類(lèi)應(yīng)用最快地融入微博,提升用戶(hù)體驗(yàn),應(yīng)用將以http://apps.weibo.com/個(gè)性域名的地址被用戶(hù)訪問(wèn)到,并可深度整合微博眾多推廣資源。

        (3)移動(dòng)應(yīng)用:移動(dòng)應(yīng)用開(kāi)放平臺(tái)為第三方提供了簡(jiǎn)便的合作模式,滿(mǎn)足了手機(jī)和平板電腦用戶(hù)的需求。

        移動(dòng)應(yīng)用接入方式有以下優(yōu)勢(shì):在移動(dòng)設(shè)備上和PC上調(diào)用的API是相同的,但是移動(dòng)設(shè)備有專(zhuān)門(mén)的An?droid SDK,更方便實(shí)驗(yàn)環(huán)境搭建;同時(shí)在移動(dòng)設(shè)備上搜集數(shù)據(jù)對(duì)于后續(xù)的實(shí)驗(yàn)也提供了方便。因此實(shí)驗(yàn)選擇了移動(dòng)應(yīng)用接入方式:

        SDK是軟件開(kāi)發(fā)工具包,它是對(duì)新浪API的一層封裝。首先新浪官方網(wǎng)站上下載Android SDK,現(xiàn)在最新的版本是V2.5.0。Android SDK內(nèi)部已經(jīng)實(shí)現(xiàn)了Oauth2認(rèn)證,SSO認(rèn)證等多種方式。SSO認(rèn)證方式是指通過(guò)自己的應(yīng)用喚醒手機(jī)上的客戶(hù)端進(jìn)行授權(quán)登陸操作,開(kāi)發(fā)者并不需要知道授權(quán)的機(jī)制。在實(shí)驗(yàn)方案中,并沒(méi)有使用SSO認(rèn)證方式,因?yàn)镾SO認(rèn)證需要一定的依賴(lài)性,移動(dòng)設(shè)備上必須安裝微博客戶(hù)端。

        使用Android SDK實(shí)現(xiàn)Oauth2認(rèn)證流程如下:

        (1)把下載的下來(lái)的Android SDK包解壓,在demo?src文件夾下面的weiboSDK,和自己的項(xiàng)目工程引入開(kāi)發(fā)環(huán)境中。

        (2)在Android工程的AndroidManifest.xm l文件中增加所需要的文件權(quán)限。

        (3)把工程中的Constants類(lèi)中的APP_KEY,Redi?rect_URL,SCOPE域替換成自己創(chuàng)建應(yīng)用時(shí)的所對(duì)應(yīng)的參數(shù)。

        (4)創(chuàng)建微博授權(quán)類(lèi)對(duì)象:

        mWeiboAuth=new WeiboAuth(

        this,

        Constants.APP_KEY,

        Constants.REDIRECT_URL,

        Constants.SCOPE);

        (5)實(shí)現(xiàn)weiboAuthListener接口,在授權(quán)信息成功以后,SDK會(huì)將access_token,uid等通過(guò)Bundles返回,并且調(diào)用onComplete回調(diào)函數(shù)。

        (6)進(jìn)行 Oauth2.0 Web授權(quán),調(diào)用anthorize()方法,授權(quán)成功以后就會(huì)獲得TOKEN。

        一般情況下,在獲取到Token后,可以使用An?droid中的sharePreferences把token持久化本地文件中,供后面程序使用。

        完成了用戶(hù)授權(quán)之后,就解決了用戶(hù)的身份認(rèn)證問(wèn)題,現(xiàn)在應(yīng)用可以直接調(diào)用新浪微博的API。這里以獲取當(dāng)前用戶(hù)發(fā)表的微博為例:

        查詢(xún)API,填上接口所需要的幾個(gè)參數(shù)值,接著發(fā)送下面類(lèi)似的HTTP請(qǐng)求:

        https://api.sina.com.cn/2/statuses/user_timeline?count=**&page=**

        其中請(qǐng)求參數(shù)count指的是單頁(yè)中返回的結(jié)果條數(shù),默認(rèn)值為20,最大100,超過(guò)100按100計(jì)算,page是指返回結(jié)果指定的頁(yè)碼,通過(guò)調(diào)用這個(gè)接口,我們可以得到當(dāng)前用戶(hù)發(fā)布的微博的Json數(shù)據(jù)。程序結(jié)構(gòu)圖如圖2所示。

        但是新浪微博接口有一個(gè)返回結(jié)果總條數(shù)的限制,這個(gè)接口最多只能返回2 000條數(shù)據(jù)。這個(gè)接口有2個(gè)限制原則:

        (1)基于服務(wù)器IP的請(qǐng)求次數(shù)限制(1 000次/h)。

        (2)基于同一個(gè)用戶(hù)在使用同一個(gè)應(yīng)用的請(qǐng)求次數(shù)限制(1 000次/h)。

        針對(duì)微博API的這些缺陷,在設(shè)計(jì)系統(tǒng)的時(shí)候需要考慮程序的調(diào)用次數(shù)。新浪API中有一個(gè)rate_lim?it_status的接口,這個(gè)接口返回了接口的剩余調(diào)用次數(shù),每小時(shí)的限制數(shù),計(jì)算器重置剩余時(shí)間,下次重置時(shí)間4個(gè)參數(shù)。參考了廉潔等人的設(shè)計(jì)方案[5],這里在系統(tǒng)中加入了程序控制模塊和存儲(chǔ)控制模塊,程序控制模塊主要的任務(wù)是監(jiān)控調(diào)用API的次數(shù),通關(guān)觀察rate_lim?it_status接口返回的結(jié)果,返回的調(diào)用次數(shù)大于950次的時(shí)候,接著調(diào)用Java的ADSL程序,進(jìn)行重新?lián)芴?hào),接著使程序休眠1min,這樣可以有效地防止API的調(diào)用上限。

        圖2 基Andrioid SDK數(shù)據(jù)抓取結(jié)構(gòu)圖

        存儲(chǔ)控制模塊,主要是提高數(shù)據(jù)的存儲(chǔ)效率的,由于網(wǎng)絡(luò)等其他客觀因素的存在,并不是每次都接收到完全一樣的數(shù)據(jù),在獲得數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)之間加了一成存儲(chǔ)隊(duì)列層,這樣,對(duì)于響應(yīng)收回的數(shù)據(jù),可以檢查存儲(chǔ)隊(duì)列中是否存在,如果在隊(duì)列中找到數(shù)據(jù),則跳過(guò)存儲(chǔ)模塊直接發(fā)送下一次請(qǐng)求,如果發(fā)現(xiàn)存儲(chǔ)隊(duì)列中不存在,就把請(qǐng)求回來(lái)的數(shù)據(jù)放入存儲(chǔ)隊(duì)列中,并且把數(shù)據(jù)持久化到MongoDB數(shù)據(jù)庫(kù)中。

        Android SDK中并沒(méi)有對(duì)所有的新浪API進(jìn)行封裝,對(duì)于一些特殊的功能,可以自己對(duì)新浪API進(jìn)行封裝,擴(kuò)展Android SDK。這樣更加有利于數(shù)據(jù)的獲取。對(duì)于國(guó)內(nèi)其他社交網(wǎng)站也會(huì)提供相對(duì)應(yīng)的SDK和API,可以采取類(lèi)似的方法采集數(shù)據(jù)。

        2 基于網(wǎng)絡(luò)爬蟲(chóng)頁(yè)面解析

        僅僅使用新浪微博提供的API獲取新浪微博的數(shù)據(jù)并不是惟一的方法,還可以采用自己手寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)的方式采集微博的數(shù)據(jù)。使用網(wǎng)絡(luò)爬蟲(chóng)的方式主要涉及三個(gè)過(guò)程,第一步模擬新浪微博的登陸問(wèn)題,能夠獲取新浪微博的用戶(hù)首頁(yè);第二步分析用戶(hù)首頁(yè),提取想要的信息;第三步內(nèi)容進(jìn)行信息持久化[6?10]。

        在此使用Node.js實(shí)現(xiàn)了這個(gè)方案。Node.js本身對(duì)絕大數(shù)操作采用的是異步處理的方案,所以對(duì)于網(wǎng)絡(luò)爬蟲(chóng)這種要頻繁進(jìn)行I/O操作的應(yīng)用來(lái)說(shuō),使用Node.js是非常合適的。另外,Node.js有強(qiáng)大的包管理器工具npm。比如cheerio和cookie?jar對(duì)于分析網(wǎng)頁(yè)都是非常不錯(cuò)的庫(kù)工具。

        2.1 新浪網(wǎng)站的模擬登陸過(guò)程

        大家平時(shí)登陸新浪微博,新浪微博的前端客戶(hù)端的js文件會(huì)把使用者的用戶(hù)名和密碼進(jìn)行加密并進(jìn)一步進(jìn)行處理交給后臺(tái)服務(wù)器進(jìn)行驗(yàn)證。驗(yàn)證通過(guò)以后,返回個(gè)人登陸頁(yè)面的首頁(yè)。因此采用chrome的fiddle插件抓取了一次登陸操作發(fā)出的所有請(qǐng)求:

        2.1.1 模擬登陸前的預(yù)處理

        當(dāng)點(diǎn)擊微博用戶(hù)名輸入框的時(shí)候,前端js會(huì)發(fā)出下面的url請(qǐng)求:

        http://login.sina.com.cn/sso/prelogin.php?entry=weibo&call?back=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.15)&_=1401243592676

        請(qǐng)求的返回值中有幾個(gè)字段:retcode,如果是0就代表返回成功;Nonce,一串隨機(jī)數(shù)用來(lái)加密用的;Pub?lickey,用于rsa2密碼加密的公鑰,rsakv也是加密用一段字符串;Servicetime,服務(wù)的時(shí)間戳;Pcid,個(gè)人的計(jì)算機(jī)信息。

        當(dāng)輸入完用戶(hù)名之后,前端頁(yè)面會(huì)第二次發(fā)送/pre?login.php請(qǐng)求,中間會(huì)帶上對(duì)用戶(hù)名進(jìn)行base64算法加密的參數(shù)su。同時(shí)更新了Servicetime這個(gè)時(shí)間戳。如果要帶上驗(yàn)證碼的話(huà)會(huì)返回一個(gè)參數(shù)showpin字段。

        其中驗(yàn)證碼的產(chǎn)生是根據(jù)/cgi/pin.php的請(qǐng)求得到。請(qǐng)求參數(shù)中有一個(gè)隨機(jī)數(shù)r,以及計(jì)算機(jī)名pcid。

        2.1.2 模擬提交表單操作

        查看提交表單操作的URL請(qǐng)求:

        http://login.sina.com.cn/sso/login.php?client=ssologin.js

        其中關(guān)心的主要是sp字段和su字段怎么加密。后來(lái)自己閱讀了最新的ssologin.js代碼,其中有對(duì)sp和su的加密過(guò)程:

        var RSAKey=new sinaSSO.Encoder.RSAKey();

        RSAKey.setPublic(me.rsaPubkey,“10001”);

        password=RSAKey.encrypt(

        [me.servertime,me.nounce].join(" ")

        + ′ ′+password);

        sinaSSOEncoder類(lèi)在ssologin.js中,它封裝了對(duì)sina數(shù)據(jù)的編碼的基本操作。最終password的產(chǎn)生就是由調(diào)用RSAKey的encrypt方法返回的字符串和‘ ’和自己的密碼做拼接而成。

        2.1.3 登陸成功

        如果上一步的retcode返回值為0。表示登陸成功。接下來(lái)系統(tǒng)會(huì)發(fā)請(qǐng)求個(gè)人頁(yè)面的請(qǐng)求:

        http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com

        返回userinfo信息和狀態(tài)信息以及認(rèn)證票據(jù)。接下來(lái)要做的就是訪問(wèn)要抓取的頁(yè)面請(qǐng)求信息,比如想訪問(wèn)自己的朋友頁(yè)面,只需要發(fā)送這個(gè)頁(yè)面的所對(duì)應(yīng)的url請(qǐng)求,就能夠得到這個(gè)頁(yè)面的HTML內(nèi)容。

        2.1.4 保存Cookie

        保存當(dāng)前的Cookie值,用于以后直接登錄。

        2.2 基于網(wǎng)絡(luò)爬蟲(chóng)的程序架構(gòu)設(shè)計(jì)

        整個(gè)程序架構(gòu)如圖3所示,主要由下述幾個(gè)功能模塊組成。

        圖3 網(wǎng)絡(luò)爬蟲(chóng)的程序架構(gòu)圖

        (1)URL集合。URL集合是指用戶(hù)模擬登陸成功以后,用戶(hù)首先開(kāi)始提取的URL頁(yè)面,也可稱(chēng)為種子集合。

        (2)采集頁(yè)面與頁(yè)面分析。對(duì)于HTML頁(yè)面,其規(guī)則是很復(fù)雜的,如果直接用正則表達(dá)式去匹配,寫(xiě)出的正則表達(dá)式語(yǔ)句將非常復(fù)雜,并且使用正則表達(dá)式的效率也不是很高。node.js提供了一款cheerio11的插件,可以用node.js管理工具npm直接進(jìn)行安裝。對(duì)于頁(yè)面解析經(jīng)常會(huì)使用JSDOM,但是JSDOM有以下幾個(gè)問(wèn)題,首先,JSDOM對(duì)內(nèi)建的解析太過(guò)嚴(yán)格,JSDOM附帶的HTML解析不能處理當(dāng)下的大眾網(wǎng)站。其次JSDOM太慢,有很大的延遲。最后JSDOM比較累贅,從本質(zhì)上來(lái)說(shuō)JSDOM是為使用者提供一個(gè)在瀏覽器里看到的DOM環(huán)境,便這里并不需要這樣的功能。因此可以選擇Cheerio,它的語(yǔ)法和Jquery類(lèi)似,且速度非常快,大約是JSDOM的8倍。Cheerio幾乎能夠解析任何HTML和XML。Node.js是單線程的,這里沒(méi)有死鎖的存在,也沒(méi)有線程上下文交換帶來(lái)的開(kāi)銷(xiāo)問(wèn)題。同時(shí)Node.js是基于事件驅(qū)動(dòng)的,對(duì)于I/O密集型的應(yīng)用非常合適。同時(shí)對(duì)于CPU密集型的一些任務(wù),Node.js也能夠勝任。因此,用Node.js來(lái)做網(wǎng)絡(luò)爬蟲(chóng)非常合適。對(duì)于頁(yè)面的分析處理,首先把HTML頁(yè)面讀進(jìn)內(nèi)存,然后利用Cheerio庫(kù)進(jìn)行頁(yè)面解析操作。把有用的結(jié)構(gòu)化信息提取出來(lái),存入數(shù)據(jù)庫(kù)。同時(shí)也要提取uid字段或者tid字段,進(jìn)行去重操作,因?yàn)檫@些字段能夠重組URL,比如http://wei?bo.com/u+UID,接著把這個(gè)URL加入U(xiǎn)RL隊(duì)列中。

        (3)URL隊(duì)列[12?15]。URL隊(duì)列主要由3個(gè)隊(duì)列組成,分別是等待隊(duì)列,處理隊(duì)列和完成隊(duì)列。處理隊(duì)列中的URL是要被送到URL集合中的。URL等待隊(duì)列存放已經(jīng)提取出來(lái)的但是還沒(méi)有做任何處理URL,等待送入處理隊(duì)列中。完成隊(duì)列中存放已經(jīng)處理完的URL請(qǐng)求和發(fā)現(xiàn)錯(cuò)誤的URL請(qǐng)求。在把拼裝好的URL送入到URL隊(duì)列之前,要先檢查完成隊(duì)列是否存在該URL,如果有的話(huà)就跳過(guò)。URL隊(duì)列的好處是能夠控制程序的效率,如果待處理URL為空,程序結(jié)束,這樣會(huì)影響效率。如果待處理URL隊(duì)列長(zhǎng)度太大,服務(wù)器壓力比較大。所以要實(shí)時(shí)控制URL隊(duì)列的長(zhǎng)度。

        (4)數(shù)據(jù)存儲(chǔ)。持久化數(shù)據(jù)的作用,把抓取的結(jié)構(gòu)化數(shù)據(jù)存入MongoDB數(shù)據(jù)庫(kù)中。

        3 數(shù)據(jù)分析

        為了驗(yàn)證本文方法的有效性和這兩種方法的性能區(qū)別,分別搭建了基于API和NodeJs爬蟲(chóng)的開(kāi)發(fā)環(huán)境,實(shí)驗(yàn)開(kāi)發(fā)機(jī)器是Lenovo Y430,CPU酷睿I2,內(nèi)存5 GB,操作系統(tǒng)是Windows 7.Android SDK demo開(kāi)發(fā)環(huán)境的是Eclipse IDE for JavaEE。網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)環(huán)境是Web?Storm 5,程序由node.js實(shí)現(xiàn)。 數(shù)據(jù)統(tǒng)一采用MongoDB進(jìn)行存儲(chǔ)。實(shí)驗(yàn)中選取了20個(gè)微博賬號(hào),每個(gè)賬號(hào)有2 000個(gè)好友,并且把這些賬號(hào)加入應(yīng)用的測(cè)試賬號(hào)。

        實(shí)驗(yàn)中,主要是抓取用戶(hù)所發(fā)的微博信息,微博的信息結(jié)構(gòu)是{微博ID(mid),用戶(hù)ID(uid),微博內(nèi)容(content),轉(zhuǎn)發(fā)數(shù)(repost_count),評(píng)論數(shù)(comment_count)}的字符串,比較抓取的微博條數(shù),并把結(jié)果持久化本地?cái)?shù)據(jù)庫(kù)中。實(shí)驗(yàn)中排除網(wǎng)絡(luò)帶寬的影響,本地都選擇了網(wǎng)絡(luò)為100 Mb/s的共享教育網(wǎng)。

        (1)穩(wěn)定性能比較

        穩(wěn)定性是指單位時(shí)間內(nèi)抓取的微博數(shù)量的變化趨勢(shì),每小時(shí)內(nèi)抓取的微博數(shù)量越接近,越穩(wěn)定,程序的性能也越好。通過(guò)對(duì)比連續(xù)抓取10 h的微博數(shù)據(jù),實(shí)驗(yàn)結(jié)果如圖4所示。

        圖4 穩(wěn)定性對(duì)比圖

        從圖4可以發(fā)現(xiàn),基于API的折線圖波動(dòng)比較大,而基于網(wǎng)絡(luò)爬蟲(chóng)的比較平穩(wěn)。這是由于API方式是由新浪服務(wù)器提供的數(shù)據(jù),受網(wǎng)絡(luò)帶寬等因素影響較大,因此穩(wěn)定性不高,有一定的波動(dòng)。所以基于網(wǎng)絡(luò)爬蟲(chóng)的方式在穩(wěn)定性方面優(yōu)于基于API的方式。

        (2)抓取速率比較

        表1為兩種方式抓取速率對(duì)比(條數(shù)省略到百位)。

        表1 實(shí)驗(yàn)結(jié)果

        數(shù)據(jù)的抓取速率主要指相同時(shí)間段里抓取微博條數(shù)多少的比較。在程序中,記錄下來(lái)兩種方式每小時(shí)抓取的微博條數(shù),其實(shí)驗(yàn)結(jié)果如表1所示。通過(guò)表中分析,每小時(shí)API抓取的條數(shù)總是比網(wǎng)絡(luò)爬蟲(chóng)抓取的條數(shù)多。這是由于基于API的方式是直接返回?cái)?shù)據(jù),不需要進(jìn)行網(wǎng)頁(yè)預(yù)處理等復(fù)雜操作,而網(wǎng)絡(luò)爬蟲(chóng)方式需要網(wǎng)頁(yè)解析,提取數(shù)據(jù)等操作。因此基于API的方式在抓取速率方面優(yōu)于網(wǎng)絡(luò)爬蟲(chóng)的方式。

        (3)數(shù)據(jù)完整性

        經(jīng)過(guò)查閱官網(wǎng)資料[16],新浪API是有一定盈利模式的,對(duì)于有些數(shù)據(jù)地返回需要申請(qǐng)權(quán)限并且支付一定的金額,不可能無(wú)條件的返還所有想要的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲(chóng)方式的基礎(chǔ)是對(duì)當(dāng)前網(wǎng)頁(yè)進(jìn)行分析處理,能提取出需要的信息。因此網(wǎng)絡(luò)爬蟲(chóng)的方式在數(shù)據(jù)完整性方面優(yōu)于API查詢(xún)的方式。

        (4)API和網(wǎng)絡(luò)爬蟲(chóng)的融合策略

        API和網(wǎng)絡(luò)爬蟲(chóng)的融合策略主要是指API和網(wǎng)絡(luò)爬蟲(chóng)這兩種方法相結(jié)合,是兩種方法相互配合采集數(shù)據(jù)。程序架構(gòu)如圖5所示。

        圖5 API和網(wǎng)絡(luò)爬蟲(chóng)融合策略

        API和網(wǎng)絡(luò)爬蟲(chóng)獲取微博數(shù)據(jù)各有各的優(yōu)勢(shì),對(duì)于某些信息采集,可以結(jié)合API和網(wǎng)絡(luò)爬蟲(chóng)這兩種方式,讓采集速率最優(yōu)化。最大化獲取微博信息內(nèi)容,可以首先使用測(cè)試賬號(hào)作為種子ID,調(diào)用新浪API接口獲得測(cè)試用戶(hù)的朋友ID,把朋友ID拼接成URL,然后使用網(wǎng)絡(luò)爬蟲(chóng)的方式進(jìn)行收集,把收集到的個(gè)人信息,微博信息存入到數(shù)據(jù)庫(kù)中。同時(shí)把收集到好友信息經(jīng)過(guò)去重操作之后加入到種子列表中,如此反復(fù)迭代,收集微博信息。

        表2是連續(xù)采集3 h的微博條數(shù),采用融合策略后,采集的微博條數(shù)有所增加。這是由于采用融合策略后,API的方式只需要返回用戶(hù)的UID,相比直接返回微博內(nèi)容,效率有所提升。同時(shí)網(wǎng)絡(luò)爬蟲(chóng)只需要專(zhuān)注解析用戶(hù)UID的頁(yè)面,因此在采集微博的情況下,多策略融合的方法采集的效率更高。

        表2 三種方式3 h采集微博條數(shù)

        4 結(jié)論

        通過(guò)API和網(wǎng)絡(luò)爬蟲(chóng)的方式都能獲取數(shù)據(jù)。API的方式獲取數(shù)據(jù)的效率高,但是受第三方服務(wù)商限制比較大。網(wǎng)絡(luò)爬蟲(chóng)的方式效率相對(duì)差些,但獲得數(shù)據(jù)比較完整,穩(wěn)定性更好。對(duì)于新浪微博的采集可以采用兩種方式相融合的策略。接下來(lái)工作是如何優(yōu)化這兩種抓取方式以及垃圾微博信息處理的問(wèn)題。優(yōu)化網(wǎng)絡(luò)爬蟲(chóng)主要從查詢(xún)驅(qū)動(dòng)的爬取,反向鏈接數(shù),PR值,前向鏈接數(shù)等因素去考慮。垃圾微博處理主要考慮如何構(gòu)建模型,識(shí)別垃圾微博。微博的使用日益流行,它每天產(chǎn)生的海量的數(shù)據(jù)。如何采集并且利用這些信息,對(duì)用戶(hù)行為分析、輿情監(jiān)控、幫助決策有著非常大的幫助。

        [1]中國(guó)互聯(lián)網(wǎng)信息中心.第33次中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[EB/OL].[2014?03?05].http://www.cnnic.net.cn/hlwfzyj/hlwxz?bg/hlwtjbg/201403/t20140305_46240.htm.

        [2]周立柱,林玲.聚焦爬蟲(chóng)技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用,2005,25(9):1965?1969.

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

        [4]吳勇.基于Android手機(jī)的新浪微博應(yīng)用的研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2013.

        [5]廉潔,周欣.新浪微博數(shù)據(jù)挖掘方案[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2011,51(10):1300?1305.

        [6]羅一紓.微博爬蟲(chóng)的相關(guān)技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.

        [7]吳黎兵,柯亞林,何炎祥.分布式網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(11):176?179.

        [8]宋海洋,劉曉然,錢(qián)???一種新的主題網(wǎng)絡(luò)爬蟲(chóng)爬行策略[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(11):264?267.

        [9]蔣宗禮,田曉燕,趙旭.一種基于語(yǔ)義分析的主題爬蟲(chóng)算法[J].計(jì)算機(jī)工程與科學(xué),2010,32(9):145?147.

        [10]韓宇貞,朱華生.基于Base64編碼的數(shù)據(jù)加密技術(shù)[J].南昌水專(zhuān)學(xué)報(bào),2002(21):38?40.

        [11]Cheerio.Open source connections[M/OL].[2014?09?30].http://www.cheeriojs.github.io Cheerio.

        [12]樊星岑.面向微博數(shù)據(jù)挖掘的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.

        [13]朱云鵬,馮楓,陳江寧.多策略融合的中文微博數(shù)據(jù)采集方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,3(11):3835?3839.

        [14]盧體廣,劉新,劉任任.微博數(shù)據(jù)通用抓取算法[J].計(jì)算機(jī)工程,2014,40(5):12?16.

        [15]馮典.面向微博的數(shù)據(jù)采集和分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013.

        猜你喜歡
        條數(shù)爬蟲(chóng)新浪
        利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
        猴子雖小
        基于Python的網(wǎng)絡(luò)爬蟲(chóng)和反爬蟲(chóng)技術(shù)研究
        利用爬蟲(chóng)技術(shù)的Geo-Gnutel la VANET流量采集
        巧算金魚(yú)條數(shù)
        大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
        新浪讀書(shū)排行榜
        人民網(wǎng)、新華網(wǎng)、中國(guó)非公企業(yè)黨建網(wǎng)兩新黨建報(bào)道條數(shù)排行
        對(duì)多邊形對(duì)角線條數(shù)的探究
        每只小貓給了貓媽媽幾條魚(yú)
        忘忧草社区www日本高清| 国产激情在线观看视频网址| 中文字幕精品亚洲字幕| 欧美69久成人做爰视频| 国产三级在线观看免费| 高清国产亚洲va精品| 免费国产不卡在线观看| 中国孕妇变态孕交xxxx| 国产亚洲人成a在线v网站| 国产妇女乱一性一交| 亚洲激情一区二区三区视频 | 欧美伦费免费全部午夜最新| 国产成人免费一区二区三区| 国产精品自产拍在线观看中文| 久久99国产精品久久99密桃| 夜夜高潮夜夜爽夜夜爱爱一区| 女性女同性aⅴ免费观女性恋| 成人片在线看无码不卡| 久久老熟女一区二区三区| 免费国产黄网站在线观看视频| 永久免费av无码网站性色av | 国产成人综合久久久久久| 日韩精品无码视频一区二区蜜桃 | 成人亚洲精品777777| 亚洲av无码成人精品区天堂| 国产一区二区三区白浆在线观看| 国产成人一区二区三区乱| 一边吃奶一边摸做爽视频| 久久久99精品成人片中文字幕| 国产女主播福利一区二区| 国产极品女主播国产区| 欧美精品久久久久久久自慰| 丝袜 亚洲 另类 欧美| 国产免费观看久久黄av麻豆| 欧美黑人xxxx又粗又长| 精选麻豆国产AV| 亚洲一区二区三区四区精品| 日本大乳高潮视频在线观看| 日本一区二区精品88| 亚洲色图第一页在线观看视频| 国产成人a级毛片|