基于瀏覽器測試組件的qq群數(shù)據(jù)獲取方法與系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及社交網(wǎng)絡(luò)數(shù)據(jù)采集領(lǐng)域,是一種基于瀏覽器測試組件的QQ群數(shù)據(jù)獲取的方法,以實(shí)現(xiàn)更有針對性、準(zhǔn)確性的QQ群數(shù)據(jù)獲取的方法和系統(tǒng)。
【背景技術(shù)】
[0002]騰訊QQ是目前國內(nèi)最具影響力的社交網(wǎng)絡(luò),QQ注冊用戶由1999年的2人(馬化騰和張志東)到現(xiàn)在已經(jīng)發(fā)展到上億用戶,2013年8月QQ活躍用戶數(shù)已達(dá)8.185億,2014年4月11日21點(diǎn)11分在線人數(shù)突破兩億,QQ用戶可以在QQ群中發(fā)表文本和圖片消息、上傳相冊圖片、上傳文件、組織活動(dòng)投票等操作,如今已成為騰訊公司的代表之作。頂?shù)陌l(fā)展和普及同其自身所具備的特征有著必然的聯(lián)系。IM具有實(shí)時(shí)性、在線性與文本交互性等特征,滿足了人們在日常生活與辦公環(huán)境中交流與協(xié)作的需要。
[0003]當(dāng)前針對QQ的信息獲取的方法主要有兩種:
[0004](I)數(shù)據(jù)庫破解,即對即時(shí)通信通信軟件運(yùn)行后存取的嵌入式數(shù)據(jù)庫進(jìn)行破解。此方法對QQ群信息采集而言技術(shù)實(shí)現(xiàn)難度較大,因?yàn)镼Q客戶端本地?cái)?shù)據(jù)庫與QQ版本的變動(dòng)有較大關(guān)系,通常會通過MD5加密數(shù)據(jù)庫文件,或者是數(shù)據(jù)和數(shù)據(jù)庫文件的雙重加密,破解難度相當(dāng)大,破解成本無法控制。
[0005](2)模擬web版QQ通信過程,即對那些提供web訪問的即時(shí)通信軟件進(jìn)行模擬http的get和post請求,獲取數(shù)據(jù)。QQ雖然有web的訪問方式(如SmartQQ),但是此方法對采集QQ而言工作量大,繁瑣。需要對訪問QQ的每一條指令進(jìn)行抓包分析,并獲取相應(yīng)的get或post地址及內(nèi)容。另外其通信過程本質(zhì)上采用了異步加載的技術(shù),Web通信過程往往一次數(shù)據(jù)請求存在多個(gè)請求依賴,下一次請求往往需要上一次請求的結(jié)果作為輸入,對此通信過程分析工作復(fù)雜,難以覆蓋所有返回的結(jié)果。隨著WebQQ協(xié)議版本的升級,采集系統(tǒng)也需要隨之進(jìn)行相應(yīng)的潛在大規(guī)模修改,后期工作量很大,維護(hù)不容易。
[0006]由于QQ客戶端協(xié)議的私有性,WEB端QQ協(xié)議頻繁更改以及QQ開放API的局限性,并不適合對其大規(guī)模采集。
[0007]瀏覽器測試組件(browser automat1n)是一種基于瀏覽器內(nèi)核的測試工具,無需特殊設(shè)置即可使用。它最初主要是面向web應(yīng)用,通過模擬用戶行為進(jìn)行web應(yīng)用與瀏覽器的兼容性測試、功能測試和壓力測試等。基于瀏覽器測試組件的數(shù)據(jù)獲取方式,由高級程序驅(qū)動(dòng)瀏覽器測試接口,實(shí)現(xiàn)自動(dòng)化的網(wǎng)頁瀏覽。待瀏覽器完成JS解析和網(wǎng)頁渲染后,通過對網(wǎng)頁DOM元素定位并解析后可以獲取AJAX加載的數(shù)據(jù)。這種方式能夠獲取全部的社交網(wǎng)絡(luò)數(shù)據(jù),避免官方API方式的限制。
[0008]綜上分析,目前針對數(shù)據(jù)獲取技術(shù)和方法由于不同平臺特性難以做到通用,同時(shí)針對部分社交網(wǎng)絡(luò)的數(shù)據(jù)獲取版本依賴性較大,靈活性較低,魯棒性較差,長期來說,維護(hù)升級的工作量巨大。
【發(fā)明內(nèi)容】
[0009]基于以上分析,為了實(shí)現(xiàn)對QQ群信息和消息的采集,本發(fā)明提出了一種基于瀏覽器測試組件的QQ群數(shù)據(jù)獲取方法與系統(tǒng)。
[0010]本發(fā)明主要包括兩個(gè)方面:
[0011](I)通過瀏覽器測試組件獲取QQ群的資料信息和即時(shí)聊天消息。
[0012](2)基于瀏覽器測試組件的并行化QQ群消息獲取。
[0013]具體地,本發(fā)明包含以下內(nèi)容:
[0014]一種基于瀏覽器測試組件的QQ群數(shù)據(jù)獲取方法,包括以下步驟:
[0015]I)在客戶端通過瀏覽器測試組件的端口,啟動(dòng)瀏覽器,跳轉(zhuǎn)進(jìn)入Web端QQ頁面;
[0016]2)模擬用戶行為,登陸欲獲取QQ群數(shù)據(jù)的QQ采集賬號;
[0017]3)通過對QQ采集賬號登陸的頁面DOM樹的監(jiān)聽,不斷獲取即時(shí)信息和非即時(shí)信息,并存儲到MySQL數(shù)據(jù)庫。
[0018]進(jìn)一步地,所述瀏覽器測試組件是在啟動(dòng)瀏覽器之前進(jìn)行初始化,并向?yàn)g覽器注入JavaScript庫,用于執(zhí)行客戶端發(fā)送的命令請求的核心組件。
[0019]在本發(fā)明中,我們引入了無界面瀏覽器(headless browser)的應(yīng)用,無界面瀏覽器的優(yōu)勢在于包含了瀏覽器內(nèi)核但是沒有UI界面,這樣通過避免圖形渲染和加載可以減少計(jì)算機(jī)資源占用。然而,本發(fā)明同時(shí)支持有界面瀏覽器(如Chr0me、Fieref0X等),對于當(dāng)前普遍使用的異步加載技術(shù),基于有界面瀏覽器也可以獲取較好的性能。
[0020]進(jìn)一步地,步驟I)包括:通過瀏覽器測試組件中的Hub組件不同端口實(shí)現(xiàn)多個(gè)瀏覽器啟動(dòng),客戶端針對每個(gè)瀏覽器啟動(dòng)一個(gè)線程(可根據(jù)實(shí)際需要,編寫用于調(diào)用瀏覽器測試組件和數(shù)據(jù)處理等功能的程序來實(shí)現(xiàn)),即通過多線程實(shí)現(xiàn)對多個(gè)瀏覽器的控制,每個(gè)線程對各自啟動(dòng)的瀏覽器分別發(fā)送命令請求。通過該過程可以實(shí)現(xiàn)基于瀏覽器測試組件的并行化QQ群消息獲取。
[0021]進(jìn)一步地,步驟2)中所述用戶行為包括點(diǎn)擊、輸入、拖拽等行為操作。
[0022]進(jìn)一步地,步驟2)包括:登陸時(shí)輸入QQ采集賬號的賬號和密碼,通過定位頁面驗(yàn)證碼元素節(jié)點(diǎn),判斷是否需要人工輸入驗(yàn)證碼,若需要,則提示操作人員進(jìn)行人工輸入,等以上流程完畢,點(diǎn)擊登陸按鈕進(jìn)行登陸。
[0023]進(jìn)一步地,步驟3)中客戶端通過調(diào)用瀏覽器測試組件提供的不同接口發(fā)送瀏覽器測試組件規(guī)定的相應(yīng)參數(shù),瀏覽器測試組件接收參數(shù),對客戶端請求進(jìn)行解析,然后通過Http Proxy發(fā)送JS命令通知JavaScript庫執(zhí)行響應(yīng)操作對瀏覽器頁面DOM樹進(jìn)行監(jiān)聽。
[0024]進(jìn)一步地,步驟3)中,獲取即時(shí)信息包括以下步驟:
[0025]1-1)登陸跳轉(zhuǎn)成功以后,等待頁面元素加載完畢,模擬用戶行為點(diǎn)擊進(jìn)入QQ群組界面。
[0026]1-2)通過任務(wù)調(diào)度策略(可根據(jù)實(shí)際需要自行設(shè)定策略)分配單個(gè)群的時(shí)間片,按策略進(jìn)行輪詢,監(jiān)聽并獲取新消息。
[0027]1- 3)直到所有群輪詢完畢,重復(fù)步驟1-2)。
[0028]進(jìn)一步地,步驟3)中,獲取非即時(shí)信息包括以下步驟:
[0029]2 -1)登陸跳轉(zhuǎn)成功以后,等待頁面元素加載完畢,獲取頁面中當(dāng)前賬號已經(jīng)加入的群列表,通過模擬用戶點(diǎn)擊,完整加載所有群。
[0030]2 - 2)根據(jù)群列表進(jìn)行輪詢,首先進(jìn)入群成員列表頁面。在此頁面,通過頁面元素定位可獲取群公告和群成員列表。判斷群公告是否有更新,如有,則寫入數(shù)據(jù)庫,若沒有,則不做寫入數(shù)據(jù)庫操作。判斷群成員列表變動(dòng),如有新成員加入,則寫入數(shù)據(jù)庫,若有成員已退出該群,則修改數(shù)據(jù)庫中該成員狀態(tài)。
[0031]2 - 3)跳轉(zhuǎn)進(jìn)入群共享文件頁面,通過頁面元素定位獲取共享文件信息,判斷是否有更新,有則寫入數(shù)據(jù)庫,沒有則跳過。
[0032]2 - 4)跳轉(zhuǎn)進(jìn)入群相冊頁面,通過頁面元素定位獲取群相冊信息,判斷是否有更新,有則寫入數(shù)據(jù)庫,沒有則跳過。
[0033]2 -5)若群列表未輪詢完畢,則跳轉(zhuǎn)至步驟2-2)。若群列表輪詢完畢,則關(guān)閉瀏覽器。
[0034]進(jìn)一步地,步驟2-2)、2-3)和2_4)中所述頁面元素定位的方式包括XPath方式或CSS選擇器方式。由于XPath是一種用來確定XML文中元素的語言,而DOM樹是XML的一種樹形結(jié)構(gòu),其可以定位節(jié)點(diǎn)的功能更加全面,優(yōu)選采用XPath進(jìn)行頁面元素定位。
[0035]一種基于瀏覽器測試組件的QQ群數(shù)據(jù)獲取系統(tǒng),包括:
[0036]瀏覽器測試組件,用于通過端口啟動(dòng)瀏覽器,并模擬用戶登陸Web端QQ ;
[0037]數(shù)據(jù)采集模塊,用于通過監(jiān)聽已登陸QQ的頁面元素,獲取即時(shí)信息和非即時(shí)信息;
[0038]數(shù)據(jù)存儲模塊,用于存儲獲取的QQ群數(shù)據(jù)。
[0039]本發(fā)明的積極效果如下:
[0040]本發(fā)明基于瀏覽器測試組件,結(jié)合并行化設(shè)計(jì),面向QQ群實(shí)現(xiàn)即時(shí)聊天信息和非即時(shí)信息的數(shù)據(jù)獲取。本發(fā)明能夠避免人工登陸操作,避免相當(dāng)部分的人工操作行為。
[0041]傳統(tǒng)的基于瀏覽器測試組件的采集需要打開瀏覽器UI,系統(tǒng)資源消耗較大,減緩了加載進(jìn)程從而影響了采集效率,同時(shí)由于巨大的資源開銷影響了并行化采集的規(guī)模。通過操作無界面瀏覽器(headless browser)的基于瀏覽器測試組件的社交網(wǎng)絡(luò)數(shù)據(jù)獲取,減少系統(tǒng)資源消耗,提高一定硬件資源條件下并行化采集點(diǎn)的數(shù)量,并縮減不必要的時(shí)間開支,減少系統(tǒng)資源開銷,加快數(shù)據(jù)采集的速度和規(guī)模。然后設(shè)定監(jiān)聽機(jī)制監(jiān)聽DOM元素變化進(jìn)行數(shù)據(jù)的定位和解析等操作獲取數(shù)據(jù)。配合并行化分布式技術(shù)和消息總線任務(wù)調(diào)度,實(shí)現(xiàn)大規(guī)模不同平臺的社交平臺數(shù)據(jù)獲取。
[0042]基于瀏覽器測試組件實(shí)現(xiàn)用戶行為模擬,包括點(diǎn)擊、輸入、拖拽等行為操作。由此方式實(shí)現(xiàn)Web端QQ等登陸操作,此方法相比QQ客戶端破解,避免了破解周期長、破解成本大的問題,實(shí)現(xiàn)難度低,不需要逆向分析和大量的調(diào)試。相比基于AJAX技術(shù)等的通信過程模擬,它不但避免了復(fù)雜的底層請求過程分析,減少了抓包分析過程,因?yàn)橥ǔG闆r下,通信過程中一次數(shù)據(jù)求情可能包含多個(gè)前后依賴,且部分請求格式參數(shù)由服務(wù)器隨機(jī)產(chǎn)生,難以確定產(chǎn)生的算法,在模擬請求過程中存在被服務(wù)器檢測出異常并凍結(jié)的可能性;而且避免了協(xié)議版本的更新所帶來的后續(xù)系統(tǒng)代碼的大規(guī)模修改,能夠根據(jù)版本變化僅需要修改用戶操作邏輯即可適應(yīng)新版本,快速有效投入實(shí)際數(shù)據(jù)獲取應(yīng)用。
[0043]此系統(tǒng)不依賴于WebQQ的底層通信協(xié)議,它能跨版本運(yùn)行。
[0044]本發(fā)明不依賴于較底層的協(xié)議,伴隨版本升級能夠快速實(shí)現(xiàn)升級,調(diào)整獲取方式,適應(yīng)新版本進(jìn)行數(shù)據(jù)獲取。
[0045]本發(fā)明針對WebQQ的特性,能夠較快獲得QQ相關(guān)信息,同時(shí)本發(fā)明支持跨平臺下數(shù)據(jù)獲取,能夠適應(yīng)不同的系統(tǒng)環(huán)境。
[0046]通過瀏覽器測試組件不同接口可實(shí)現(xiàn)多個(gè)瀏覽器啟動(dòng),客戶端針對每個(gè)瀏覽器啟動(dòng)一個(gè)線程,分別發(fā)送指令,由于瀏覽器間