呂鵬輝
摘要:隨著Web2.0時代的到來,微博正逐步成為公共信息傳播的主流媒體,如何高效率地獲取完整的微博數(shù)據(jù)顯得極為重要。該文以新浪微博的評論內(nèi)容為研究對象,利用模擬登錄[1]下網(wǎng)絡(luò)爬蟲、調(diào)用新浪微博API[2]以及通過微博手機(jī)版[3]中接口等三種方式進(jìn)行數(shù)據(jù)采集,對比采集速率以及采集到的內(nèi)容。實(shí)驗(yàn)表明,在采集微博評論時可以使用新浪微博API獲取關(guān)注用戶最新微博ID,使用模擬登錄的方式針對這些ID獲取對應(yīng)微博評論,在保證數(shù)據(jù)完整性的前提下實(shí)現(xiàn)了采集速率的最大化。
關(guān)鍵詞:模擬登錄;微博API;網(wǎng)絡(luò)爬蟲;數(shù)據(jù)采集
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)33-0009-04
1 概述
21世紀(jì)是移動互聯(lián)網(wǎng)迅猛發(fā)展的世紀(jì),F(xiàn)acebook 、Twitter、新浪微博等一系列社交網(wǎng)絡(luò)應(yīng)運(yùn)而生,使得人們獲取信息的方式有了翻天覆地的變化。同時,隨著社交網(wǎng)絡(luò)的用戶量急劇增長,以交友、信息共享為目的的社交網(wǎng)絡(luò)[4]迅速成為人們闡述觀點(diǎn)、傳播信息、推廣營銷的理想平臺,因此,越來越多的研究人員參與其中來進(jìn)行多方面內(nèi)容的研究。根據(jù)《第39次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》中的數(shù)據(jù)顯示,截止2016年12月,我國網(wǎng)民規(guī)模達(dá)7.31億,相當(dāng)于歐洲人口總量,互聯(lián)網(wǎng)普及率達(dá)到53.2%。中國互聯(lián)網(wǎng)行業(yè)整體向規(guī)范化、價值化發(fā)展,同時,移動互聯(lián)網(wǎng)推動消費(fèi)模式共享化、設(shè)備智能化和場景多元化。國內(nèi)移動大數(shù)據(jù)服務(wù)商QuestMobile發(fā)布2016年度報告——“2016年度App價值榜”,數(shù)據(jù)顯示,2016年12月,微博月活躍用戶數(shù)再次實(shí)現(xiàn)46%的增長,在所有App中排名第8位,其中高價值用戶比例高達(dá)76.3%,因此,微博數(shù)據(jù)研究是非常有意義的。
如何高效并準(zhǔn)確地從社交網(wǎng)絡(luò)中將所需要的信息檢索出來十分重要,本文以新浪微博評論數(shù)據(jù)作為實(shí)驗(yàn)研究對象,所涉及實(shí)驗(yàn)均在Java語言環(huán)境下實(shí)現(xiàn)。研究了在模擬登錄下通過網(wǎng)絡(luò)爬蟲,微博API接口以及微博手機(jī)版提供的接口進(jìn)行數(shù)據(jù)獲取的方案,并針對數(shù)據(jù)提取目標(biāo)提出了融合方案。最后通過分析各采集方案的利弊,進(jìn)一步提出采集方案融合的策略,得出API接口與網(wǎng)絡(luò)爬蟲融合能保證數(shù)據(jù)完整性并提高采集效率。
2 信息檢索技術(shù)
信息檢索[5]領(lǐng)域的先驅(qū)Gerard Salton提出,信息檢索是關(guān)于信息的結(jié)構(gòu)、分析、組織、存儲、搜索和檢索的領(lǐng)域。這一定義應(yīng)用于今天仍然十分合適、非常準(zhǔn)確。信息檢索的主要焦點(diǎn)一直是文本和文本形式的文檔,而文檔與結(jié)構(gòu)化數(shù)據(jù)庫最重要的卻別在于,文檔中的大部分信息以文檔形式存放,文本沒有結(jié)構(gòu)。因此,如何從社交網(wǎng)絡(luò)中通過信息檢索技術(shù)檢索出所需要的文本數(shù)據(jù),并將其轉(zhuǎn)換為易于使用的結(jié)構(gòu)化數(shù)據(jù)持久化到數(shù)據(jù)庫中是非常重要的。
在對社交網(wǎng)絡(luò)數(shù)據(jù)獲取中,爬蟲是一種較為常見的方式,爬蟲通過追蹤網(wǎng)上的超鏈接可以獲取到互聯(lián)網(wǎng)中對應(yīng)的資源。如何能高效地獲取到這些資源,保證資源的準(zhǔn)確性,并在資源發(fā)生變化時保證所獲取的資源是最新的非常具有挑戰(zhàn)性。由爬蟲獲取到的資源通常都不是純文本形式,微博中通??梢垣@取到HTML、JSON、XML等形式的資源數(shù)據(jù)。我們需要將這些形式的數(shù)據(jù)處理后,轉(zhuǎn)換為文本文檔以及與這些文檔對應(yīng)的結(jié)構(gòu)化數(shù)據(jù),并存放在文檔數(shù)據(jù)庫中。
爬取是指自動地發(fā)現(xiàn)并下載網(wǎng)頁,網(wǎng)絡(luò)爬蟲指的是下載網(wǎng)頁的程序。網(wǎng)絡(luò)爬蟲在爬取過程中通常需要面臨的三大難題。第一,互聯(lián)網(wǎng)規(guī)模過于龐大,對需要獲取資源的定位比較困難;第二,互聯(lián)網(wǎng)上的網(wǎng)頁通常不受搜索爬蟲數(shù)據(jù)庫創(chuàng)建者的控制,數(shù)據(jù)結(jié)構(gòu)可能經(jīng)常發(fā)生改變;第三,站點(diǎn)擁有者可能不希望我們獲取到其中一部分?jǐn)?shù)據(jù),并且頻繁訪問資源可能會被屏蔽掉。
3 數(shù)據(jù)采集方式
3.1 通過模擬登錄進(jìn)行數(shù)據(jù)采集
互聯(lián)網(wǎng)上的每個資源都有自己唯一的資源定位器(uniform resource locator),即URL。URL主要由三部分組成:協(xié)議方案、主機(jī)名、資源名。微博中主要使用超文本傳輸協(xié)議與客戶端進(jìn)行交互,主機(jī)名為weibo.com,URL指向微博中一項(xiàng)具體的資源。而微博中大部分頁面需要登錄才能得到完整信息[6],因此想要通過程序獲取微博信息,必須要解決模擬登錄問題。
通過對微博網(wǎng)頁版登錄方式的分析發(fā)現(xiàn)[7],主要登錄步驟是:
1) 向微博服務(wù)器發(fā)送一個get請求,瀏覽器返回名為servertime和nonce的隨機(jī)字符串。
2) 使用BASE64加密微博賬號,使用RSA算法對(1)中的servertime和nonce以及微博密碼三個值組成的字符串加密,向微博服務(wù)器URL發(fā)送包含加密過的賬號以及密碼的post請求。
3) 服務(wù)器收到請求后進(jìn)行驗(yàn)證,驗(yàn)證成功后重定向一個URL給客戶端,瀏覽器解析該URL并進(jìn)入登錄成功頁面,并把登錄標(biāo)志寫入本地cookie。
4) 之后每次訪問微博URL時,在請求中加入以上cookie,經(jīng)過地址重定向之后即可獲取完整的微博資源。
模擬登錄后,類似于用戶正常訪問,新浪微博對用戶訪問進(jìn)行了訪問限制,實(shí)際數(shù)據(jù)爬取過程中,如果微博爬蟲訪問過于頻繁,網(wǎng)絡(luò)IP以及微博賬號會被封停[8],因此需要對數(shù)據(jù)抓取頻率做出限制,控制訪問頻率。
3.2 通過微博API進(jìn)行數(shù)據(jù)采集
微博開放平臺開放了包括微博、評論、用戶及關(guān)系在內(nèi)的二十余類接口,通過Oauth2.0[9]用戶授權(quán)后即可在任意開發(fā)環(huán)境下使用。豐富齊全的功能,可以滿足各種類型的產(chǎn)品需求。
OAuth是目前國際通用的授權(quán)方式[10],它的特點(diǎn)是不需要用戶在第三方應(yīng)用輸入用戶名及密碼,就可以申請?jiān)L問該用戶的受保護(hù)資源。OAuth最新版本是OAuth2.0,其認(rèn)證與授權(quán)的流程更簡單、更安全。OAuth為客戶端提供了一種代表資源擁有者訪問受保護(hù)資源的方法。在客戶端訪問受保護(hù)資源之前,它必須先從資源擁有者獲取授權(quán)(訪問許可),然后用訪問許可交換訪問令牌(Access Token,包含許可的作用域、持續(xù)時間和其它屬性等信息)??蛻舳送ㄟ^向資源服務(wù)器出示訪問令牌來訪問受保護(hù)資源。endprint
訪問令牌提供了一個抽象層,將不同的授權(quán)結(jié)構(gòu)(如用戶名密碼)替換成資源服務(wù)器可以理解的單一訪問令牌。這種抽象使得分發(fā)短期有效的訪問令牌成為可能,也使得資源服務(wù)器不必理解多種多樣的授權(quán)機(jī)制。使用 Oauth2.0機(jī)制,進(jìn)行認(rèn)證授權(quán),獲取訪問令牌,并通過訪問令牌來訪問受保護(hù)資源,如圖1所示:
OAuth2.0的工作流程簡述如下:
(1) 客戶端從資源擁有者(最終用戶)那里請求授權(quán)。授權(quán)請求(Authorization Request)能夠直接發(fā)送給資源擁有者,或者間接的通過授權(quán)服務(wù)器發(fā)送請求;
(2) 資源擁有者為客戶端授權(quán),給客戶端發(fā)送一個訪問許可(Authorization Grant);
(3) 客戶端出示自己的私有證書(client_id、client_secret)和上一步拿到的訪問許可,來向授權(quán)服務(wù)器請求一個訪問令牌;
(4) 授權(quán)服務(wù)器驗(yàn)證客戶端的私有證書和訪問許可的有效性,如果驗(yàn)證有效,則向客戶端發(fā)送一個訪問令牌(Access Token),訪問令牌包括許可的作用域、有效時間和一些其他屬性信息;
(5) 客戶端出示訪問令牌向資源服務(wù)器請求受保護(hù)資源;
(6) 資源服務(wù)器對訪問令牌做出響應(yīng)(Protected Resource)。
微博中進(jìn)行Oauth2.0認(rèn)證的基本流程:
完善開發(fā)者資料并提交認(rèn)證[11];認(rèn)證通過后新浪提供AppKey和AppSecret;用戶向微博提供回調(diào)頁面,通過認(rèn)證程序獲取到微博提供的32位十六進(jìn)制code;將該code提交給認(rèn)證服務(wù)器后,服務(wù)器返回24小時有效的Access Token;使用Access Token調(diào)用相應(yīng)的API接口或者發(fā)布數(shù)據(jù)。
由于2014年11月微博接口升級后,對未授權(quán)本應(yīng)用的用戶,將無法獲取其個人簡介、認(rèn)證原因、粉絲數(shù)、關(guān)注數(shù)、微博數(shù)及最近一條微博內(nèi)容等信息,本文采集的主要是主動關(guān)注用戶的數(shù)據(jù)。微博API提供了一系列基礎(chǔ)數(shù)據(jù)接口[12],主要包括粉絲服務(wù)接口、微博接口、評論接口、用戶接口、關(guān)系接口、短鏈接口、公共服務(wù)接口、Oauth2.0授權(quán)接口等。
如果想獲得某個用戶的信息,可以使用微博提供的用戶接口、微博接口、評論接口等。通過OAuth2.0認(rèn)證,很容易可以獲取到用戶信息,這些信息數(shù)據(jù)會以JSON格式返回。新浪官方提供的SDK會將其封裝成JSON對象,解析起來也極為方便。
以下是通過https://api.weibo.com/2/users/show.json接口獲取到李**先生的個人信息:
{
"id": 1197161814,
"idstr": "1197161814",
"class": 1,
"screen_name": "李**",
"name": "李**",
"province": "11",
"city": "1",
"location": "北京 東城區(qū)",
"description": "",
"url": "http://blog.sina.com.cn/kaifulee",
…}
返回的信息包括:用戶UID、用戶昵稱、友好顯示名稱等34中信息,通過https://api.weibo.com/2/friendships/friends.json接口可以獲取到授權(quán)用戶的相關(guān)信息數(shù)據(jù)[13],其中主要數(shù)據(jù)如下表所示:
微博開放接口限制每段時間只能請求一定的次數(shù)。限制的單位時間有每小時、每天;限制的維度有單授權(quán)用戶和單IP;部分特殊接口,例如發(fā)微博接口有單獨(dú)的請求次數(shù)限制[14]。微博開放接口技術(shù)原理上是一個HTTP輪詢[15](polling)協(xié)議,不是即時推送(real time push)協(xié)議。因此即使增大刷新頻率也無法完全達(dá)到即時獲得最新信息效果,在實(shí)驗(yàn)中采用每調(diào)用100次API,程序休眠3min,防止調(diào)用上限。同時,為防止數(shù)據(jù)重復(fù)存儲,在存儲前進(jìn)行了判斷,有效地提高了數(shù)據(jù)存儲效率[16]。程序結(jié)構(gòu)流程圖如圖2所示。
使用微博API獲取數(shù)據(jù)相對來說較為簡單,但是由于官方限制,在持續(xù)獲取數(shù)據(jù)的數(shù)據(jù)量較大時會有很大的波動,穩(wěn)定性不高[17];同時,獲取到數(shù)據(jù)的數(shù)量也受到的較大的限制,只能獲取到最新2000條評論、轉(zhuǎn)發(fā)等數(shù)據(jù),價值不高。
3.3 通過微博手機(jī)版進(jìn)行數(shù)據(jù)采集
微博手機(jī)版提供了一個登錄頁面,通過代碼從手機(jī)版URL地址為https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F獲取輸入框,輸入微博賬號、密碼實(shí)現(xiàn)模擬登錄,模擬登錄后可進(jìn)行數(shù)據(jù)爬取。https://m.weibo.cn/中提供了一系列可以獲取到微博相關(guān)數(shù)據(jù)的URL,如https://m.weibo.cn/api/comments/show?id=WeiboId&page=Page等,通過這些頁面可以獲取到較為全面的微博評論、轉(zhuǎn)發(fā)內(nèi)容的json格式數(shù)據(jù)。以下是通過https://m.weibo.cn/api/comments/show?id=4122617462491844&page=5獲取到的某條微博的評論列表數(shù)據(jù):
{ "ok":1,
"msg":"數(shù)據(jù)獲取成功",
"data":[{
"id":4123269881409570,
"created_at":"今天 15:13",endprint
"source":"紅米2",
"user":{
"id":1828331790,
"screen_name":"夢想家壁虎",
"profile_image_url":"https://tva2.sinaim/…qgp5bmzyj2050050aa8.jpg",
"verified":false,
"verified_type":-1,
"mbtype":0,
"profile_url":"https://m.weibo...&featurecode=20000320"},
…}],
"total_number":1896,"max":190}
由于官方限制,不能頻繁訪問這些URL,否則會被微博官方封禁IP地址[18]。本方法中設(shè)置了每訪問一次,休眠一秒,所以采集效率并不高。
4 實(shí)驗(yàn)及其結(jié)果分析
本實(shí)驗(yàn)分別使用幾種不同的微博數(shù)據(jù)采集方式,采集了微博內(nèi)容以及微博評論內(nèi)容,對采集性能以及采集到的內(nèi)容進(jìn)行分析。
實(shí)驗(yàn)環(huán)境如表2所示:
4.1 采集數(shù)據(jù)速率
在網(wǎng)絡(luò)正常、IP以及賬號未被封禁的情況下,對模擬登錄、微博API獲取數(shù)據(jù)以及微博手機(jī)版三種方式采集到的微博id以及微博評論數(shù)如上圖所示,可以看出通過新浪微博官方API采集數(shù)據(jù)相比其他兩種更為快速。
4.2 采集內(nèi)容數(shù)量
針對微博id為4144043707971889的微博,采集結(jié)果如表3所示:
模擬登錄以及手機(jī)版能獲取到全部的微博評論數(shù)據(jù)資源,而通過新浪微博API的方式只能獲取當(dāng)前用戶已關(guān)注的用戶微博,并且只能獲取2000條以下的評論內(nèi)容,價值不高。
4.3 采集數(shù)據(jù)性能
在經(jīng)過大量測試后發(fā)現(xiàn),對于三種方式而言,在保證賬號以及IP不被微博官方屏蔽的前提下,數(shù)據(jù)采集方面的時間損耗主要取決于當(dāng)時網(wǎng)絡(luò)傳輸速度,數(shù)據(jù)處理總量。
對采集到數(shù)據(jù)的性能以及內(nèi)容分析比較后可以得出下表:
5 結(jié)束語
新浪微博作為國內(nèi)社交網(wǎng)站的佼佼者,為輿情分析等問題的研究提供了海量有價值的數(shù)據(jù),如何獲取這些數(shù)據(jù)極為重要[19]。因此,文中分析了模擬登錄、微博API、微博手機(jī)版獲取數(shù)據(jù)等三種微博數(shù)據(jù)采集方式,從采集速率以及數(shù)據(jù)完整性出發(fā)進(jìn)行對比,發(fā)現(xiàn)了在采集微博評論時可以使用新浪微博API獲取關(guān)注用戶最新微博ID,使用模擬登錄的方式針對這些ID獲取對應(yīng)微博評論,這種方式在保證數(shù)據(jù)完整性的前提下實(shí)現(xiàn)了采集速率的最大化。這些分析結(jié)果對政府引導(dǎo)正確的輿論和采取相應(yīng)措施有所幫助,對企業(yè)做出正確的決策有一定的參考價值。
參考文獻(xiàn):
[1] 孫青云,王俊峰,趙宗渠,等. 一種基于模擬登錄的微博數(shù)據(jù)采集方案[J].計算機(jī)技術(shù)與發(fā)展,2014,24(3):6-10.
[2] Lomborg S, Bechmann A. Using APIs for Data Collection on Social Media[M]. Routledge,an imprint of Taylor & Francis Books Ltd, 2014.
[3] 徐雁飛,劉淵,吳文鵬. 社交網(wǎng)絡(luò)數(shù)據(jù)采集技術(shù)研究與應(yīng)用[J].計算機(jī)科學(xué),2017,44(1):277-282.
[4] Mccormick T H, Lee H, Cesare N, et al. Using Twitter for Demographic and Social Science Research: Tools for Data Collection and Processing[J]. Sociological Methods & Research, 2017, 46.
[5] 杜超利. 時空要素驅(qū)動的事件網(wǎng)頁信息檢索方法研究[D].南京師范大學(xué),2013.
[6] 周中華,張惠然,謝江. 基于Python的新浪微博數(shù)據(jù)爬蟲[J].計算機(jī)應(yīng)用,2014,34(11):3131-3134.
[7] 劉衍珩,李飛鵬,孫鑫,等. 基于信息傳播的社交網(wǎng)絡(luò)拓?fù)淠P蚚J].通信學(xué)報,2013,34(4):1-9.
[8] 田霏霏,沈記全. 基于用戶影響力的微博數(shù)據(jù)提取算法[J].計算機(jī)應(yīng)用與軟件,2017,34(1):55-61.
[9] 時子慶,劉金蘭,譚曉華.基于OAuth2.0的認(rèn)證授權(quán)技術(shù)[J].計算機(jī)系統(tǒng)應(yīng)用,2012,(3):260-264.
[10] 任敏,谷文林,華雪東.基于新浪微博的公交系統(tǒng)數(shù)據(jù)采集及分析[J].現(xiàn)代電子技術(shù),2015,38(9):159-162.
[11] Mannix J, Wilkes L, Daly J. Pragmatism, persistence and patience: a user perspective on strategies for data collection using popular online social networks[J]. Collegian, 2014, 21(2):127-133.
[12] 盧體廣,劉新,劉任任. 微博數(shù)據(jù)通用抓取算法[J]. 計算機(jī)工程,2014,40(5):12-16+20.
[13] Di Li. Sentiment Analysis on Weibo Data[A]. IEEE Beijing Section.Proceedings of 2014 IEEE Computers, Communications and IT Applications Conference (ComComAp)[C].IEEE Beijing Section:,2014:6.
[14] 廉捷,周欣,曹偉,等. 新浪微博數(shù)據(jù)挖掘方案[J].清華大學(xué)學(xué)報:自然科學(xué)版,2011,51(10):1300-1305.
[15] Goswami A, Kumar A. Challenges in the Analysis of Online Social Networks: A Data Collection Tool Perspective[J]. Wireless Personal Communications, 2017(3):1-47.
[16] 王樺. 基于廣度優(yōu)先的主題爬蟲的設(shè)計與實(shí)現(xiàn)[D].復(fù)旦大學(xué),2011.
[17] DONG Ri-zhuang, GUO Shu-chao. Design and Implementation of Web Crawler[J]. Computer Knowledge and Technology, 2014.
[18] Efthymiou D, Antoniou C. Use of Social Media for Transport Data Collection[J]. Procedia - Social and Behavioral Sciences, 2012(48):775-785.
[19] Kim Y, Huang J, Emery S. Garbage in, Garbage Out: Data Collection, Quality Assessment and Reporting Standards for Social Media Data Use in Health Research, Infodemiology and Digital Disease Detection[J]. Journal of Medical Internet Research, 2016, 18(2):41.endprint