魏倩男 賀正楚 陳一鳴
摘 要 以京東平臺(tái)的網(wǎng)頁(yè)數(shù)據(jù)抓取為例,研究如何提高網(wǎng)絡(luò)爬蟲(chóng)技術(shù)對(duì)網(wǎng)頁(yè)數(shù)據(jù)的抓取效率,進(jìn)而對(duì)抓取到的數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析.該網(wǎng)絡(luò)爬蟲(chóng)技術(shù)主要建立在分布式系統(tǒng)的基礎(chǔ)上,多臺(tái)計(jì)算機(jī)多線程同時(shí)運(yùn)行,使數(shù)據(jù)抓取效率顯著提高.分析京東平臺(tái)的網(wǎng)頁(yè)信息,統(tǒng)一分類,抓取分類下的商品信息,獲取到網(wǎng)頁(yè)內(nèi)容后,利用解析器重建網(wǎng)頁(yè)DOM樹(shù),通過(guò)JQUERY選擇器,針對(duì)選擇不同的標(biāo)簽名稱和標(biāo)識(shí)名稱獲取商品信息,把獲取到的數(shù)據(jù)進(jìn)行過(guò)濾、整合,然后進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析,對(duì)電商行業(yè)走勢(shì)進(jìn)行預(yù)測(cè),進(jìn)而指導(dǎo)電商運(yùn)營(yíng)團(tuán)隊(duì)決策.
關(guān)鍵詞 電商平臺(tái);數(shù)據(jù)分析;分布式系統(tǒng);AJAX;MapReduce;Jumony Core
中圖分類號(hào) F424,F(xiàn)716,F(xiàn)724.6文獻(xiàn)標(biāo)識(shí)碼 A
Abstract Taking the data web Jingdong platform as an example, this paper researched how to improve the efficiency of data capture of web crawler technology, and to crawl into data for data mining and data analysis. The crawler technology is mainly built on the basis of distributed system, and multiple computers run simultaneously at the same time, so that the efficiency of data capture is significantly improved. After analyzing Web information, Jingdong platform unified classification, grasping under the category of commodity information, and the access to web content, DOM tree was reconstructed by using parser, and through the JQUERY selector, different commodity information was selected according to the label name and logo name, and the obtained data was filtered, integrated, and then data mining and data analysis were carried out to predict the trend of the e-commerce industry, and then to guide the decision-making of the e-commerce operations team.
Key words electronic business platform;data analysis;distributed system;AJAX;MapReduce;Jumony Core
1 引 言
2017年1月,中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)發(fā)布第39次《中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》,根據(jù)報(bào)告顯示,截至2016年12月,中國(guó)網(wǎng)民規(guī)模相當(dāng)于歐洲人口總量,高達(dá)7.31億,全年新增網(wǎng)民共計(jì)4229萬(wàn)人.互聯(lián)網(wǎng)普及率達(dá)53.2%,較2015年底提升了2.9個(gè)百分點(diǎn).其中在商務(wù)交易應(yīng)用類發(fā)展方面,截至2016年12月,中國(guó)有99.0%的企業(yè)使用計(jì)算機(jī)辦公.在電子商務(wù)方面,開(kāi)展在線采購(gòu)、在線銷售的比例分別為45.6%和45.3%,大約有38.7%的企業(yè)利用互聯(lián)網(wǎng)開(kāi)展?fàn)I銷推廣活動(dòng).中國(guó)的互聯(lián)網(wǎng)行業(yè)整體向價(jià)值化、規(guī)范化的方向發(fā)展,同時(shí),移動(dòng)化聯(lián)網(wǎng)推動(dòng)了共享化、設(shè)備智能化和場(chǎng)景多元化的消費(fèi)模式[1].
圖1為CNNIC中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)調(diào)查結(jié)果.圖1顯示截至2016年12月全國(guó)有45.3%的企業(yè)開(kāi)展在線銷售業(yè)務(wù).“十二五”期間,中國(guó)電子商務(wù)市場(chǎng)發(fā)現(xiàn)迅速,交易額翻了兩番.2016年,“十三五”的開(kāi)局之年,電子商務(wù)市場(chǎng)規(guī)模的增速依然保持穩(wěn)定,企業(yè)的參與程度越來(lái)越深入,開(kāi)展在線銷售的企業(yè)數(shù)量也大幅增加.隨著企業(yè)對(duì)品牌推廣意識(shí)的提升、電子商務(wù)的日益普及,以及中國(guó)互聯(lián)網(wǎng)的廣告市場(chǎng)逐步規(guī)范化,互聯(lián)網(wǎng)的營(yíng)銷市場(chǎng)仍然有很大的增長(zhǎng)空間.但是近幾年來(lái)電商行業(yè)的各大網(wǎng)站為搶占市場(chǎng)經(jīng)常采取的策略是打價(jià)格戰(zhàn),紛紛通過(guò)促銷、甚至降價(jià)等方式來(lái)吸引客戶.據(jù)KPCB的調(diào)查報(bào)告顯示,2009年到2016年全球移動(dòng)端新用戶的增長(zhǎng)率持續(xù)下滑,可以預(yù)測(cè)在2017年這一增長(zhǎng)率將繼續(xù)放慢,用戶增長(zhǎng)將更加乏力,這就意味著人口增長(zhǎng)帶來(lái)的流量紅利正在逐漸消退.那么,單純地通過(guò)價(jià)格戰(zhàn)來(lái)吸引新用戶的方式已不容樂(lè)觀.嚴(yán)峻的市場(chǎng)競(jìng)爭(zhēng)形勢(shì)迫使企業(yè)思考,在不依靠?jī)r(jià)格戰(zhàn)這種野蠻增長(zhǎng)的方式下,當(dāng)企業(yè)面臨增長(zhǎng)困境,該如何應(yīng)對(duì)?2017年11月在北京舉辦的“第三屆中國(guó)行業(yè)互聯(lián)網(wǎng)大會(huì)”為這一問(wèn)題指出了解決思路,即在互聯(lián)網(wǎng)時(shí)代下“新動(dòng)能,新模式”將助推企業(yè)轉(zhuǎn)型升級(jí),優(yōu)化要素配置,促進(jìn)新經(jīng)濟(jì)轉(zhuǎn)型.因此,對(duì)電商平臺(tái)來(lái)說(shuō),數(shù)據(jù)是電商分析問(wèn)題的基礎(chǔ),面對(duì)不斷增長(zhǎng)的海量信息,如何高效的獲取數(shù)據(jù)、挖掘信息是電商企業(yè)精細(xì)化運(yùn)營(yíng)和數(shù)據(jù)驅(qū)動(dòng)決策中亟待解決的問(wèn)題.網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在電商信息來(lái)源方面和其他領(lǐng)域都有很廣泛的應(yīng)用.
2 網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的發(fā)展現(xiàn)狀
隨著Internet規(guī)模的不斷擴(kuò)大的和Internet技術(shù)的迅速發(fā)展,Web信息量呈指數(shù)增長(zhǎng),數(shù)據(jù)呈現(xiàn)出數(shù)據(jù)量大、種類多、實(shí)時(shí)性強(qiáng)、價(jià)值大等特點(diǎn),大數(shù)據(jù)的應(yīng)用已經(jīng)蔓延到各個(gè)領(lǐng)域[2].數(shù)據(jù)挖掘是從海量數(shù)據(jù)中尋找其規(guī)律和聯(lián)系的技術(shù),是統(tǒng)計(jì)學(xué)、數(shù)據(jù)庫(kù)技術(shù)和人工智能技術(shù)的綜合.目前,在數(shù)據(jù)挖掘的領(lǐng)域范疇中,相關(guān)研究機(jī)構(gòu)(如:Google、百度等)已經(jīng)給出了較為成熟穩(wěn)定的大型網(wǎng)絡(luò)爬蟲(chóng)解決方案,由于涉及商業(yè)化利益和機(jī)密,相對(duì)成熟的搜索引擎技術(shù)不會(huì)被公開(kāi)化,網(wǎng)絡(luò)中的相關(guān)資源也只是膚淺的描述和概括,而且這些方案大都只能為一般用戶提供一種不可定制的搜索服務(wù),大部分公司并不提供相關(guān)的技術(shù)方案支持.開(kāi)源在網(wǎng)絡(luò)爬蟲(chóng)方面,也已經(jīng)有一些相對(duì)成熟的網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目,但很多并不能被廣泛采用,并且可能會(huì)存在一些問(wèn)題,如:不穩(wěn)定、體驗(yàn)效果差、配置繁瑣等.在開(kāi)源爬蟲(chóng)項(xiàng)目中,大部分都是單機(jī)版的,無(wú)法應(yīng)用于海量數(shù)據(jù)的采集等其他情況,因此,針對(duì)電商平臺(tái)研究出一套配置簡(jiǎn)單、穩(wěn)定性強(qiáng)、效率高的爬蟲(chóng)是很必要的.
網(wǎng)絡(luò)爬蟲(chóng)追求的方向是如何盡可能及時(shí)、全面、有效地獲取互聯(lián)網(wǎng)上的數(shù)據(jù)索引,主要包括以下方面的研究:發(fā)展大規(guī)模分布式系統(tǒng)、提高系統(tǒng)的性能[3].一是分布式系統(tǒng)有效地推動(dòng)了搜索引擎技術(shù)的發(fā)展.搭建一套擴(kuò)展性強(qiáng)、性能穩(wěn)定、成本低廉的分布式集群系統(tǒng),多臺(tái)機(jī)器并行運(yùn)算,可以有效地解決多個(gè)網(wǎng)間訪問(wèn)速度過(guò)慢對(duì)網(wǎng)頁(yè)信息獲取的影響,加快數(shù)據(jù)的計(jì)算速度,提高網(wǎng)絡(luò)爬蟲(chóng)的性能[4];二是網(wǎng)絡(luò)數(shù)據(jù)抓取內(nèi)容越來(lái)越多元化.人們對(duì)網(wǎng)絡(luò)資源的需求不僅僅是單純的文字,需求正朝著多元化的道路發(fā)展,例如,視頻搜索,圖片搜索以及各類文檔搜索,因此網(wǎng)絡(luò)爬蟲(chóng)面對(duì)這些也應(yīng)該能夠準(zhǔn)確的解析并且準(zhǔn)確的獲取;三是更多的個(gè)性化服務(wù).當(dāng)前抓取內(nèi)容需要具備個(gè)性化搜索,人們關(guān)心的并不是所有的電商平臺(tái)網(wǎng)站和其他品類網(wǎng)站,而只是滿足自己所需要的一些電商網(wǎng)站等站點(diǎn),因此就需要網(wǎng)絡(luò)爬蟲(chóng)有針對(duì)性的去獲取,不同的站點(diǎn)對(duì)應(yīng)不同的權(quán)值;四是AJAX數(shù)據(jù)獲取[5].AJAX框架有大量的表現(xiàn)層代碼,由于網(wǎng)絡(luò)和其他的反爬蟲(chóng)因素在一定程度上降低了網(wǎng)絡(luò)爬蟲(chóng)的效率.因此,開(kāi)展支持AJAX框架站網(wǎng)絡(luò)爬蟲(chóng)的研究,對(duì)解決AJAX站點(diǎn)地址(URL)獲取以及檢索隱藏在其中大量數(shù)據(jù)的問(wèn)題,具有重要的理論意義與實(shí)用價(jià)值[6].
事實(shí)上,在網(wǎng)絡(luò)爬蟲(chóng)領(lǐng)域,學(xué)術(shù)界以及商業(yè)界都已有一些研究,其中包括:網(wǎng)絡(luò)爬行策略、海量數(shù)據(jù)存儲(chǔ)方式、海量數(shù)據(jù)索引方式、網(wǎng)頁(yè)評(píng)級(jí)分類等.隨著網(wǎng)絡(luò)信息資源的快速增長(zhǎng)以及網(wǎng)絡(luò)信息資源動(dòng)態(tài)的變化,傳統(tǒng)的爬蟲(chóng)技無(wú)法滿足人們對(duì)個(gè)性化服務(wù)的需求,以何種方式訪問(wèn)網(wǎng)絡(luò),提高爬蟲(chóng)效率,已成為近幾年來(lái)網(wǎng)絡(luò)爬蟲(chóng)研究的主要問(wèn)題之一.但大多數(shù)研究?jī)H著眼于某一個(gè)方面的改進(jìn),因此對(duì)于一個(gè)完整的爬蟲(chóng)系統(tǒng)來(lái)說(shuō),或多或少的會(huì)存在著某些不足.本文在已有研究成果基礎(chǔ)上,設(shè)計(jì)一個(gè)高效可行的網(wǎng)絡(luò)爬蟲(chóng)方案,進(jìn)而對(duì)爬取到的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)挖掘,為企業(yè)決策提供指導(dǎo).
本文主要基于MapReduce分布式系統(tǒng)實(shí)現(xiàn)了網(wǎng)絡(luò)爬蟲(chóng)在電商中的應(yīng)用,提高了網(wǎng)爬蟲(chóng)性能,加快頁(yè)面信息獲取速度[7].針對(duì)海量信息無(wú)法存儲(chǔ)的問(wèn)題,采用非結(jié)構(gòu)化分布式存儲(chǔ)技術(shù),它是一種全新的非關(guān)系型的分布式存儲(chǔ)技術(shù),采用新的數(shù)據(jù)模型,具有海量數(shù)據(jù)存儲(chǔ)、高性能、高可用性、強(qiáng)伸縮性等特點(diǎn),可以有效地解決數(shù)據(jù)存儲(chǔ)的問(wèn)題.針對(duì)頁(yè)面通過(guò)AJAX異步請(qǐng)求獲取后臺(tái)數(shù)據(jù),呈現(xiàn)到網(wǎng)頁(yè)信息無(wú)法獲取的問(wèn)題,采用Selenium技術(shù),它可以通過(guò)調(diào)用瀏覽器的方式,加載頁(yè)面自身內(nèi)容和通過(guò)AJAX異步請(qǐng)求展現(xiàn)的內(nèi)容,完全加載后,Selenium可以獲取到所有頁(yè)面內(nèi)容,Selenium還可以模擬鼠標(biāo)單擊、雙擊、右擊等一些操作,解決隱藏?cái)?shù)據(jù)無(wú)法獲取的問(wèn)題[8].
3 相關(guān)理論基礎(chǔ)
3.1 MapReduce
MapReduce是Google在2004年提出的一個(gè)用于處理大規(guī)模數(shù)據(jù)集合的分布式計(jì)算架構(gòu).該構(gòu)架的提出是由編程函數(shù)中常用的Map,Reduce函數(shù)啟發(fā)結(jié)合而來(lái),通過(guò)這個(gè)架構(gòu),可以幫助對(duì)分布式計(jì)算不太了解的程序員完成分布式計(jì)算程序的編程,實(shí)現(xiàn)對(duì)問(wèn)題的分解與合并[9].
分布式計(jì)算是將整個(gè)任務(wù)先分割成很多小的子任務(wù)到子節(jié)點(diǎn)處理,再將子節(jié)點(diǎn)處理得到的結(jié)果進(jìn)行合并整理,獲取最終結(jié)果[10].在MapReduce的執(zhí)行任務(wù)的過(guò)程中主要分為Map和Reduce兩個(gè)步驟:當(dāng)用戶輸入一條指令后,Map程序首先把任務(wù)分割成不相關(guān)的小任務(wù)塊,這些小的任務(wù)塊會(huì)被分配到不同的計(jì)算機(jī)進(jìn)去處理,得到的結(jié)果通過(guò)Reduce程序整合.MapReduce的一般運(yùn)行結(jié)構(gòu)如圖2所示.
“Map”過(guò)程:Master節(jié)點(diǎn)接收到輸入的數(shù)據(jù)后會(huì)將數(shù)據(jù)分割成許多小的數(shù)據(jù)塊并把它們分給不同的Worker節(jié)點(diǎn).Worker節(jié)點(diǎn)可能會(huì)再次重復(fù)上面內(nèi)容;或者Worker節(jié)點(diǎn)調(diào)用用戶自定義的函數(shù),將處理得到的鍵值數(shù)據(jù)對(duì)寫入到本地磁盤中.
“Reduce”過(guò)程:在Worker節(jié)點(diǎn)上執(zhí)行Reduce函數(shù),整理Map函數(shù)處理好的全部數(shù)據(jù),把鍵名相同的數(shù)據(jù)通過(guò)用戶提交的指定的方法合成不同的數(shù)據(jù)集合,保存到磁盤中.
3.2 AJAX
Ajax并不能說(shuō)是一種新的研發(fā)技術(shù),而是提取的Java、XML與JavaScript等技術(shù)的特點(diǎn),創(chuàng)建了交互式網(wǎng)頁(yè)應(yīng)用的Web開(kāi)發(fā)技術(shù),其中包括這些技術(shù):使用HTML和CSS定義呈現(xiàn)給用戶的頁(yè)面內(nèi)容和媒體信息;使用DOM實(shí)時(shí)動(dòng)態(tài)修改頁(yè)面顯示內(nèi)容和加載效果;使用XML和XSLT進(jìn)行數(shù)據(jù)交換獲取和結(jié)構(gòu)化處理;使用XMLHttpRequest方法進(jìn)行異步數(shù)據(jù)的查詢和獲取;使用JavaScript綁定和處理以上部分.
AJAX Web應(yīng)用模型如圖3所示.
客戶端與Web服務(wù)器之間增加了Ajax引擎,客戶端接口與Ajax引擎交互,而Ajax引擎再通過(guò)HTTP傳輸協(xié)議與Web服務(wù)器端交互.Ajax Web應(yīng)用采用了異步交互模式,比傳統(tǒng)的Web應(yīng)用體驗(yàn)效果更佳,更加受用戶的喜愛(ài),有5個(gè)方面的優(yōu)點(diǎn)[11]:①Ajax能在不刷新整個(gè)頁(yè)面的前提下更新頁(yè)面信息和頁(yè)面數(shù)據(jù),網(wǎng)頁(yè)加載的速度更加快速,用戶等待頁(yè)面加載的時(shí)間更短.在等待服務(wù)器響應(yīng)的過(guò)程中,用戶可以在已加載頁(yè)面進(jìn)行任何操作,縮短可感知時(shí)間.②通過(guò)異步調(diào)用模式,可以帶來(lái)更好的用戶體驗(yàn),用戶可以更加直觀感覺(jué)到豐富、動(dòng)態(tài)的頁(yè)面內(nèi)容.③Ajax采用的原則是“按需按量取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求和大量數(shù)據(jù)的一次性加載,優(yōu)化服務(wù)器和客戶端的傳輸,從而提高網(wǎng)絡(luò)帶寬的利用率,減輕服務(wù)器負(fù)擔(dān).④Ajax不但可以調(diào)用本地資源,還可以加載外部數(shù)據(jù),非常具有靈活性.⑤Ajax技術(shù)應(yīng)用非常簡(jiǎn)單,沒(méi)有任何插件和程序的安裝,操作簡(jiǎn)單,能被開(kāi)發(fā)者廣泛支持.
3.3 Jumony Core
Jumony Core是一個(gè)非常真實(shí)的HTML引擎.目前的HTML解析器加上簡(jiǎn)單的正則表達(dá)式已經(jīng)可以滿足用戶操縱HTML文檔的需求,但對(duì)于Jumony Core,它更加強(qiáng)大.Jumony Core解析結(jié)果和瀏覽器的解析結(jié)果相似度非常高,無(wú)論是無(wú)結(jié)束標(biāo)簽的元素,可選結(jié)束標(biāo)簽的元素,或是標(biāo)記屬性,或是CSS選擇器和樣式,一切合法的,不合法的HTML文檔,瀏覽器解析成什么樣式和內(nèi)容,Jumony Core出來(lái)的效果幾乎和瀏覽器一樣.Jumony Core包含的封裝方法及作用如表1所示.
4 本研究對(duì)爬蟲(chóng)技術(shù)的設(shè)計(jì)
4.1 設(shè)計(jì)思想
目前,爬蟲(chóng)在抓取數(shù)據(jù)上,一般采取兩種策略:廣度優(yōu)先策略與深度優(yōu)先策略[12].廣度優(yōu)先是指爬蟲(chóng)沿著樹(shù)進(jìn)行橫向遍歷,直到抓取完起始網(wǎng)頁(yè)中連接的所有網(wǎng)頁(yè)為止,然后再選擇其中的一個(gè)網(wǎng)頁(yè)鏈接,循環(huán)這個(gè)過(guò)程.此方法可以讓爬蟲(chóng)并行進(jìn)行,提高了抓取速度.深度優(yōu)先是指爬蟲(chóng)沿著樹(shù)進(jìn)行縱向遍歷.深度優(yōu)先策略是一個(gè)遞歸的過(guò)程,因此在程序執(zhí)行的時(shí)候會(huì)大量消耗計(jì)算機(jī)的內(nèi)存,很容易使爬蟲(chóng)陷入問(wèn)題,甚至是電腦死機(jī).另外,遞歸與多線程是無(wú)法兼容的,因?yàn)槎嗑€程可以一次運(yùn)行多個(gè)任務(wù),但每個(gè)線程都要有自己的堆棧.而在遞歸時(shí),當(dāng)一個(gè)方法調(diào)用它自身時(shí),它們需要使用同一個(gè)堆棧.因此,本爬蟲(chóng)程序采用廣度優(yōu)先策略.具體實(shí)現(xiàn)方式為:首先,統(tǒng)一不同電商平臺(tái)的分類信息,通過(guò)比較判斷找出不同電商平臺(tái)的公共分類信息,分類信息還分為一級(jí)分類和二級(jí)分類,一級(jí)分類下面包含多個(gè)二級(jí)分類;其次,整合所有二級(jí)分類,獲取所有二級(jí)分類所對(duì)應(yīng)的商品列表URL,初始化URL,直到對(duì)應(yīng)的URL沒(méi)有商品為止;最后,把獲取到的產(chǎn)品信息存儲(chǔ)到數(shù)據(jù)庫(kù),存儲(chǔ)到數(shù)據(jù)庫(kù)中的數(shù)據(jù)經(jīng)過(guò)清洗過(guò)濾得到標(biāo)準(zhǔn)化的數(shù)據(jù),然后進(jìn)行數(shù)據(jù)統(tǒng)計(jì)分析,從而把握電商行業(yè)的銷售趨勢(shì).圖4為本程序?qū)ι唐窋?shù)據(jù)獲取及保存示意圖.
4.2 操作流程與實(shí)現(xiàn)
圖5清晰地展示了程序的主要流程.收集網(wǎng)絡(luò)中不同的電商平臺(tái)進(jìn)行分析對(duì)比,獲取不同電商網(wǎng)站針對(duì)的不同分類的側(cè)重點(diǎn),對(duì)于相似的分類,可以關(guān)聯(lián)分類后統(tǒng)一化名稱.對(duì)于每個(gè)分類下面的商品,需要不斷的初始化對(duì)應(yīng)URL,從而獲得不同分頁(yè)下面的商品信息,獲取商品信息的時(shí)候,對(duì)信息不完整的商品進(jìn)行舍棄.在數(shù)據(jù)整理的時(shí)候,過(guò)濾不符合規(guī)則、異常的數(shù)據(jù).
4.3 統(tǒng)一分類
當(dāng)前網(wǎng)絡(luò)電商平臺(tái)眾多,其中國(guó)內(nèi)比較知名的主要有淘寶、天貓、京東等,但這些電商平臺(tái)的一級(jí)分類和二級(jí)分類,甚至更深層的分類錯(cuò)綜復(fù)雜[13].把這些電商平臺(tái)的所有分類整合,挑選出其中具有代表性的一級(jí)分類,在一級(jí)分類的決斷中,盡可能的要包含人們生活的各方面.對(duì)于二級(jí)分類的確定,通過(guò)與一級(jí)分類的關(guān)聯(lián)度和常識(shí)去決定.最終,可以得到基于不同電商平臺(tái)下的一套相對(duì)統(tǒng)一的標(biāo)準(zhǔn)化分類.
4.4 初始化URL
不同電商平臺(tái)的二級(jí)分類下面可能會(huì)有更細(xì)的小分類,但不是商品列表,要盡可能完整的獲取到所有分類下面的信息就需要把這些更小的分類下面的商品列表對(duì)應(yīng)的URL也存儲(chǔ)到數(shù)據(jù)庫(kù),這些小的分類應(yīng)該與其父級(jí)分類建立關(guān)聯(lián)外鍵.每個(gè)URL對(duì)應(yīng)的商品列表只有一頁(yè),一般要想獲取更多的頁(yè)面列表就需要改變URL中對(duì)應(yīng)頁(yè)碼的數(shù)值.尚待訪問(wèn)URL隊(duì)列可以被構(gòu)造為一個(gè)先進(jìn)先出(FIFO)隊(duì)列,信息搜索的下一個(gè)將要爬行的頁(yè)面來(lái)自隊(duì)列頭,新的URL被加入到隊(duì)列尾.每一步都是從隊(duì)列頭中選出下一個(gè)URL供爬蟲(chóng)抓取,直到爬完此隊(duì)列中所有URL為止.
4.5 頁(yè)面信息提取
在提取頁(yè)面信息時(shí),首先必須先判斷頁(yè)面的編碼方式,目前的字符集種類非常多,其中主要以“UTF-8”,“GBK”,“GB2312”為主,具體可以在網(wǎng)頁(yè)頭部可以看到,例如:.在讀取頁(yè)面內(nèi)容時(shí),先要判斷獲取內(nèi)容的類型,如果是多媒體數(shù)據(jù),則可以下載存儲(chǔ)到網(wǎng)頁(yè)數(shù)據(jù)庫(kù)中,如果是無(wú)結(jié)構(gòu)或半結(jié)構(gòu)化的網(wǎng)頁(yè)文本,則需要繼續(xù)分析.在獲取URL頁(yè)面內(nèi)容時(shí),如果出現(xiàn)超時(shí)、頁(yè)面丟失、獲取錯(cuò)誤等現(xiàn)象時(shí),就認(rèn)為此網(wǎng)頁(yè)失效,對(duì)應(yīng)的URL就被存儲(chǔ)到相應(yīng)的錯(cuò)誤列表中,如果能正常獲取,則需要解析網(wǎng)頁(yè)內(nèi)容.
4.6 解析頁(yè)面內(nèi)容
網(wǎng)頁(yè)解析主要是內(nèi)容分析和鏈接提取.獲取頁(yè)面內(nèi)容后,根據(jù)頁(yè)面內(nèi)容去解析提取所需要的信息,并通過(guò)標(biāo)簽,CSS名稱或者標(biāo)簽ID獲取目的標(biāo)簽路徑.一般情況下,元素會(huì)包含很多屬性,其中具有唯一性的屬性就是元素的ID,這樣能更快更精確的找到需要的內(nèi)容,其次就是元素的CSS名稱,CSS名稱可以存在有很多,可以通過(guò)下標(biāo)或者結(jié)合元素其他屬性來(lái)準(zhǔn)確獲取,最后就是通過(guò)元素的標(biāo)簽獲取,一個(gè)頁(yè)面內(nèi)容會(huì)包含很多這樣的標(biāo)簽,想確定唯一想要的就要逐步的查找該元素的父級(jí),通過(guò)不同的父級(jí)元素來(lái)獲取唯一的子級(jí)元素.獲取到的元素內(nèi)容文檔可以提取到如下信息:
1)文檔標(biāo)題:通過(guò)文件頭標(biāo)簽
2)商品鏈接:鏈接一般都是元素里面的屬性“href”的值,通過(guò)鏈接可以得到商品的詳情頁(yè)面,獲取更多的商品信息.
3)商品標(biāo)題:商品標(biāo)題一般可以在兩個(gè)地方獲取,第一,商品列表中有標(biāo)題的信息,第二,在商品詳情頁(yè)面中可以獲取商品的標(biāo)題信息.
4)圖片:電商平臺(tái)中商品幾乎都是存在圖片的展示,圖片的信息可以通過(guò)命令符或
里面的屬性“src”或”background”的值獲取,屬性值代表了商品圖片的鏈接地址,并不能直接下載存儲(chǔ)在數(shù)據(jù)庫(kù)中.網(wǎng)頁(yè)圖片的獲取要通過(guò)程序解析圖片的二級(jí)制字符流,把這些字符再在程序中下載并保存到本地?cái)?shù)據(jù)庫(kù).5)多窗口頁(yè)面:通過(guò)命令符
各種電商平臺(tái)信息采集最直接得到的就是以上4個(gè)方面獲取標(biāo)記,并作相應(yīng)的處理.其中文檔標(biāo)題,商品標(biāo)題這些可以直接從當(dāng)前網(wǎng)頁(yè)中獲取,其他通過(guò)URL相關(guān)的信息則需要記錄URL并標(biāo)記,從而進(jìn)行更深一步的采集.
電商平臺(tái)采集主要是獲取關(guān)于每個(gè)商品的詳細(xì)信息,其中包括商品標(biāo)題,商品ID,商品的價(jià)格,商品的發(fā)售地,商品的月銷量,商品的評(píng)論數(shù)甚至商品的評(píng)論,還有當(dāng)前商品的店鋪名稱,店鋪ID,店鋪鏈接,店鋪信譽(yù)(評(píng)分)都要獲取到,這些信息有的并不能在網(wǎng)頁(yè)內(nèi)容中直接獲取,例如,在京東商品詳情頁(yè)里面,店鋪的地址,評(píng)分等一些不能直接在網(wǎng)頁(yè)內(nèi)容中找到,有的要更加深一步的找到相關(guān)的URL,通過(guò)再次解析網(wǎng)頁(yè)內(nèi)容的方式獲取.還有的就更加復(fù)雜,這些信息在新的頁(yè)面也不能夠找到,這時(shí)候就要查找當(dāng)前頁(yè)面所有的JS文件,看是否能夠在JS文件中獲取所需要的信息,然后找到相關(guān)此JS文件的路徑進(jìn)行分析,看和其他商品的此路徑有什么不同,找出規(guī)律,拼接成相應(yīng)的URL地址來(lái)獲取內(nèi)容.
4.7 程序?qū)崿F(xiàn)
電商平臺(tái)數(shù)據(jù)采集建立在分布式系統(tǒng)上,計(jì)算機(jī)集合通過(guò)通訊網(wǎng)絡(luò)相互連接,實(shí)現(xiàn)資源共享和協(xié)同工作,而呈現(xiàn)給用戶的是單個(gè)完整的計(jì)算機(jī)系統(tǒng),分布式系統(tǒng)與面向?qū)ο蠹夹g(shù)相結(jié)合過(guò)后,極大的擴(kuò)展了分布式軟件的應(yīng)用領(lǐng)域,提高了軟件的性能和生產(chǎn)效率.程序使用的開(kāi)發(fā)程序主要有Visual Studio和SQL SERVER.電商平臺(tái)采集數(shù)據(jù)量非常龐大,需要定義多線程或線程池來(lái)加快程序的運(yùn)行速度.這里主要以京東為例.首先在程序中定義一個(gè)線程,線程執(zhí)行需要一個(gè)無(wú)返回(void)方法,在這個(gè)線程中定義所要執(zhí)行的方法,名稱定義盡量規(guī)范,方法里面是關(guān)于電商平臺(tái)采集的主要編程代碼.
1)獲取分類URL:獲取SQL SERVER中存儲(chǔ)的二級(jí)分類對(duì)應(yīng)的所有URL,聲明一個(gè)表格(DataTable),把所獲取到的URL存放到表格當(dāng)中.為避免重復(fù)的用到SQL SEVER增刪改查的一些方法,在程序中新建一個(gè)類,這個(gè)類中定義了一些基本的SQL SEVER增刪改查的方法,對(duì)應(yīng)的代碼填充完畢后,每次需要用到這些方法得時(shí)候,可以直接通過(guò)類名和相應(yīng)的方法調(diào)用,如表2所示.
2)循環(huán)商品列表:循環(huán)表格里面的URL,獲取并解析里面的內(nèi)容,找到本頁(yè)面所有的商品集合,通過(guò)URL的規(guī)律,找到下一頁(yè)(page=1,2….),直到獲取此分類中的所有商品.
3)獲取商品信息:獲取商品集合后,通過(guò)選擇器得到相應(yīng)商品詳情頁(yè)的URL,在商品詳情頁(yè)里面,把剩下所需要的信息提取出來(lái),提取信息的各種方法如表3所示.
4)存儲(chǔ)到數(shù)據(jù)庫(kù):得到所需要的信息,通過(guò)定義的SQL方法把得到的數(shù)據(jù)存入數(shù)據(jù)庫(kù).
在商品信息的獲取過(guò)程中,會(huì)出現(xiàn)很多不規(guī)范的商品信息,在程序運(yùn)行過(guò)程中,無(wú)法解析網(wǎng)頁(yè)內(nèi)容時(shí),程序就會(huì)停止并拋出異常信息.此時(shí)就需要手動(dòng)去處理這些異常,而人工處理的效率非常低,因此添加異常處理是必不可少的,一般情況下,都會(huì)舍去這些不規(guī)范的商品.當(dāng)一個(gè)商品信息獲取完畢時(shí),開(kāi)始執(zhí)行保存到數(shù)據(jù)庫(kù)的操作,在保存數(shù)據(jù)庫(kù)之前,需先判斷數(shù)據(jù)庫(kù)中是否已經(jīng)包含此商品,在數(shù)以萬(wàn)計(jì)的商品中,免不了存在非常多的重復(fù)商品.對(duì)于帶有AJAX和JavaScript的動(dòng)態(tài)網(wǎng)頁(yè),通過(guò)模擬鼠標(biāo)事件來(lái)獲取相應(yīng)信息.
5 網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的應(yīng)用
事實(shí)上,越來(lái)越多的電商運(yùn)營(yíng)團(tuán)隊(duì)已意識(shí)到精細(xì)化運(yùn)營(yíng)和數(shù)據(jù)驅(qū)動(dòng)思維已經(jīng)成為電商自身增長(zhǎng)日益重要的因素[14-18],所以一個(gè)能高效率的網(wǎng)絡(luò)爬蟲(chóng)對(duì)一個(gè)電商平臺(tái)進(jìn)行數(shù)據(jù)挖掘有效信息而言是非常重要的.因此,本文主要建立在分布式系統(tǒng)的基礎(chǔ)上,多臺(tái)計(jì)算機(jī)多線程同時(shí)運(yùn)行,對(duì)京東平臺(tái)的商品信息進(jìn)行抓取.通過(guò)對(duì)獲取信息的整理、分析,對(duì)京東電商的發(fā)展形勢(shì)進(jìn)行把握.基于以上介紹對(duì)京東電商平臺(tái)信息獲取的運(yùn)行界面如圖6所示.
圖6界面簡(jiǎn)潔,信息框顯示程序正在獲取的商品信息.當(dāng)點(diǎn)擊開(kāi)始時(shí),所有線程開(kāi)始工作,每個(gè)線程都有唯一的標(biāo)識(shí)名稱,不同線程分配不同的分類任務(wù),獲取的內(nèi)容信息也不一樣,圖6信息框顯示程序運(yùn)行時(shí)商品信息一些展示,其中包括商品標(biāo)題,商品所屬分類,線程標(biāo)識(shí)以及商品的型號(hào),當(dāng)某個(gè)商品信息不規(guī)則或者信息獲取不符合要求時(shí),程序就會(huì)自動(dòng)提示異常,丟棄此商品.當(dāng)點(diǎn)擊暫停時(shí),所有的線程都會(huì)停止工作,多線程提高了商品信息獲取的效率.
通過(guò)本程序獲取到了京東電商平臺(tái)的各類信息,其中比較重要的有月銷售量、價(jià)格、產(chǎn)品的一些重要屬性.通過(guò)獲取每個(gè)月所有產(chǎn)品的總銷量,總銷售額,通過(guò)統(tǒng)計(jì)分析計(jì)算,預(yù)測(cè)下個(gè)月電商行業(yè)景氣度指數(shù),結(jié)合前端HTML,CSS和JavaScript技術(shù),把結(jié)果進(jìn)行圖形化處理,更加直觀清楚的看到電商景氣度的變化趨勢(shì),如圖7所示.
根據(jù)圖7電商景氣度指數(shù)折線圖顯示,京東電商景氣度大體上呈上升趨勢(shì),雖然在上半年有過(guò)幾次波折,但是總體來(lái)看是在曲折中上升的,尤其后半年電商景氣度走勢(shì)大致已經(jīng)趨于穩(wěn)定,該分析結(jié)果可以在運(yùn)營(yíng)團(tuán)隊(duì)進(jìn)行決策時(shí)作為參考資料.
進(jìn)一步地,分別篩選出一級(jí)類目和二級(jí)類目數(shù)據(jù),可以對(duì)不同分類產(chǎn)品進(jìn)行分析,獲取更詳細(xì)的信息,如圖8所示.
根據(jù)圖8電商類目銷售趨勢(shì)顯示,實(shí)線部分展示了護(hù)膚彩妝行業(yè)近一年的銷售量和銷售額的趨勢(shì)變化情況.虛線部分展示了對(duì)護(hù)膚彩妝行業(yè)未來(lái)一個(gè)月的銷售量和銷售額進(jìn)行預(yù)測(cè)的結(jié)果,結(jié)果僅供參考.同樣的,運(yùn)用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可以獲取其他行業(yè)類別的不同信息,然后對(duì)獲取到的信息進(jìn)行清洗、整合等標(biāo)準(zhǔn)化處理后,建立不同的數(shù)據(jù)挖掘模型,獲取有效信息指導(dǎo)企業(yè)決策.
6 結(jié)束語(yǔ)
隨著電商平臺(tái)信息資源的快速增長(zhǎng)以及商品信息資源動(dòng)態(tài)的變化,傳統(tǒng)的爬蟲(chóng)技術(shù)無(wú)法滿足對(duì)海量信息及時(shí)獲取的需求,以何種方式訪問(wèn)網(wǎng)絡(luò),提高爬蟲(chóng)效率,已經(jīng)成為近年來(lái)數(shù)據(jù)挖掘研究領(lǐng)域的主要方向之一.因此,本文采用多線程的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)對(duì)京東平臺(tái)資源信息進(jìn)行采集和提取,把整個(gè)京東平臺(tái)的產(chǎn)品信息集成為一個(gè)數(shù)據(jù)倉(cāng)庫(kù),進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析,獲取有用的信息以提供完善的實(shí)時(shí)監(jiān)控和精細(xì)化運(yùn)營(yíng)策略.基于MapReduce技術(shù)并行加載頁(yè)面,多個(gè)頁(yè)面內(nèi)容同時(shí)采集,針對(duì)調(diào)用JavaScript所展現(xiàn)出的內(nèi)容,通過(guò)Selenium技術(shù)模擬瀏覽器打開(kāi)相應(yīng)網(wǎng)址,等待JavaScript執(zhí)行完畢后再獲取頁(yè)面內(nèi)容,對(duì)于帶有分頁(yè)的頁(yè)面,Selenium可以模擬鼠標(biāo)單擊指定元素達(dá)到翻頁(yè)的效果,頁(yè)面加載完畢后再次獲取內(nèi)容,直到獲取最后一頁(yè)內(nèi)容為止.
在電商行業(yè)飛速發(fā)展的時(shí)代,搜索引擎不斷更新,電商平臺(tái)不斷完善,電商平臺(tái)數(shù)據(jù)的獲取面臨挑戰(zhàn).電商平臺(tái)商品的重要數(shù)據(jù)的不公開(kāi),對(duì)網(wǎng)絡(luò)爬蟲(chóng)的訪問(wèn)限制成了獲取數(shù)據(jù)的主要難題.在以后的研究中,會(huì)嘗試通過(guò)代理IP、控制訪問(wèn)速度、尋找真正的JavaScript地址等方式解決上述問(wèn)題.(本論文特別感謝課題組成員楚少波、楊艷艷等同志的協(xié)助與支持)
參考文獻(xiàn)
[1]中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心.中國(guó)互聯(lián)網(wǎng)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[R].中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心,2017.
[2]李志義.網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)化策略探略[J].現(xiàn)代情報(bào),2011,31(10):31-35.
[3]李代祎,謝麗艷,錢慎一,吳懷廣.基于Scrapy的分布式爬蟲(chóng)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].湖北民族學(xué)院學(xué)報(bào)(自然科學(xué)版),2017,35(3):318-322.
[4]ZHONG S J,DENG Z J. A Web crawler system design based on distributed technology[J].Academy Journal,2011,6(12):1682-1689.
[5]楊俊峰,黎建輝,楊風(fēng)雷.深層網(wǎng)站Ajax頁(yè)面數(shù)據(jù)采集研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2013,30(6):1607-1616.
[6]張升平.Ajax在優(yōu)化Web系統(tǒng)中的應(yīng)用[J].通信技術(shù),2009,42(2):286-288.
[7]孔濤,曹丙章,邱荷花.基于MapReduce的視頻爬蟲(chóng)系統(tǒng)研究[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,43(5):130-132.
[8]岳雨儉.基于Hadoop的分布式網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)[J].網(wǎng)絡(luò)通訊及安全,2015,11(8):36-38.
[9]趙輝,楊樹(shù)強(qiáng),陳志坤.基于MapReduce模型的范圍查詢分析優(yōu)化技術(shù)研究[J].計(jì)算機(jī)研究與發(fā)展,2014,51(3):606-617.
[10]吳黎兵,柯亞林,何炎.分布式網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(11):177-213.
[11]胡晟.基于網(wǎng)絡(luò)爬蟲(chóng)的Web挖掘應(yīng)用[J].軟件,2012,33(7):145-147.
[12]岳雨儉.基于Hadoop的分布式網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)[J].網(wǎng)絡(luò)通訊及安全,2015,11(8):36-38.
[13]李也 賀正楚 , 潘紅玉.基于眾籌商業(yè)模式的中國(guó)動(dòng)漫產(chǎn)業(yè)培育研究[J].東莞理工學(xué)院學(xué)報(bào),2015,22(2):69-74.
[14]賀正楚,黃穎琪,吳艷,等.跨境電商發(fā)展的制約因素、優(yōu)勢(shì)及措施--兼以湖南為例而論[J].長(zhǎng)沙理工大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2016,31(5):115-121.
[15]吳艷.戰(zhàn)略性新興產(chǎn)業(yè)的評(píng)價(jià)與選擇[J].科學(xué)學(xué)研究,2011,29(5):678-683,721.
[16]賀正楚,張訓(xùn),周震虹.戰(zhàn)略性新興產(chǎn)業(yè)的選擇與評(píng)價(jià)及實(shí)證分析[J].科學(xué)學(xué)與科學(xué)技術(shù)管理,2010,31(12):62-67.
[17]賀正楚,潘紅玉.中國(guó)制造業(yè)跨境電商發(fā)展面臨的問(wèn)題及對(duì)策[J].求索,2017(6):129-135.
[18]賀正楚, 黃穎琪, 吳艷.制造業(yè)電子商務(wù)發(fā)展面臨的問(wèn)題及其對(duì)策[J].地方財(cái)政研究,2016(6):9-18.