国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法

2016-08-05 07:58
關(guān)鍵詞:瀏覽器數(shù)據(jù)處理網(wǎng)頁(yè)

沈 洪 洲

(南京郵電大學(xué)管理學(xué)院 江蘇 南京 210023)

?

一種基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法

沈 洪 洲

(南京郵電大學(xué)管理學(xué)院江蘇 南京 210023)

摘要采集大量的網(wǎng)絡(luò)數(shù)據(jù)可以為相關(guān)的科學(xué)研究提供重要的數(shù)據(jù)基礎(chǔ)。針對(duì)科研工作者無(wú)法方便靈活地采集針對(duì)性網(wǎng)絡(luò)數(shù)據(jù)的現(xiàn)狀,提出基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法,從網(wǎng)頁(yè)中析取數(shù)據(jù),或通過(guò)Ajax技術(shù)從網(wǎng)頁(yè)服務(wù)器端直接讀取結(jié)構(gòu)化的數(shù)據(jù),并對(duì)采集到的數(shù)據(jù)進(jìn)行集中處理和存儲(chǔ)。最終的執(zhí)行效果表明,該方法可以突破動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的限制,無(wú)需處理復(fù)雜的用戶登錄邏輯,并可支持多用戶場(chǎng)景下的分布式網(wǎng)絡(luò)數(shù)據(jù)采集。

關(guān)鍵詞Chrome擴(kuò)展程序網(wǎng)絡(luò)數(shù)據(jù)采集Ajax分布式

0引言

隨著互聯(lián)網(wǎng)技術(shù)與理念的不斷推陳出新,尤其是以Web 2.0為基礎(chǔ)的社會(huì)化媒體的出現(xiàn)和普及,使得廣大用戶成為互聯(lián)網(wǎng)的中心,他們通過(guò)論壇、社交網(wǎng)絡(luò)、微博、維基等應(yīng)用,不斷地創(chuàng)造和傳播各式各樣的互聯(lián)網(wǎng)內(nèi)容。這些以論壇帖文、個(gè)人狀態(tài)和日志、微博信息、維基條目等為典型主體的互聯(lián)網(wǎng)內(nèi)容,連同圍繞這些內(nèi)容產(chǎn)生的各種回復(fù)和評(píng)價(jià)一起形成了互聯(lián)網(wǎng)上隨處可見(jiàn)的海量的網(wǎng)絡(luò)數(shù)據(jù)。在“大數(shù)據(jù)”研究受到日益重視的背景下,海量網(wǎng)絡(luò)數(shù)據(jù)的重要性已經(jīng)顯而易見(jiàn),其蘊(yùn)藏的研究?jī)r(jià)值逐漸凸顯,為基于互聯(lián)網(wǎng)的輿情監(jiān)控、用戶行為分析和網(wǎng)絡(luò)社會(huì)學(xué)等方面的科學(xué)研究提供了極其重要的數(shù)據(jù)基礎(chǔ)[1]。然而,不同于靜態(tài)網(wǎng)頁(yè)中固定不變的數(shù)據(jù),此類(lèi)網(wǎng)絡(luò)數(shù)據(jù)絕大多數(shù)存在于動(dòng)態(tài)網(wǎng)頁(yè)之中,均是根據(jù)不同的訪問(wèn)場(chǎng)景由數(shù)據(jù)庫(kù)中的數(shù)據(jù)動(dòng)態(tài)封裝而成,其訪問(wèn)受到各個(gè)互聯(lián)網(wǎng)應(yīng)用服務(wù)商的嚴(yán)格控制,加之Ajax等異步網(wǎng)絡(luò)編程技術(shù)的廣泛應(yīng)用,使得如何大批量地采集具有研究?jī)r(jià)值的網(wǎng)絡(luò)數(shù)據(jù)成為許多科研工作者亟待解決的重要難題。本文從實(shí)際科研工作中的網(wǎng)絡(luò)數(shù)據(jù)采集需求出發(fā),提出一種基于Chrome瀏覽器擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法,可突破普通網(wǎng)絡(luò)爬蟲(chóng)和調(diào)用網(wǎng)站API數(shù)據(jù)采集方式的局限,幫助科研工作者以分布式的方式采集大量的具有針對(duì)性的網(wǎng)絡(luò)數(shù)據(jù)。

1網(wǎng)絡(luò)數(shù)據(jù)采集現(xiàn)狀分析

目前常見(jiàn)的網(wǎng)絡(luò)數(shù)據(jù)采集方法包括網(wǎng)絡(luò)爬蟲(chóng)和調(diào)用網(wǎng)站API兩種,其中,網(wǎng)絡(luò)爬蟲(chóng)是較早出現(xiàn)的一種網(wǎng)絡(luò)數(shù)據(jù)采集方法,它是一種能夠沿著網(wǎng)頁(yè)中的超級(jí)鏈接自動(dòng)漫游,并依據(jù)廣度優(yōu)先或深度優(yōu)先的策略抓取頁(yè)面信息的程序。傳統(tǒng)的網(wǎng)絡(luò)爬蟲(chóng)主要用于抓取新聞門(mén)戶類(lèi)、論壇類(lèi)及傳統(tǒng)博客類(lèi)網(wǎng)站的數(shù)據(jù),更擅長(zhǎng)處理靜態(tài)網(wǎng)頁(yè)的數(shù)據(jù)[2]。為了能夠更好地抓取動(dòng)態(tài)網(wǎng)頁(yè)中的數(shù)據(jù),有不少研究開(kāi)始嘗試改進(jìn)傳統(tǒng)的網(wǎng)絡(luò)爬蟲(chóng),使之能夠處理受訪問(wèn)保護(hù)的網(wǎng)頁(yè)和采用Ajax技術(shù)的網(wǎng)頁(yè)。孫青云等人[3]就提出了一種基于模擬登錄的微博數(shù)據(jù)采集方案,解決了傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)在采集微博數(shù)據(jù)時(shí)需要身份驗(yàn)證的難題,加快了微博數(shù)據(jù)的采集速度。紀(jì)偉也設(shè)計(jì)了一種采用模擬登錄技術(shù)訪問(wèn)受保護(hù)網(wǎng)頁(yè)的網(wǎng)絡(luò)數(shù)據(jù)采集系統(tǒng),并詳細(xì)闡述了模擬登錄的過(guò)程和登陸成功后Cookie的使用問(wèn)題[4]。Mesbah等人則開(kāi)發(fā)了一種叫作Crawljax工具,該工具對(duì)傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行了改進(jìn),可以很好地分析基于Ajax技術(shù)的網(wǎng)站狀態(tài)以及引起狀態(tài)變化的各類(lèi)頁(yè)面事件,從而獲取Ajax請(qǐng)求生成的靜態(tài)數(shù)據(jù)[5]。劉凡凡設(shè)計(jì)了一種面向Ajax技術(shù)的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng),采用Webkit引擎解析網(wǎng)頁(yè)中的JavaScript代碼,并據(jù)此生成Ajax數(shù)據(jù)的翻頁(yè)腳本,實(shí)現(xiàn)分頁(yè)數(shù)據(jù)的自動(dòng)提取功能[6]。

盡管可以通過(guò)網(wǎng)絡(luò)爬蟲(chóng)的一些改進(jìn)技術(shù)實(shí)現(xiàn)各類(lèi)網(wǎng)絡(luò)數(shù)據(jù)的采集,但網(wǎng)絡(luò)爬蟲(chóng)獲取的往往是整個(gè)頁(yè)面數(shù)據(jù),缺乏針對(duì)性,因此還需要采取一些額外措施對(duì)采集到的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析和整理,以得到研究所需的目標(biāo)數(shù)據(jù)。利用網(wǎng)站自身提供的API實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)采集則可以很好地解決數(shù)據(jù)針對(duì)性的問(wèn)題。越來(lái)越多的社會(huì)化媒體網(wǎng)站推出了開(kāi)放平臺(tái),提供了豐富的API,在已獲授權(quán)的情況下,第三方程序可通過(guò)這些API直接獲取網(wǎng)絡(luò)數(shù)據(jù)。通過(guò)API獲取的網(wǎng)絡(luò)數(shù)據(jù)通常以JSON或XML的格式呈現(xiàn),具有清晰的數(shù)據(jù)結(jié)構(gòu),非常便于通過(guò)程序直接進(jìn)行數(shù)據(jù)抽取[7]。然而,對(duì)于網(wǎng)站API的調(diào)用也會(huì)受到種種限制。首先,網(wǎng)站提供的API種類(lèi)可能有限制,有時(shí)并不能提供我們所需要的某類(lèi)特定數(shù)據(jù);其次,網(wǎng)站API的調(diào)用次數(shù)也會(huì)受到限制,例如人人網(wǎng)中普通授權(quán)應(yīng)用的信息獲取類(lèi)API調(diào)用配額為“單用戶每應(yīng)用150次/小時(shí)”[8],這種限制往往無(wú)法滿足大批量數(shù)據(jù)的采集需求。

綜合考慮現(xiàn)有網(wǎng)絡(luò)數(shù)據(jù)采集方法中存在的諸多不足,并且立足于實(shí)際的科研工作,本文分析并總結(jié)出科研工作者對(duì)于網(wǎng)絡(luò)數(shù)據(jù)采集方法的具體需求,概括如下:

(1) 能夠采集到受保護(hù)的網(wǎng)絡(luò)數(shù)據(jù)。Web 2.0背景下,許多網(wǎng)絡(luò)數(shù)據(jù)受到保護(hù),只有登錄以后才可以訪問(wèn)到,在某些特定的科研工作中,這些受保護(hù)的網(wǎng)絡(luò)數(shù)據(jù)都具有很高的研究?jī)r(jià)值,是科研工作需要重點(diǎn)分析的一類(lèi)網(wǎng)絡(luò)數(shù)據(jù)。

(2) 能夠靈活地采集多樣化的網(wǎng)絡(luò)數(shù)據(jù)。網(wǎng)絡(luò)上的數(shù)據(jù)種類(lèi)非常豐富,為不同目的的科研工作提供了不同的研究數(shù)據(jù),因此,可靈活地確定并采集到不同類(lèi)型的網(wǎng)絡(luò)數(shù)據(jù)顯得尤為重要。

(3) 能夠持續(xù)采集大量的網(wǎng)絡(luò)數(shù)據(jù)??茖W(xué)合理的研究結(jié)論往往來(lái)自對(duì)大批量研究數(shù)據(jù)的綜合分析,只有能夠持續(xù)地采集到大量的網(wǎng)絡(luò)數(shù)據(jù)才能很好地對(duì)科研工作起到支撐作用。

(4) 能夠采集不同用戶的網(wǎng)絡(luò)數(shù)據(jù)。單個(gè)互聯(lián)網(wǎng)用戶的網(wǎng)絡(luò)數(shù)據(jù)往往比較有限,也不能很好地證明研究結(jié)論的普適性,因此,獲取眾多不同用戶的網(wǎng)絡(luò)數(shù)據(jù)才具有真實(shí)的研究?jī)r(jià)值。

2基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集思路

為了更好地闡明本文所提方法的具體實(shí)現(xiàn)思路,可設(shè)定如下網(wǎng)絡(luò)數(shù)據(jù)采集場(chǎng)景:某研究團(tuán)隊(duì)需要采集某社會(huì)化媒體網(wǎng)站的用戶數(shù)據(jù),如個(gè)人信息、好友關(guān)系、評(píng)論、留言等。為此,研究人員招募了來(lái)自各地的眾多研究志愿者并試圖采集他們的相關(guān)數(shù)據(jù)?;谏衔膶?duì)于網(wǎng)絡(luò)數(shù)據(jù)采集方法實(shí)際需求的分析,本文基于谷歌公司Chrome瀏覽器的擴(kuò)展程序,直接從瀏覽器端解析并整理需要采集的目標(biāo)數(shù)據(jù),然后將數(shù)據(jù)通過(guò)互聯(lián)網(wǎng)發(fā)送到數(shù)據(jù)庫(kù)集中存儲(chǔ)。具體實(shí)現(xiàn)思路如圖1所示。

圖1 具體實(shí)現(xiàn)思路圖

圖1中各個(gè)組成部分的具體功能描述如下:

(1) 網(wǎng)絡(luò)數(shù)據(jù)服務(wù)器。要采集的目標(biāo)網(wǎng)絡(luò)數(shù)據(jù)由各類(lèi)社會(huì)化媒體網(wǎng)站的服務(wù)器提供,如人人網(wǎng)服務(wù)器、新浪微博服務(wù)器等。服務(wù)器端的網(wǎng)絡(luò)數(shù)據(jù)會(huì)以兩種方式被傳遞給客戶端的瀏覽器:一種是服務(wù)器端將數(shù)據(jù)整合成網(wǎng)頁(yè)后直接發(fā)送到客戶端,例如數(shù)據(jù)量較小的用戶個(gè)人信息;另一種是客戶端的網(wǎng)頁(yè)通過(guò)Ajax技術(shù)請(qǐng)求并獲取到服務(wù)器上的數(shù)據(jù),然后再將數(shù)據(jù)填入已經(jīng)載入的網(wǎng)頁(yè)中,例如大量評(píng)論數(shù)據(jù)的分頁(yè)顯示。

(2) 網(wǎng)絡(luò)數(shù)據(jù)采集程序。網(wǎng)絡(luò)數(shù)據(jù)采集程序以Chrome擴(kuò)展程序的形式直接運(yùn)行于客戶端的Chrome瀏覽器,可以直接從已載入的網(wǎng)頁(yè)中解析出目標(biāo)數(shù)據(jù),也可以以Ajax方式根據(jù)目標(biāo)數(shù)據(jù)的訪問(wèn)地址直接從網(wǎng)絡(luò)數(shù)據(jù)服務(wù)器上獲取到目標(biāo)數(shù)據(jù)。當(dāng)完成目標(biāo)數(shù)據(jù)的采集后,采集程序再將數(shù)據(jù)提交給后臺(tái)的數(shù)據(jù)處理服務(wù)器,供整理和存儲(chǔ)??梢?jiàn),網(wǎng)絡(luò)數(shù)據(jù)采集程序的基礎(chǔ)是必須分析出目標(biāo)數(shù)據(jù)的傳遞方式,弄清楚數(shù)據(jù)在網(wǎng)頁(yè)中的具體位置或數(shù)據(jù)的具體請(qǐng)求地址。對(duì)于那些受到保護(hù)的網(wǎng)絡(luò)數(shù)據(jù),可以在志愿者登錄到網(wǎng)站之后再運(yùn)行數(shù)據(jù)采集程序,不需要志愿者提供用戶名密碼,也可避免模擬登錄網(wǎng)站的復(fù)雜邏輯。

(3) 數(shù)據(jù)處理服務(wù)器。數(shù)據(jù)處理服務(wù)器運(yùn)行于后臺(tái),提供一系列基于REST模式的調(diào)用接口,網(wǎng)絡(luò)數(shù)據(jù)采集程序可通過(guò)這些接口將采集到的目標(biāo)數(shù)據(jù)發(fā)送到數(shù)據(jù)處理服務(wù)器。數(shù)據(jù)處理服務(wù)器可在后臺(tái)對(duì)數(shù)據(jù)進(jìn)行加工、整理和存儲(chǔ)。數(shù)據(jù)處理服務(wù)器可置于互聯(lián)網(wǎng)之上,位于不同地理位置的志愿者只要能訪問(wèn)互聯(lián)網(wǎng)即可完成網(wǎng)絡(luò)數(shù)據(jù)的采集。

(4) 數(shù)據(jù)庫(kù)。即普通的關(guān)系型數(shù)據(jù)庫(kù),主要用于集中存儲(chǔ)加工處理后的研究數(shù)據(jù)。

3關(guān)鍵技術(shù)實(shí)現(xiàn)

為能更為詳細(xì)地闡釋基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法關(guān)鍵技術(shù)的實(shí)現(xiàn)細(xì)節(jié),本文以采集人人網(wǎng)用戶的狀態(tài)數(shù)據(jù)為例,對(duì)網(wǎng)絡(luò)數(shù)據(jù)采集程序和數(shù)據(jù)處理服務(wù)程序這兩個(gè)核心組件的具體實(shí)現(xiàn)過(guò)程進(jìn)行說(shuō)明。

3.1網(wǎng)絡(luò)數(shù)據(jù)采集程序的實(shí)現(xiàn)

Chrome瀏覽器的擴(kuò)展程序是網(wǎng)絡(luò)數(shù)據(jù)采集程序的實(shí)現(xiàn)基礎(chǔ),它在本質(zhì)上是一段基于HTML、JavaScript和CSS等網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)的小程序。Chrome瀏覽器的擴(kuò)展程序可以被用來(lái)更改或者增強(qiáng)Chrome瀏覽器的功能,例如,通過(guò)內(nèi)容腳本或者跨源請(qǐng)求實(shí)現(xiàn)與網(wǎng)頁(yè)或者網(wǎng)絡(luò)服務(wù)器之間的交互,也可以通過(guò)擴(kuò)展程序調(diào)用書(shū)簽和標(biāo)簽頁(yè)等Chrome瀏覽器自帶的功能。擴(kuò)展程序可以有自己的用戶界面,通常以兩種形式來(lái)觸發(fā)這個(gè)界面——瀏覽器動(dòng)作和網(wǎng)頁(yè)動(dòng)作。當(dāng)擴(kuò)展程序需要作用于許多不同的網(wǎng)頁(yè)時(shí),可以選擇瀏覽器動(dòng)作;當(dāng)擴(kuò)展程序只需作用于某個(gè)特定的網(wǎng)頁(yè),且只有在該網(wǎng)頁(yè)出現(xiàn)才需要起作用時(shí),可以選擇網(wǎng)頁(yè)動(dòng)作[9]。本文討論的網(wǎng)絡(luò)數(shù)據(jù)采集方法將采集來(lái)自不同網(wǎng)頁(yè)的數(shù)據(jù),故選擇網(wǎng)頁(yè)動(dòng)作。當(dāng)用戶點(diǎn)擊擴(kuò)展程序圖標(biāo)后,程序在后臺(tái)執(zhí)行網(wǎng)絡(luò)數(shù)據(jù)的采集動(dòng)作,并在彈出的界面內(nèi)顯示數(shù)據(jù)采集的進(jìn)程。

(1) 目標(biāo)數(shù)據(jù)傳遞方式分析

在正式開(kāi)發(fā)網(wǎng)絡(luò)數(shù)據(jù)采集程序之前,必須對(duì)將要采集的目標(biāo)數(shù)據(jù)的傳遞方式進(jìn)行詳細(xì)分析,為此,我們需要用到HTTP分析工具(如Chrome瀏覽器自帶的“開(kāi)發(fā)者工具”)。利用HTTP分析工具對(duì)人人網(wǎng)的訪問(wèn)過(guò)程進(jìn)行分析,可以很容易發(fā)現(xiàn)在本例中需要首先獲得人人網(wǎng)用戶的編號(hào),這是對(duì)人人網(wǎng)用戶的唯一標(biāo)識(shí),也是獲取該用戶狀態(tài)數(shù)據(jù)的基礎(chǔ)。HTTP分析結(jié)果顯示,可以通過(guò)直接訪問(wèn)網(wǎng)址“http://guide.renren.com/guide”來(lái)獲得網(wǎng)頁(yè)文件,其中“XN.user, {′id′:′373465171′”處即含有用戶編號(hào)(即373465171)。因此,可以直接從網(wǎng)頁(yè)中析取用戶編號(hào),即通過(guò)字符串處理的方法處理網(wǎng)頁(yè)內(nèi)容,并取得用戶編號(hào)。進(jìn)一步的HTTP分析可以發(fā)現(xiàn),可以利用已獲得的用戶編號(hào),通過(guò)Ajax方式訪問(wèn)網(wǎng)址“http://status.renren.com/GetSomeomeDoingList.do?userId=X&curpage=Y”即能獲得用戶的狀態(tài)數(shù)據(jù),其中X處用用戶編號(hào)替換,Y為狀態(tài)數(shù)據(jù)的頁(yè)碼(考慮狀態(tài)數(shù)據(jù)較多需要翻頁(yè)的情況)。以上網(wǎng)址返回的用戶狀態(tài)數(shù)據(jù)以JSON文件的形式存在,可通過(guò)JSON操作直接析取出需要的狀態(tài)數(shù)據(jù),如編號(hào)、發(fā)布時(shí)間、評(píng)論總數(shù)和狀態(tài)內(nèi)容等。

(2) 目標(biāo)數(shù)據(jù)采集過(guò)程

在掌握目標(biāo)數(shù)據(jù)的傳遞方式之后,可針對(duì)具體的傳遞方式編寫(xiě)網(wǎng)絡(luò)數(shù)據(jù)采集程序?qū)崿F(xiàn)目標(biāo)數(shù)據(jù)的采集過(guò)程。

首先,作為一個(gè)Chrome瀏覽器的擴(kuò)展程序,本例中網(wǎng)絡(luò)數(shù)據(jù)采集程序最核心的文件是manifest.json,它定義了本程序的所有關(guān)鍵屬性,包括最重要的文件和功能。在manifest.json中,聲明了程序采用瀏覽器動(dòng)作,并指明彈出的網(wǎng)頁(yè)文件名為popup.html,更重要的是,還通過(guò)permissions參數(shù)給出了本程序可訪問(wèn)的網(wǎng)址,除了所有人人網(wǎng)網(wǎng)頁(yè)的網(wǎng)址(http://*.renren.com/*, https://*.renren.com/*)外,還需包括數(shù)據(jù)處理服務(wù)器的網(wǎng)址,因?yàn)椴杉绦蛐柘驍?shù)據(jù)處理服務(wù)器提交結(jié)果數(shù)據(jù)。

在popup.html中加載popup.js,這是一個(gè)自行編寫(xiě)的JavaScript腳本程序,是實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)采集過(guò)程的主體文件。由于popup.js中用到JQuery框架的Ajax調(diào)用方法,因此,popup.html中還需要加載jquery.min.js。本例中,popup.js的程序邏輯可以分為三個(gè)主要步驟:①獲得用戶編號(hào);②通過(guò)用戶編號(hào)獲得用戶狀態(tài)數(shù)據(jù);③將采集完成的狀態(tài)數(shù)據(jù)提交至數(shù)據(jù)處理服務(wù)器。此處,將重點(diǎn)討論以采集數(shù)據(jù)為主要目的的前兩個(gè)步驟。

獲取用戶編號(hào)的工作由getUserID方法實(shí)現(xiàn)。在該方法中,首先通過(guò)Ajax請(qǐng)求訪問(wèn)網(wǎng)址“http://guide.renren.com/guide”,以獲取包含用戶編號(hào)的網(wǎng)頁(yè)。然后,將網(wǎng)頁(yè)視為普通文本并通過(guò)文本處理技術(shù)析取出用戶編號(hào)。最后,通過(guò)用戶編號(hào)調(diào)用獲取用戶狀態(tài)數(shù)據(jù)的方法。具體的程序流程如圖2所示。

圖2 getUserID方法的程序流程圖

用戶狀態(tài)的獲取通過(guò)getUserStatus方法實(shí)現(xiàn),該方法旨在通過(guò)用戶編號(hào)獲取該用戶的狀態(tài)數(shù)據(jù)。當(dāng)狀態(tài)數(shù)據(jù)較多時(shí)會(huì)出現(xiàn)分頁(yè)的情況,必須確定當(dāng)前獲取的狀態(tài)數(shù)據(jù)處于哪一頁(yè)。因此,getUserStatus方法有用戶編號(hào)(userID)和頁(yè)碼(n)這兩個(gè)參數(shù),在getUserID方法中調(diào)用getUserStatus方法時(shí),參數(shù)n設(shè)定為0,即從第0頁(yè)開(kāi)始獲取數(shù)據(jù)。getUserStatus方法的實(shí)現(xiàn)依然基于Ajax請(qǐng)求,具體的訪問(wèn)地址由用戶編號(hào)和頁(yè)碼共同決定(請(qǐng)參考“目標(biāo)數(shù)據(jù)傳遞方式分析”部分的分析結(jié)果)。如果請(qǐng)求沒(méi)有異常,則會(huì)獲得JSON格式的狀態(tài)數(shù)據(jù),通過(guò)JSON操作可以很方便地獲取到目標(biāo)數(shù)據(jù),其核心代碼如下:

function getUserStatus(userID,n){

//獲取第n頁(yè)的狀態(tài)數(shù)據(jù)

……

//此處省略Ajax請(qǐng)求的發(fā)起代碼

success:function(msg){

//請(qǐng)求成功,獲取并解析返回的數(shù)據(jù)

//取得狀態(tài)列表,“doingArray”為人人網(wǎng)規(guī)定的標(biāo)識(shí)

var statusList = msg.doingArray;

if(statusList.length>0){

//狀態(tài)列表不為空

for(var i=0;i

//依次處理狀態(tài)數(shù)據(jù)

console.log(″Status id: ″+ statusList[i].id.toString());

status = {

//需要的狀態(tài)信息

″sid″: statusList[i].id.toString(),

//狀態(tài)編號(hào)

″stime″: statusList[i].dtime,

//狀態(tài)發(fā)布時(shí)間

//狀態(tài)評(píng)論數(shù)

″scomment_count″: statusList[i].comment_count,

″scontent″: statusList[i].content

//狀態(tài)內(nèi)容

};

userStatus.push(status);

//用數(shù)組存儲(chǔ)狀態(tài)數(shù)據(jù)

}

getUserStatus(userID,n+1);

//繼續(xù)采集下一頁(yè)狀態(tài)數(shù)據(jù)

}else{

//狀態(tài)列表為空,已無(wú)數(shù)據(jù)可采,準(zhǔn)備提交數(shù)據(jù)

submitResult();

//通過(guò)該方法提交結(jié)果數(shù)據(jù)

}},

......

}

(3) 結(jié)果數(shù)據(jù)的提交過(guò)程

當(dāng)完成用戶所有狀態(tài)數(shù)據(jù)的采集之后,需要將數(shù)據(jù)提交至數(shù)據(jù)處理服務(wù)器進(jìn)行集中的處理和存儲(chǔ),以便于科學(xué)研究的進(jìn)一步使用。數(shù)據(jù)處理服務(wù)器提供的REST接口可以讓網(wǎng)絡(luò)數(shù)據(jù)采集程序很方便地通過(guò)遠(yuǎn)程調(diào)用實(shí)現(xiàn)數(shù)據(jù)提交。在本例中,submitResult方法可將已采集到的狀態(tài)數(shù)據(jù)提交給數(shù)據(jù)處理服務(wù)器。首先,將用戶編號(hào)和用戶的所有狀態(tài)數(shù)據(jù)封裝成一個(gè)JSON數(shù)據(jù)對(duì)象,然后以Ajax方式調(diào)用數(shù)據(jù)處理服務(wù)器提供的狀態(tài)數(shù)據(jù)接收接口(例如http://example.com/study/status),通過(guò)POST方法將封裝有狀態(tài)數(shù)據(jù)的JSON對(duì)象整體提交至數(shù)據(jù)處理服務(wù)器,最后根據(jù)數(shù)據(jù)提交結(jié)果通知用戶數(shù)據(jù)采集是否順利完成。submitResult方法完整的實(shí)現(xiàn)代碼如下:

function submitResult(){

results={

//封裝狀態(tài)數(shù)據(jù)的JSON對(duì)象

″userID″: userID,

″userStatus″: userStatus };

$.ajax({

//發(fā)起Ajax請(qǐng)求

url:″http://example.com/study/status″,

//REST接口

data:JSON.stringify(results),

//將數(shù)據(jù)加入到請(qǐng)求中

type:″post″,

//設(shè)定提交方法

dataType:″html″,

contentType:″application/json;charset=UTF-8″,

success:function(msg){

if(msg==″OK″){

//提交數(shù)據(jù)成功

console.log(″Succeed to submit data.″);

$(″#waiting″).text(″采集數(shù)據(jù)完成。″);

//通知用戶

}else{

//提交數(shù)據(jù)失敗

console.log(″Submit data failed:″+msg);

$(″#waiting″).text(″采集數(shù)據(jù)失敗?!?;

}

},

error:function(xhr){ alert(″提交數(shù)據(jù)發(fā)生錯(cuò)誤!″); }

});

}

3.2數(shù)據(jù)處理服務(wù)程序的實(shí)現(xiàn)

數(shù)據(jù)處理服務(wù)程序?qū)嶋H是一個(gè)可以部署在互聯(lián)網(wǎng)上的Web應(yīng)用,它提供REST接口供網(wǎng)絡(luò)數(shù)據(jù)采集程序調(diào)用,從而獲得已被采集到的狀態(tài)數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行處理并存儲(chǔ)至后臺(tái)數(shù)據(jù)庫(kù)。本文研究基于Spring框架開(kāi)發(fā)了一個(gè)簡(jiǎn)單的Web應(yīng)用,通過(guò)“/status”接口接收狀態(tài)數(shù)據(jù),其核心處理過(guò)程的順序如圖3所示。

圖3 數(shù)據(jù)處理服務(wù)程序的順序圖

圖3中RESTConroller、DataService和DAO是數(shù)據(jù)處理服務(wù)程序的主要程序模塊,它們的詳細(xì)功能闡述如下:

(1) RESTController,是直接處理網(wǎng)絡(luò)數(shù)據(jù)采集程序REST調(diào)用的模塊,它通過(guò)HTTP協(xié)議獲取采集程序提交的用戶狀態(tài)數(shù)據(jù),并進(jìn)一步將數(shù)據(jù)解析成JSON對(duì)象交給DataService處理。

(2) DataService,是處理并抽取已采集的具體網(wǎng)絡(luò)數(shù)據(jù)的核心模塊,它利用JSON處理工具獲取諸如用戶編號(hào)、狀態(tài)編號(hào)、狀態(tài)內(nèi)容等具體的數(shù)據(jù)項(xiàng),然后構(gòu)建相應(yīng)的Java數(shù)據(jù)對(duì)象,交給DAO處理。

(3) DAO,是負(fù)責(zé)將已采集網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行持久化的模塊,它直接操作后臺(tái)的關(guān)系型數(shù)據(jù)庫(kù),將采集到的網(wǎng)絡(luò)數(shù)據(jù)存入數(shù)據(jù)庫(kù)。

4方法執(zhí)行效果

本文基于Chrome擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法已在實(shí)際研究工作中成功應(yīng)用。研究招募了若干名志愿者,在向志愿者闡明研究意圖并得到志愿者同意的情況下,請(qǐng)志愿者在Chrome瀏覽器上安裝網(wǎng)絡(luò)數(shù)據(jù)采集程序,然后登錄人人網(wǎng)并點(diǎn)擊程序圖標(biāo),數(shù)據(jù)采集程序啟動(dòng)并完成研究數(shù)據(jù)的采集。網(wǎng)絡(luò)數(shù)據(jù)采集程序的運(yùn)行環(huán)境沒(méi)有特殊要求,志愿者只需安裝最新的Chrome瀏覽器即可。數(shù)據(jù)處理服務(wù)器的操作系統(tǒng)為L(zhǎng)inux,應(yīng)用服務(wù)器軟件為Apache Tomcat 5.5.36,采用1.6版的Java運(yùn)行環(huán)境,后臺(tái)數(shù)據(jù)庫(kù)為MySQL 5.0.18。

當(dāng)志愿者登錄人人網(wǎng)之后,點(diǎn)擊右上角的“S”圖標(biāo)即可運(yùn)行網(wǎng)絡(luò)數(shù)據(jù)采集程序,數(shù)據(jù)采集的進(jìn)程在彈出的界面上展示給志愿者。具體如圖4所示。

圖4 網(wǎng)絡(luò)數(shù)據(jù)采集程序圖標(biāo)和界面

通過(guò)Chrome瀏覽器的開(kāi)發(fā)者工具可以看到網(wǎng)絡(luò)數(shù)據(jù)采集程序輸出的日志信息(如圖5所示),從而可以更準(zhǔn)確地掌握數(shù)據(jù)采集的進(jìn)程。

圖5 網(wǎng)絡(luò)數(shù)據(jù)采集程序的后臺(tái)日志

當(dāng)網(wǎng)絡(luò)數(shù)據(jù)采集程序執(zhí)行完畢后,通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)的界面可以查詢到已經(jīng)被采集到的用戶狀態(tài)數(shù)據(jù)。

5結(jié)語(yǔ)

依托實(shí)際的科研工作,本文提出一種基于Chrome瀏覽器擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法,在系統(tǒng)分析網(wǎng)絡(luò)數(shù)據(jù)采集實(shí)際需求的基礎(chǔ)上,詳細(xì)介紹了本方法的整體技術(shù)思路和核心組件的具體實(shí)現(xiàn)過(guò)程?;贑hrome瀏覽器擴(kuò)展程序的網(wǎng)絡(luò)數(shù)據(jù)采集方法彌補(bǔ)了網(wǎng)絡(luò)爬蟲(chóng)和網(wǎng)站API調(diào)用等常見(jiàn)網(wǎng)絡(luò)數(shù)據(jù)采集方法的不足,可以簡(jiǎn)單靈活的方式采集Web 2.0環(huán)境下受保護(hù)的各類(lèi)網(wǎng)絡(luò)數(shù)據(jù),還可很方便地支持多用戶場(chǎng)景下的分布式網(wǎng)絡(luò)數(shù)據(jù)采集,為解決互聯(lián)網(wǎng)背景下大數(shù)據(jù)研究的源數(shù)據(jù)獲取問(wèn)題提供了一種新的解決方案。需要說(shuō)明的是,本文所提的網(wǎng)絡(luò)數(shù)據(jù)采集方法還僅是一種新的嘗試,離完善的網(wǎng)絡(luò)數(shù)據(jù)采集工具還有一定的距離,在功能的完整性和可擴(kuò)展性上還有許多工作要做。

參考文獻(xiàn)

[1] Snijders C, Matzat U, Reips U. “Big Data”: Big Gaps of Knowledge in the Field of Internet Science[J]. International Journal of Internet Science, 2012,7(1):1-5.

[2] 夏冰,高軍,王騰蛟,等.一種高效的動(dòng)態(tài)腳本網(wǎng)站有效頁(yè)面獲取方法[J]. 軟件學(xué)報(bào),2009,20(S1):176-183.

[3] 孫青云, 王俊峰,趙宗渠,等.一種基于模擬登錄的微博數(shù)據(jù)采集方案[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(3):6-10.

[4] 紀(jì)偉. 微博數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 石家莊: 河北科技大學(xué),2013.

[5] Mesbah A, Deursen A V, Lenselink S. Crawling Ajax-Based Web Applications through Dynamic Analysis of User Interface State Changes[J]. ACM Transactions on the Web, 2012,6(1):1-30.

[6] 劉凡凡. 支持Ajax的定址網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的研究與實(shí)現(xiàn)[D]. 北京: 北京郵電大學(xué), 2012.

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

[8] 人人網(wǎng)開(kāi)放平臺(tái). 接口調(diào)用的配額權(quán)限[EB/OL]. 2014-10-21. http://wiki.dev.renren.com/wiki/API_Quota.

[9] Google. Overview of Chrome Extension[EB/OL]. 2014-10-05. https://developer.chrome.com/extensions/overview.

收稿日期:2015-04-01。國(guó)家自然科學(xué)基金項(xiàng)目(71403134);教育部人文社會(huì)科學(xué)研究青年基金項(xiàng)目(14YJCZH122);江蘇高校哲學(xué)社會(huì)科學(xué)研究基金項(xiàng)目(2014SJB009)。沈洪洲,講師,主研領(lǐng)域:社會(huì)化媒體。

中圖分類(lèi)號(hào)TP302

文獻(xiàn)標(biāo)識(shí)碼A

DOI:10.3969/j.issn.1000-386x.2016.07.003

AN INTERNET DATA COLLECTION METHOD BASED ON CHROME EXTENSION

Shen Hongzhou

(SchoolofManagement,NanjingUniversityofPostsandTelecommunications,Nanjing210023,Jiangsu,China)

AbstractCollecting large amounts of Internet data can provide important data base for relevant scientific research. For the current situation that researchers can’t easily and flexibly collect targeted Internet data, this paper proposes a Chrome extension-based Internet data collection method, which will extract data from a Webpage, or read the structured data directly from Webpage server with Ajax technology, and makes centralised processing and storage for the collected data. The final implementation results indicate that this new method can break through the restrictions of dynamic Webpage technology, avoids the complex logic of user login and supports distributed Internet data collection in multi-user scenarios as well.

KeywordsChrome extensionInternet data collectionAjaxDistributed

猜你喜歡
瀏覽器數(shù)據(jù)處理網(wǎng)頁(yè)
認(rèn)知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補(bǔ)與極大似然估計(jì)法*
ILWT-EEMD數(shù)據(jù)處理的ELM滾動(dòng)軸承故障診斷
反瀏覽器指紋追蹤
基于CSS的網(wǎng)頁(yè)導(dǎo)航欄的設(shè)計(jì)
基于HTML5靜態(tài)網(wǎng)頁(yè)設(shè)計(jì)
基于URL和網(wǎng)頁(yè)類(lèi)型的網(wǎng)頁(yè)信息采集研究
環(huán)球?yàn)g覽器
網(wǎng)頁(yè)制作在英語(yǔ)教學(xué)中的應(yīng)用
基于希爾伯特- 黃變換的去噪法在外測(cè)數(shù)據(jù)處理中的應(yīng)用
基于POS AV610與PPP的車(chē)輛導(dǎo)航數(shù)據(jù)處理