曹文斌,張科靜
(東華大學旭日工商管理學院,長寧 200051)
伴隨著互聯(lián)網(wǎng)信息技術(shù)的發(fā)展,特別是UGC(User Generate Content)技術(shù)的興起,互聯(lián)網(wǎng)上信息呈現(xiàn)爆發(fā)式增長,各類信息雜亂交錯地分散在各大平臺。有效地收集整理這些多維、非結(jié)構(gòu)化數(shù)據(jù),是各大科研機構(gòu)、互聯(lián)公司實現(xiàn)挖掘算法、挖掘“數(shù)據(jù)資產(chǎn)”的首要前提。
通過傳統(tǒng)的爬蟲機制,自定義數(shù)據(jù)獲取規(guī)則,能夠在一定程度上滿足個性化需求、獲得主題相關(guān)的數(shù)據(jù),這在過去能夠滿足大部分的科研和生成的需求。然而,近年來社會步入大數(shù)據(jù)時代,越來越多的大平臺公司意識到數(shù)據(jù)是一家公司的重要資產(chǎn)。越來越多的公司投入大量的人力和物力構(gòu)建反爬蟲屏障,通過反爬蟲技術(shù)區(qū)分正常使用的用戶訪問請求和通過爬蟲軟件密集地、反復地、大批量地訪問請求。因此,通過傳統(tǒng)的爬蟲手段獲取數(shù)據(jù)越來越困難,如何繞開這些反爬蟲的限制是快速獲取批量數(shù)據(jù)的一個難題。
本研究結(jié)合自動化測試技術(shù)和天貓平臺的搜索引擎,不僅克服了天貓平臺反爬蟲機制帶來的各種障礙,而且獲取的數(shù)據(jù)相關(guān)度較傳統(tǒng)的爬蟲手段獲取的數(shù)據(jù)要高。同時通過分析JSON數(shù)據(jù)結(jié)構(gòu),獲取的數(shù)據(jù)維度超過傳統(tǒng)的搜索引擎獲取的數(shù)據(jù)維度。數(shù)據(jù)的“多維性”對數(shù)據(jù)的進一步挖掘分析具有重要的作用。
網(wǎng)絡(luò)爬蟲(Web Crawler)是一種能夠根據(jù)事先設(shè)定的規(guī)則,自動地在網(wǎng)絡(luò)上像蜘蛛網(wǎng)絡(luò)一樣擴展并采集數(shù)據(jù)的運用程序或網(wǎng)頁腳本。人們也形象稱之為網(wǎng)絡(luò)蜘蛛,該程序能夠向蜘蛛織網(wǎng)一樣不斷擴展網(wǎng)頁鏈接,并遍歷采集網(wǎng)頁內(nèi)容,是搜索引擎中必不可少的組成部分。爬蟲程序信息采集過程一般是從一個初始超鏈接(URL)集合,又稱種子集合開始,首先把種子集合放入待抓取數(shù)據(jù)的任務(wù)隊列中,再根據(jù)事先設(shè)定好的規(guī)則從中取出并訪問超鏈接,遍歷超鏈接指向的網(wǎng)頁分析提取數(shù)據(jù),同時若發(fā)現(xiàn)新的鏈接則提取該鏈接放入待抓取數(shù)據(jù)的任務(wù)隊列中。再按規(guī)則取出任務(wù)隊列中的下一個鏈接,如此循環(huán)往復直至任務(wù)隊列為空或者滿足設(shè)定的終止條件,實現(xiàn)遍歷“蜘蛛網(wǎng)”的效果[1-2]。網(wǎng)絡(luò)爬蟲可以大致分為四種,分別是:聚焦網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲、通用網(wǎng)絡(luò)爬蟲四種,本課題的研究是一種增量式網(wǎng)絡(luò)爬蟲。增量式網(wǎng)絡(luò)爬蟲(Incremental Web Crawler)僅對已遍歷過的網(wǎng)頁中最新變動(產(chǎn)生新的內(nèi)容或已有內(nèi)容的更新)的部分進行數(shù)據(jù)分析提取,達到增量式效果[3],相對于通用型爬蟲程序具有更強的針對性,降低了訪問的盲目性。本課題每次爬取時僅抓取新增最近的新評論,避免抓取以前下載過的評論。
隨著信息技術(shù)的蓬勃發(fā)展,出現(xiàn)了各類爬蟲工具、爬蟲算法,各類爬蟲技術(shù)都有自身的特點,“以假亂真”的策略也很多,如模擬登錄、動態(tài)IP等,但爬蟲程序抓取數(shù)據(jù)的過程基本思路大體如圖1所示:
圖1 爬蟲機制的通常思路
(1)首先要調(diào)研了解數(shù)據(jù)需求。爬蟲是一個自動擴展遍歷網(wǎng)頁的過程,而網(wǎng)頁上的信息通常是多種多樣的、非結(jié)構(gòu)化的,因此先要了解需求即明確爬蟲方向;
(2)根據(jù)步驟(1)中的需求定義數(shù)據(jù)規(guī)則。在本課題中是試用正則表達式來定義需求數(shù)據(jù)的規(guī)則,正則表達式是由一些特定的字符組成的規(guī)則字符串,規(guī)則字符串可以對網(wǎng)頁文本進行查找匹配、過濾篩選得到想要的數(shù)據(jù);
(3)設(shè)定遍歷搜索的規(guī)則。爬蟲的本質(zhì)是一次查找遍歷過程,遍歷的算法通常有深度優(yōu)先、廣度優(yōu)先等算法。我們可以把所有的網(wǎng)頁布局當作一幅有向圖,每個網(wǎng)頁相對于一個節(jié)點,超鏈接相對于有向圖的邊。這樣就能根據(jù)圖的深度優(yōu)先或者圖的廣度優(yōu)先進行遍歷搜索,在本課題中采用的是廣度優(yōu)先搜素規(guī)則;
(4)根據(jù)數(shù)據(jù)規(guī)則匹配網(wǎng)頁文本。這是整個過程中最為核心的步驟,根據(jù)步驟(2)中定義的數(shù)據(jù)規(guī)則去查找網(wǎng)頁中的內(nèi)容,匹配到的數(shù)據(jù)若為需要的數(shù)據(jù),則提取存儲到本地數(shù)據(jù)庫里面。若為新的超鏈接,則把新發(fā)現(xiàn)的超鏈接加入到URL列表中,這樣就能像蜘蛛一樣展開。
2.1 置管部位 13例患兒均選擇頭部顳淺靜脈進行置管,其中經(jīng)右側(cè)顳淺靜脈置管者10例,經(jīng)左側(cè)顳淺靜脈置管者3例。
反爬蟲是使用相應(yīng)的信息技術(shù)措施,阻止爬蟲程序批量獲取自己網(wǎng)站信息的一種方式。爬蟲和反爬蟲機制是一個對立統(tǒng)一的關(guān)系,相互依存、相互作用、相互轉(zhuǎn)換。反爬蟲機制因爬蟲技術(shù)而起,反爬蟲機制是應(yīng)對爬蟲技術(shù),進行數(shù)據(jù)保護的措施。在實踐過程中,爬蟲和反爬蟲技術(shù)相互促進,爬蟲技術(shù)的改進必然會驅(qū)使人類探究新的反爬蟲技術(shù);同樣,新的反爬蟲技術(shù)出現(xiàn)必然促使數(shù)據(jù)保護方研究新的反爬蟲技術(shù)。
經(jīng)實驗觀察發(fā)現(xiàn),阿里巴巴天貓商城平臺基于安全考慮,相對于京東商城而言,平臺數(shù)據(jù)保護措施更為嚴格。在目前階段,各大電子商務(wù)平臺甚至包括國內(nèi)在線旅行社OTA(Online Travel Agent)平臺、O2O平臺中,天貓商城平臺數(shù)據(jù)保護措施是最為嚴格的。主要有以下幾點:
(1)能夠通過鼠標操作路徑等方式區(qū)分真實用戶和爬蟲程序的訪問;
(2)對不同重要性的信息設(shè)置了不同級別的安全應(yīng)對機制;
(3)能夠有選擇性地開放給搜索引擎(如百度、谷歌)檢索,百度公司都不能全面抓取天貓到的商品信息;
(4)天貓平臺對于關(guān)鍵信息,如評論、品屬性信息和搜索返回信息保護極為嚴格,都是動態(tài)生成數(shù)據(jù),返回瀏覽器經(jīng)過瀏覽器解析才行。返回的結(jié)果不能直接顯示在網(wǎng)頁上,需要在瀏覽器本地執(zhí)行JavaScript發(fā)送請求到服務(wù)器,再返回JavaScript再瀏覽器本地執(zhí)行,多次輪回執(zhí)行結(jié)果拼裝組合而成。
自動化測試,就是再總結(jié)測試人員日常操作之后設(shè)計開發(fā)程序或者在測試工具中設(shè)定規(guī)則,啟動程序或工具能夠模擬人的操作,進而控制測試過程中的各種對象和類,達到輔助測試的效果,減輕測試人員的重復性工作[4]。軟件自動化測試能大大提高生產(chǎn)效率,提高測試的覆蓋率及可靠性,是手工測試的一種有益的補充。
(1)仿真性強,能夠像真實用戶操作一樣,直接在瀏覽器中運行;
(2)使用方便,提供API接口,供Java等多種高級程序設(shè)計語言調(diào)用;
(3)Selenium核心browser bot是用JavaScript實現(xiàn)的,有助于避開反爬蟲技術(shù)的限制。
本課題在充分了解天貓反爬蟲機制之后,結(jié)合瀏覽器自動化測試框架Selenium,編寫的Java評論采集程序,達到了模擬人的操作瀏覽器的效果。能夠通過Java程序自如地啟動關(guān)閉瀏覽器、切換瀏覽的網(wǎng)頁、輸入數(shù)據(jù)到網(wǎng)頁控件中、點擊網(wǎng)頁上的按鈕等操作,通過瀏覽器自如地和天貓平臺進行數(shù)據(jù)交互。
本課題編寫的Java評論采集程序,突破了反爬蟲技術(shù)限制,解決了批量評論采集的難題。程序的運行邏輯如圖2所示:
圖2 基于Selenium并發(fā)分布式抓取數(shù)據(jù)
第1步:首先在天貓上搜索目標商品,并記錄搜索結(jié)果頁碼數(shù)量和顯示搜索結(jié)果的URL。搜索結(jié)果的URL含有搜索關(guān)鍵詞信息和搜索結(jié)果顯示頁面的頁碼序號,根據(jù)頁碼遞增能夠遍歷所有的搜索結(jié)果;
第2步:把第一步記錄的URL和總頁碼數(shù)設(shè)置為程序參數(shù),并根據(jù)需要采集數(shù)據(jù)量的大小設(shè)置線程池的最大線程數(shù)量,啟動程序運行;
第3步:保存搜索引擎搜索的結(jié)果。程序會啟動Selenium像人工操作一樣快速遍歷所有搜索結(jié)果,并記錄每個搜索結(jié)果商品的URL、單價、評價數(shù)、月銷售量,保持至本地數(shù)據(jù)庫;
第4步:根據(jù)搜索結(jié)果采集評論。根據(jù)第3步采集的商品URL采集該商品的評論,保持至本地數(shù)據(jù)庫。返回的評論數(shù)據(jù)是JSON類型,里面包含的商品評論屬性主要包括三大部分,分別是評論屬性集、顧客屬性集、交易屬性集。
本課題研究的實例是阿里巴巴天貓平臺,設(shè)計的程序在天貓上采集的每條網(wǎng)絡(luò)購物評論數(shù)據(jù)包含38個屬性,這些屬性可分為3個部分,評論屬性集、顧客屬性集、交易屬性集。每個屬性集的主要信息如下面的列表:
表1 基于Selenium的網(wǎng)絡(luò)評論采集結(jié)果之評論屬性集
商品評論是顧客對于商品本身體驗發(fā)表的意見觀點;服務(wù)評論是顧客對于購買商品過程的服務(wù)體驗點評,如對物流、客服等評價。商品評論、服務(wù)評論、追加評論、客服對評論回復是非結(jié)構(gòu)化文本數(shù)據(jù),其他屬性都是結(jié)構(gòu)化數(shù)據(jù)。
表2 基于Selenium的網(wǎng)絡(luò)評論采集結(jié)果之顧客屬性集
顧客昵稱是網(wǎng)購商品評論區(qū)列表上顯示的評論用品昵稱。顧客等級對進一步挖掘評論數(shù)據(jù)的價值具有重要的意義,既可以按評論等級篩選數(shù)據(jù),也可以研究不同等級下的用戶評論特征。
表3 基于Selenium的網(wǎng)絡(luò)評論采集結(jié)果之交易屬性集
交易結(jié)束時間是指顧客確認收貨的時間,可以根據(jù)這個屬性分析評論對象隨時間的變化;選購商品的屬性是指顧客購買商品時選擇的屬性,如購買衣服時選擇的款式、尺寸、顏色等屬性,可以通過該屬性分析不同顏色、款式的受歡迎程度。
本課題研究在充分實驗觀察了天貓平臺頁面結(jié)構(gòu),了解了爬蟲和反爬蟲的機制后,結(jié)合自動化測試框架,構(gòu)建了天貓平臺評論數(shù)據(jù)抓取的解決方案,并由Java高級程序設(shè)計語言實現(xiàn)了該方案,解決了反爬蟲機制封鎖的難題,獲得了38維的高維評論數(shù)據(jù)。該解決方案具有普遍的適用性,稍做調(diào)整即可用于其他互聯(lián)網(wǎng)平臺的數(shù)據(jù)抓取。本課題研究也有些值得進一步深入研究的地方,如何在抓取的海量評論數(shù)據(jù)基礎(chǔ)上,結(jié)合數(shù)據(jù)挖掘等相關(guān)領(lǐng)域的研究進行文本分析,挖掘出評論中的商業(yè)價值。
參考文獻:
[1]J.Cho.Crawling the web:Discovery and Maintenance of Large-scale Web Data[D].L.A.:Stanford University,2001.
[2]于娟,劉強.主題網(wǎng)絡(luò)爬蟲研究綜述[J].計算機工程與科學,2015,37(02):231-237.
[3]孟慶浩,王晶,沈奇威.基于Heritrix的增量式爬蟲設(shè)計與實現(xiàn)[J].電信技術(shù),2014,(09):97-98+101+99-100.
[4]宋波,張忠能.基于系統(tǒng)功能測試的軟件自動化測試可行性分析[J].計算機應(yīng)用與軟件,2005,22(12):31-33.