鐘明翔 唐晉韜 謝松縣 王 挺
(國防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院 長沙 410073)
?
一種基于動(dòng)態(tài)網(wǎng)頁解析的微博數(shù)據(jù)抓取方法*
鐘明翔 唐晉韜 謝松縣 王 挺
(國防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院 長沙 410073)
微博是一種新型信息傳播媒介,產(chǎn)生的海量數(shù)據(jù)吸引研究人員關(guān)注并開展相關(guān)研究。微博數(shù)據(jù)獲取是后續(xù)分析研究的基礎(chǔ)和起點(diǎn)。以新浪微博平臺(tái)為研究對(duì)象,提出了基于動(dòng)態(tài)網(wǎng)頁解析技術(shù)的微博數(shù)據(jù)多線程抓取方法。方法利用瀏覽器內(nèi)核解析微博頁面動(dòng)態(tài)數(shù)據(jù),通過模擬登陸,依據(jù)社交網(wǎng)站網(wǎng)頁鏈接特點(diǎn)確定頁面爬取策略,使用頁面解析技術(shù)定制頁面數(shù)據(jù)抽取模板,實(shí)現(xiàn)以用戶為中心的微博數(shù)據(jù)獲取。抓取結(jié)果表明,方法能對(duì)微博用戶數(shù)據(jù)進(jìn)行全面高效抓取,為后續(xù)數(shù)據(jù)分析和處理提供數(shù)據(jù)支持。
新浪微博; 數(shù)據(jù)挖掘; 動(dòng)態(tài)網(wǎng)頁; 爬蟲
Class Number
近年來,社交媒體在互聯(lián)網(wǎng)上迅速發(fā)展和普及。在線社交網(wǎng)站、博客、維基、微博等社交網(wǎng)絡(luò)應(yīng)用在普通大眾中不斷普及和深入。微博以其平臺(tái)的開放性、內(nèi)容發(fā)布的低門檻特性發(fā)展為重要的社會(huì)化媒體。Twitter自2006年創(chuàng)建以來,用戶數(shù)量一直保持高速增長勢(shì)頭。2009年用戶增長率高達(dá)2565%,是社交網(wǎng)站Facebook和LinkedIn用戶增長率總和的10倍[1]。新浪自2009年8月推出微博產(chǎn)品以來,迅速成長為中國微博平臺(tái)代表。截止2014年底,微博用戶數(shù)量超5.3億,月活躍用戶數(shù)量達(dá)到1.76億,目前是中國最具影響力和關(guān)注度的微博平臺(tái)。
網(wǎng)民通過微博平臺(tái)發(fā)布和獲取信息、表達(dá)自我,形成社會(huì)輿論。以信息傳播為載體維系網(wǎng)絡(luò)社會(huì)關(guān)系。微博已經(jīng)逐漸對(duì)社會(huì)發(fā)展和國家安全產(chǎn)生深遠(yuǎn)影響。以Facebook、Twitter為代表的社交網(wǎng)站,已經(jīng)多次證明它們?cè)谝恍┥鐣?huì)事件中扮演著舉足輕重的角色。利用微博數(shù)據(jù)進(jìn)行輿情分析和潛在客戶發(fā)掘,使微博數(shù)據(jù)挖掘具有重大的社會(huì)意義和巨大商業(yè)價(jià)值。
在國內(nèi),大量研究人員針對(duì)微博數(shù)據(jù)開展相關(guān)研究。HAN Ruixia[2]介紹了微博平臺(tái)的基本概念和特點(diǎn)。新浪微博官方提供技術(shù)支持的SDK,出于商業(yè)利益和網(wǎng)絡(luò)資源保護(hù)考慮,對(duì)普通開發(fā)者調(diào)用API獲取數(shù)據(jù)進(jìn)行了限制。也未對(duì)網(wǎng)絡(luò)爬蟲和搜索引擎提供靜態(tài)文件。因此微博數(shù)據(jù)的全面高效獲取成為制約微博研究的一個(gè)瓶頸。目前微博數(shù)據(jù)獲取方法可分為四種[3]: 1) 基于微博開放平臺(tái)的數(shù)據(jù)獲取技術(shù),即利用微博平臺(tái)提供的API。 2) 基于網(wǎng)絡(luò)爬蟲的數(shù)據(jù)獲取技術(shù)。 3) 基于數(shù)據(jù)源鏡像的數(shù)據(jù)獲取技術(shù)。 4) 基于網(wǎng)絡(luò)數(shù)據(jù)流的數(shù)據(jù)獲取技術(shù)?;阽R像資源的數(shù)據(jù)獲取往往不是免費(fèi)的,且獲取需要一定的權(quán)限?;诰W(wǎng)絡(luò)數(shù)據(jù)流的獲取需要硬件支持來實(shí)現(xiàn)網(wǎng)絡(luò)環(huán)境下用戶數(shù)據(jù)的捕獲。通過網(wǎng)絡(luò)數(shù)據(jù)流的解析和重構(gòu)來獲取微博數(shù)據(jù),需要比較復(fù)雜的技術(shù)。因此對(duì)于普通的開發(fā)和研究人員而言,針對(duì)新浪微博數(shù)據(jù)的獲取方式,主要有以下兩種主要思路及做法: 1) 利用微博平臺(tái)提供的SDK調(diào)用API獲取數(shù)據(jù); 2) 利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容,根據(jù)規(guī)則提取信息,或者二者組合應(yīng)用。陳舜華等[4]提出了合理控制新浪微博API調(diào)用頻次的分布式抓取技術(shù)。周立柱等[5]提出了利用聚焦爬蟲抓取網(wǎng)頁內(nèi)容,并按規(guī)則提取有效信息的思路,但未涉及登陸模式,難以支持微博數(shù)據(jù)的完整獲取。廉捷等[6]提出了結(jié)合新浪微博API和網(wǎng)絡(luò)爬蟲與網(wǎng)頁解析,實(shí)現(xiàn)微博數(shù)據(jù)的高效獲取方案。孫青云等[7]提出了基于模擬登陸,使用傳統(tǒng)網(wǎng)絡(luò)爬蟲,從下載的網(wǎng)頁中抽取微博和用戶信息數(shù)據(jù)的方案。但沒有涉及網(wǎng)頁動(dòng)態(tài)數(shù)據(jù)的獲取和解析,不能完整獲取用戶評(píng)論和轉(zhuǎn)發(fā)等重要信息。
通過對(duì)不同微博數(shù)據(jù)抓取方式進(jìn)行分析,本文選擇基于網(wǎng)頁動(dòng)態(tài)數(shù)據(jù)解析的爬蟲方案,并實(shí)現(xiàn)了一個(gè)以登錄用戶相關(guān)的微博數(shù)據(jù)抓取系統(tǒng)。
綜合分析目前兩種獲取微博數(shù)據(jù)的方案: 1) 通過API調(diào)用能簡潔高效獲取便于分析的結(jié)構(gòu)化數(shù)據(jù),但在調(diào)用頻次和返回結(jié)果最大數(shù)量有諸多限制。 2) 使用網(wǎng)絡(luò)爬蟲方案比較靈活,可基于模擬登陸和網(wǎng)頁數(shù)據(jù)解析獲取相關(guān)數(shù)據(jù),但實(shí)現(xiàn)難度較大,且無法獲取結(jié)構(gòu)化的微博數(shù)據(jù)。
2.1 新浪微博API
微博開放平臺(tái)(Weibo Open Platform)是利用微博平臺(tái)的信息傳播能力接入第三方應(yīng)用,向用戶提供應(yīng)用和服務(wù)的開放平臺(tái)。目前新浪微博開放平臺(tái)提供了微博接口、關(guān)系接口、用戶接口、評(píng)論接口、粉絲服務(wù)接口等26類API接口[8]。幾乎包括了微博的所有功能。但對(duì)于需定制的數(shù)據(jù)請(qǐng)求服務(wù),則必須在API基礎(chǔ)上進(jìn)行擴(kuò)展開發(fā)。開發(fā)者要調(diào)用API首先需通過OAUTH2.0認(rèn)證授權(quán)。現(xiàn)在新浪微博全面采用OAUTH2.0認(rèn)證授權(quán)。在OAUTH2.0授權(quán)下通過調(diào)用API接口請(qǐng)求獲取JSON格式數(shù)據(jù)文件。通過OAUTH2.0調(diào)用API接口有兩種方式: 1) 直接使用參數(shù)傳遞。如參數(shù)名為access_token,調(diào)用方式為https://api.weibo.com/2/statuses/public_timeline.json? access_token=abcd。其中json?表示返回?cái)?shù)據(jù)格式為JSON。JSON是一種輕量級(jí)數(shù)據(jù)交換格式。JSON文件結(jié)構(gòu)簡單,不使用標(biāo)記內(nèi)容屬性的說明性標(biāo)簽。如:{“ID”:“1472368912”:“name”:“Jake”}。因此JSON文件不僅返回文件更小,而且計(jì)算機(jī)易于分析處理。 2) 在header里傳遞。如Access Token的值為abcd,調(diào)用形式為在header里添加Authorization:OAuth2 abcd。其他的接口參數(shù)正常傳遞即可。
出于商業(yè)利益和服務(wù)器安全考慮,新浪微博API從用戶維度和IP維度,對(duì)不同授權(quán)級(jí)別開發(fā)者進(jìn)行了訪問頻次限制。為防止用戶調(diào)用API進(jìn)行非法操作,新浪微博開放平臺(tái)針對(duì)API的返回?cái)?shù)據(jù)量和調(diào)用次數(shù)也進(jìn)行了嚴(yán)格限制。且微博API技術(shù)原理是HTTP輪詢(POLLING),非即時(shí)推送(realtime push)協(xié)議。調(diào)用API不能達(dá)到及時(shí)獲取最新消息的效果。
2.2 網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲(又稱網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人等),是一種按照設(shè)定規(guī)則自動(dòng)抓取萬維網(wǎng)信息的程序或腳本。初期的通用爬蟲是對(duì)萬維網(wǎng)的所有網(wǎng)頁進(jìn)行無差別抓取。其目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率。隨著萬維網(wǎng)數(shù)據(jù)形式不斷豐富和網(wǎng)絡(luò)技術(shù)的發(fā)展,為根據(jù)既定抓取目標(biāo)有選擇的獲取信息,面向垂直搜索的聚焦爬蟲應(yīng)運(yùn)而生[9]。垂直搜索的聚焦爬蟲目的是精確地抽取網(wǎng)頁內(nèi)容,并保存為結(jié)構(gòu)化數(shù)據(jù)。其重點(diǎn)和難點(diǎn)在于定制高效的網(wǎng)頁內(nèi)容分析和抽取。聚焦爬蟲從當(dāng)前抓取頁面數(shù)據(jù)中進(jìn)行分析和過濾,根據(jù)一定策略選擇URL放入后續(xù)抓取隊(duì)列,直到滿足停止條件則終止。因此可以通過合理設(shè)置URL選擇策略和頁面數(shù)據(jù)抽取策略,使用網(wǎng)絡(luò)爬蟲來獲取相關(guān)數(shù)據(jù)。
Ajax是一種創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁技術(shù)??稍诓恢匦录虞d整個(gè)網(wǎng)頁情況下,通過后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,實(shí)現(xiàn)網(wǎng)頁某個(gè)部分的異步更新。為減少網(wǎng)絡(luò)傳輸流量,提高用戶體驗(yàn)度,微博網(wǎng)站對(duì)Ajax技術(shù)應(yīng)用越來越多。目前新浪微博的評(píng)論和轉(zhuǎn)發(fā)信息都是由JavaScript動(dòng)態(tài)生成。由于Ajax頁面是由客戶端瀏覽器執(zhí)行腳本代碼動(dòng)態(tài)生成。因此網(wǎng)絡(luò)爬蟲僅能抓取web服務(wù)器返回的html文件,不能抓取JavaScript動(dòng)態(tài)生成的信息。同時(shí)由于新浪微博的用戶隱私保護(hù)策略,只有登錄的用戶才能對(duì)評(píng)論、轉(zhuǎn)發(fā)等頁面信息進(jìn)行瀏覽。因此,使用網(wǎng)絡(luò)爬蟲必須解決網(wǎng)頁客戶端動(dòng)態(tài)數(shù)據(jù)獲取和模擬登陸兩個(gè)問題。
3.1 爬蟲框架下動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)獲取技術(shù)
在網(wǎng)絡(luò)爬蟲框架中,頁面下載模塊負(fù)責(zé)網(wǎng)頁數(shù)據(jù)的下載獲取。本文針對(duì)傳統(tǒng)網(wǎng)絡(luò)爬蟲無法爬取Ajax頁面內(nèi)容數(shù)據(jù)的問題,對(duì)網(wǎng)絡(luò)爬蟲頁面下載模塊進(jìn)行改造。傳統(tǒng)網(wǎng)絡(luò)爬蟲頁面下載模塊直接使用http協(xié)議,接受并分析服務(wù)器響應(yīng)來實(shí)現(xiàn)頁面下載。然而針對(duì)社交網(wǎng)站頁面javascript動(dòng)態(tài)加載的網(wǎng)頁數(shù)據(jù),使用http協(xié)議不能取到完整頁面內(nèi)容。目前的主要有兩種思路: 1) 分析javascript邏輯,通過爬蟲在網(wǎng)頁中提取關(guān)鍵數(shù)據(jù)去構(gòu)造Ajax請(qǐng)求,最后從服務(wù)器響應(yīng)中獲取完整數(shù)據(jù)。但是由于javascript代碼使用和編寫不規(guī)范導(dǎo)致效果不很理想。 2) 在爬蟲頁面下載模塊,利用Web自動(dòng)測(cè)試工具模擬瀏覽器提取Ajax頁面內(nèi)容。直接獲取加載完整的頁面數(shù)據(jù)。目前針對(duì)這種方法已經(jīng)有比較成熟的方案,能在保證速度的情況下有較好的穩(wěn)定性。Selenium是一個(gè)開源Web功能測(cè)試工具[10]。通過javascript管理測(cè)試過程。其針對(duì)Java提供API可以和瀏覽器內(nèi)核進(jìn)行交互,其核心是webdriver,可以模擬用戶真實(shí)操作,包括瀏覽網(wǎng)頁頁面,觸發(fā)鼠標(biāo)事件、點(diǎn)擊鏈接、提交表單、輸入文字等用戶行為。通過對(duì)網(wǎng)絡(luò)爬蟲抓取框架的頁面下載模塊進(jìn)行改寫,控制瀏覽器內(nèi)核與微博Web服務(wù)器交互,持續(xù)獲取完整頁面動(dòng)態(tài)數(shù)據(jù)。即可實(shí)現(xiàn)模擬登陸以及獲取完整的Ajax頁面數(shù)據(jù)。爬蟲系統(tǒng)框架如圖1所示。其中爬蟲框架模塊劃分不是本文重點(diǎn),在此不展開闡述,詳細(xì)細(xì)節(jié)請(qǐng)參考相關(guān)引用文獻(xiàn)。
圖1 網(wǎng)絡(luò)爬蟲框架
3.2 模擬登陸
使用爬蟲對(duì)微博網(wǎng)頁進(jìn)行爬取之前,首先需要進(jìn)行模擬登錄。模擬登陸通過Java程序模擬瀏覽器行為實(shí)現(xiàn)登陸過程。模擬登陸程序通過webdriver打開登陸頁面。使用findElement方法進(jìn)行頁面元素查找和定位。在頁面元素內(nèi)通過讀取配置文件模擬輸入用戶名、密碼,提交按鈕完成模擬登陸流程。模擬登陸基本實(shí)現(xiàn)過程如下:
1) 利用webdriver打開登陸頁面。
2) 使用findElement方法在登陸頁面內(nèi)查找賬號(hào)和密碼輸入框元素,通過sendkey方法對(duì)該元素進(jìn)行傳值。如密碼輸入框元素查找方式為:findElement(By.xpath(("http://input[@node-type='password'],之后通過sendKeys(pswd)即可完成密碼輸入。
3) 通過查找和點(diǎn)擊提交按鈕完成登陸流程。
程序模擬登陸成功后,通過調(diào)用瀏覽器內(nèi)核向服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求來實(shí)現(xiàn)微博網(wǎng)頁的獲取。通過客戶端保持與服務(wù)器的session會(huì)話即可繼續(xù)訪問微博的其它數(shù)據(jù)資源。
3.3 針對(duì)社交網(wǎng)站網(wǎng)頁特征的抓取
從網(wǎng)絡(luò)數(shù)據(jù)的拓?fù)涮卣魃现v,社交網(wǎng)站數(shù)據(jù)屬性區(qū)別于一般的普通網(wǎng)站。社交網(wǎng)站網(wǎng)絡(luò)數(shù)據(jù)分為兩大類[11]:用戶信息數(shù)據(jù)和微博信息數(shù)據(jù)。用戶信息數(shù)據(jù)主要字段包括:用戶UID、昵稱、所在城市、微博數(shù)、粉絲數(shù)、關(guān)注數(shù)、注冊(cè)時(shí)間、用戶認(rèn)證類型等。微博信息數(shù)據(jù)主要字段包括:作者信息、微博ID、發(fā)布時(shí)間、內(nèi)容、評(píng)論數(shù)、轉(zhuǎn)發(fā)數(shù)等。社交網(wǎng)站數(shù)據(jù)存在兩個(gè)維度的網(wǎng)絡(luò):第一個(gè)是用戶關(guān)系網(wǎng)絡(luò)。其節(jié)點(diǎn)是用戶,邊是用戶之間的關(guān)注關(guān)系。第二個(gè)是信息傳播網(wǎng)絡(luò)。其節(jié)點(diǎn)是用戶,邊是針對(duì)同一主題用戶之間的轉(zhuǎn)發(fā)評(píng)論關(guān)系。
面對(duì)海量龐雜的微博網(wǎng)站數(shù)據(jù),必須確定合適的頁面抓取策略,才能實(shí)現(xiàn)對(duì)特定微博所有數(shù)據(jù)進(jìn)行完整獲取。本文針對(duì)社交網(wǎng)站數(shù)據(jù)的屬性特征使用如下頁面抓取策略:
1) 以微博用戶首頁設(shè)為初始頁面,作為爬蟲的入口。通過爬蟲頁面下載模塊進(jìn)行動(dòng)態(tài)頁面數(shù)據(jù)獲取,從中抽取出微博用戶發(fā)布的所有微博鏈接。
2) 將抽取出的用戶微博鏈接放入待抽取隊(duì)列。
3) 從每條微博獨(dú)立頁面中抓取微博數(shù)據(jù)信息(作者信息、微博ID、源微博ID、發(fā)布時(shí)間、內(nèi)容、評(píng)論數(shù)、轉(zhuǎn)發(fā)數(shù)、點(diǎn)贊數(shù))。
4) 從微博評(píng)論頁面中通過模擬瀏覽器行為進(jìn)行點(diǎn)擊和翻頁,抓取評(píng)論信息(評(píng)論內(nèi)容、評(píng)論時(shí)間、評(píng)論作者ID、評(píng)論作者名稱、評(píng)論作者微博主頁)。
5) 從微博轉(zhuǎn)發(fā)頁面中通過模擬瀏覽器行為進(jìn)行點(diǎn)擊和翻頁,抓取轉(zhuǎn)發(fā)數(shù)據(jù)(轉(zhuǎn)發(fā)ID、轉(zhuǎn)發(fā)源ID、轉(zhuǎn)發(fā)時(shí)間)。
6) 將每一條轉(zhuǎn)發(fā)信息作為一條微博,從中抽取出鏈接放入待抽取隊(duì)列。
然后重復(fù)步驟3)至6),由此即可以獲取特定微博用戶發(fā)布微博的完整相關(guān)信息數(shù)據(jù)。程序通過設(shè)置最大轉(zhuǎn)發(fā)層次數(shù),來控制爬蟲的抓取深度。程序抓取過程如圖2所示。
圖2 網(wǎng)頁數(shù)據(jù)爬取策略
3.4 頁面解析技術(shù)
爬蟲頁面下載模塊通過調(diào)用瀏覽器內(nèi)核,獲取微博頁面完整的HTML格式文件。經(jīng)過分析新浪微博頁面編碼,發(fā)現(xiàn)該平臺(tái)內(nèi)相同頁面類型的編碼規(guī)則一樣。因此可以針對(duì)新浪微博頁面編碼規(guī)則,深度定制微博頁面信息解析抽取模板,即可實(shí)現(xiàn)同類型微博頁面數(shù)據(jù)的解析抽取。通過將不標(biāo)準(zhǔn)的HTML語言轉(zhuǎn)換為DOM數(shù)結(jié)構(gòu),利用xpath和正則表達(dá)式等頁面解析技術(shù),可實(shí)現(xiàn)微博頁面數(shù)據(jù)的高效精確獲取。xpath使用路徑表達(dá)式對(duì)HTML頁面文件節(jié)點(diǎn)元素進(jìn)行定位選取。正則表達(dá)式通過字符串描述、匹配符合規(guī)則的字符串。使用正則表達(dá)式可摘取字符串中需要的指定內(nèi)容。把二者結(jié)合起來,通過鏈?zhǔn)匠槿】梢詼?zhǔn)確高效地解析出所需的微博數(shù)據(jù)。
通過分析微博數(shù)據(jù)編碼規(guī)范,可針對(duì)每一種微博數(shù)據(jù)進(jìn)行抽取模板定制,從而實(shí)現(xiàn)相關(guān)數(shù)據(jù)的高效全面抽取。如:在新浪微博用戶首頁中,所有微博鏈接信息均保存在DOM數(shù)結(jié)構(gòu)屬性為WB_feed WB_feed_profile的一對(duì)〈div〉節(jié)點(diǎn)內(nèi)。通過絕對(duì)路徑://[@node-type='feed_list_item_date']/@href可獲取當(dāng)前用戶發(fā)表的所有微博鏈接。在獨(dú)立微博頁面中通過絕對(duì)路徑://div[@class='WB_cardwrap WB_feed_type S_bg2']/@mid即可獲取當(dāng)前微博mid值。在微博評(píng)論頁面中通過絕對(duì)路徑://div[@node-type='replywrap']/div[@class='WB_text']/allText()可獲取評(píng)論用戶名及其評(píng)論內(nèi)容。
本文提出了基于網(wǎng)頁動(dòng)態(tài)數(shù)據(jù)獲取的微博數(shù)據(jù)爬蟲抓取方案。測(cè)試中選擇抓取新浪微博平臺(tái)軍報(bào)記者微博賬號(hào)內(nèi)微博數(shù)據(jù),包括微博信息數(shù)據(jù)、評(píng)論信息數(shù)據(jù)、轉(zhuǎn)發(fā)信息數(shù)據(jù)和相關(guān)用戶信息數(shù)據(jù)。對(duì)數(shù)據(jù)抓取效果進(jìn)行統(tǒng)計(jì)分析,對(duì)方案爬蟲性能進(jìn)行驗(yàn)證分析并針對(duì)影響其性能的原因進(jìn)行分析。
4.1 數(shù)據(jù)抓取統(tǒng)計(jì)分析
在本實(shí)驗(yàn)中對(duì)軍報(bào)記者微博賬號(hào)內(nèi)2015年2月4日14:40至2月9日16:00的100條微博數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析。爬蟲爬取時(shí)間為2月4日15:24:54,即以該時(shí)刻的100條微博數(shù)據(jù)進(jìn)行截面研究。爬蟲程序共爬取了該100條微博的共計(jì)2187條評(píng)論信息、4295條轉(zhuǎn)發(fā)信息和2489個(gè)用戶信息。其中評(píng)論信息包括評(píng)論ID、微博ID、評(píng)論用戶ID、評(píng)論用戶昵稱、評(píng)論內(nèi)容、評(píng)論時(shí)間,共六個(gè)字段值屬性。轉(zhuǎn)發(fā)信息包括轉(zhuǎn)發(fā)ID、源轉(zhuǎn)發(fā)ID、轉(zhuǎn)發(fā)時(shí)間,共三個(gè)字段值屬性。轉(zhuǎn)發(fā)層次深度未做設(shè)定,即抓取微博的所有轉(zhuǎn)發(fā)數(shù)據(jù)。用戶信息包括用戶ID、用戶主頁、用戶昵稱,共三個(gè)字段值屬性。用戶包含評(píng)論用戶和轉(zhuǎn)發(fā)用戶。綜合統(tǒng)計(jì)所有字段屬性總數(shù)據(jù)條目數(shù)量和有效數(shù)據(jù)條目數(shù)量,情況如表1所示。其中有效數(shù)據(jù)定義為程序準(zhǔn)確抽取,并正確保存在Mysql數(shù)據(jù)庫表中的字段屬性值。
表1 數(shù)據(jù)準(zhǔn)確度統(tǒng)計(jì)
從表1可以看出該方案對(duì)微博數(shù)據(jù)的抓取準(zhǔn)確度達(dá)到了較好的效果??梢詫?duì)微博傳播路徑分析、情感傾向分析等提供完整準(zhǔn)確的數(shù)據(jù)支持。
4.2 爬蟲抓取性能分析
社交網(wǎng)站數(shù)據(jù)挖掘?qū)儆诖髷?shù)據(jù)范疇。微博信息數(shù)據(jù)量龐大,輿情分析需要海量數(shù)據(jù)作為基礎(chǔ)。單進(jìn)程爬蟲往往很難滿足快速抓取大量數(shù)據(jù)進(jìn)行輿情分析的需求。本文采用支持并行架構(gòu)擴(kuò)展的網(wǎng)絡(luò)爬蟲框架,可以實(shí)現(xiàn)多線程并行爬取。本實(shí)驗(yàn)仍針對(duì)以上100條微博數(shù)據(jù),通過開啟不同線程數(shù),運(yùn)行爬蟲程序查看其運(yùn)行速度及加速比。由于實(shí)驗(yàn)數(shù)據(jù)對(duì)象實(shí)時(shí)更新變化,各次抓取數(shù)據(jù)量會(huì)存在極微小差異,但不影響實(shí)驗(yàn)結(jié)論。爬蟲程序在開啟1個(gè)線程的情況下,完成以上100條微博數(shù)據(jù)的全面抓取并持久化到數(shù)據(jù)庫,運(yùn)行時(shí)間為4554s。表2為不同線程下爬蟲并行抓取時(shí)間及加速比。
表2 并行抓取耗時(shí)及加速比
由于方案基于動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)獲取和頁面解析,爬蟲程序在運(yùn)行過程中需開啟、關(guān)閉瀏覽器,執(zhí)行Ajax動(dòng)態(tài)數(shù)據(jù)渲染,提取頁面導(dǎo)航元素,觸發(fā)導(dǎo)航事件并執(zhí)行頁面指令。因此對(duì)比微博API調(diào)用方式獲取數(shù)據(jù)更耗時(shí)。但方案以性能為代價(jià)獲取完整全面的微博數(shù)據(jù),是傳統(tǒng)微博數(shù)據(jù)爬蟲和API調(diào)用方式不能比擬的。從實(shí)驗(yàn)結(jié)果可以看出,并行爬蟲在多線程并發(fā)運(yùn)行方面具有較好的線性加速比。這說明該方案對(duì)海量微博數(shù)據(jù)的抓取有著非常好的加速效果和潛力。通過合理設(shè)置爬蟲并行線程數(shù),在保證網(wǎng)絡(luò)資源帶寬的條件下,可以快速高效的獲取微博數(shù)據(jù)。
本文介紹了新浪微博數(shù)據(jù)獲取方式,對(duì)兩種獲取方式用法與限制進(jìn)行闡述和分析。解決了新浪微博數(shù)據(jù)因API限制和網(wǎng)絡(luò)爬蟲限制而無法完整獲取的問題?;诰W(wǎng)頁動(dòng)態(tài)數(shù)據(jù)獲取技術(shù),通過模擬登陸,確定頁面爬取策略,設(shè)計(jì)微博信息抽取模板和存儲(chǔ)方式,完成新浪微博數(shù)據(jù)挖掘的完整流程。實(shí)現(xiàn)了新浪微博數(shù)據(jù)定制化挖掘方案的實(shí)驗(yàn)與應(yīng)用。實(shí)驗(yàn)表明,基于網(wǎng)頁動(dòng)態(tài)數(shù)據(jù)獲取,結(jié)合網(wǎng)絡(luò)爬蟲技術(shù)和頁面解析技術(shù),對(duì)網(wǎng)絡(luò)爬蟲進(jìn)行定制改造,能實(shí)現(xiàn)指定微博數(shù)據(jù)的高效和完整獲取,可以為社交網(wǎng)絡(luò)數(shù)據(jù)挖掘提供準(zhǔn)確全面的數(shù)據(jù)支持。
[1] ABRAHAM R, MART NEZ T. Twittter: Network properties analysis[C]//Proceedings of the CONIELECOMP 2010-20th International Conference on Electronics Communications and Computers. Cholula Puebla, Mexico: IEEE Computer Society,2010:180- 183.
[2] HAN Ruixia. The influence of microblogging on personal public partion[C]//Proceeding of the 2010 IEEE 2nd Symposium on Web Society, SWS 2010. Beijing, China: Association for Computing Machinery,2010:615-618.
[3] 游翔,葛衛(wèi)麗.微博數(shù)據(jù)獲取技術(shù)及展望[J].電子科技,2014,27(10):123-126.
[4] 陳舜華,王曉彤,等.基于微博API的分布式抓取技術(shù)[J].電信科學(xué),2013,8(25):147-149.
[5] 周立柱,林玲.聚焦爬蟲技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用,2005,25(9):1965-1969.
[6] 廉捷,周欣,曹偉.新浪微博數(shù)據(jù)挖掘方案[J].清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,51(10):1300-1305.
[7] 孫青云,等.一種基于模擬登錄的微博數(shù)據(jù)采集方案[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(3):7-8.
[8] 新浪.微博API開發(fā)文檔[EB/OL]. http://open.weibo.com/wiki/微博API,2014-11-12/2014-12-29.
[9] 劉麗杰.垂直搜索引擎中聚焦爬蟲技術(shù)的研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2012:3-9.
[10] 吳伶琳.基于Selenium的軟件自動(dòng)化測(cè)試的研究與應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2013,2(16):65-68.
[11] 郭正彪.大尺度在線社會(huì)網(wǎng)絡(luò)結(jié)構(gòu)研究[D].武漢:華中科技大學(xué),2012:15-26.
Date Crawler for Sina Microblog Based on Dynamic Webpage Date Interpreting
ZHONG Mingxiang TANG Jintao XIE Songxian WANG Ting
(College of Computer, National University of Defense Technology, Changsha 410073)
Microblogging is a new kind of information media. The mass data are generated to attracts the attention of the researchers to carry out related research. Micro-blog data acquisition is the basis and starting point for further research. This paper presents a multi-threaded crawler for Sina microblog platform based on dynamic webpage interpreting. The browser kernel is used to interpret the dynamic data of microblog webpage. Through simulated login, the page crawling strategy based on the characteristics of social networking site is determined, and the webpage parsing technology is used to custom templates of webpage to achieve user-centric microblog data acquisition. The test results show that the method can capture microblog data of user comprehensive and efficiently, provide data support for subsequent dta analysis and processing.
sina microblog, data mining, dynamic webpage, Web crawler
2015年4月2日,
2015年5月27日
國家自然科學(xué)基金(編號(hào):61200337;61472436)資助。
鐘明翔,男,碩士研究生,研究方向:自然語言處理。唐晉韜,男,博士,講師,研究方向:社會(huì)網(wǎng)絡(luò)分析、自然語言處理。謝松縣,男,博士,講師,研究方向:自然語言處理。王挺,男,博士,教授,博士生導(dǎo)師,研究方向:自然語言處理。
DOI:10.3969/j.issn.1672-9730.2015.10.026