莊旭東 王志堅
摘?要:隨著互聯(lián)網(wǎng)的快速發(fā)展,大數(shù)據(jù)時代的來臨,網(wǎng)絡上的數(shù)據(jù)和信息呈爆炸性增長,網(wǎng)絡爬蟲技術(shù)越來越受歡迎。本文通過以抓取二手房出售數(shù)據(jù)為例,探索R語言爬蟲技術(shù)的網(wǎng)頁信息抓取方法,發(fā)現(xiàn)基于R語言的rvest函數(shù)包與SelectorGadget工具實現(xiàn)的網(wǎng)頁信息爬取方法比傳統(tǒng)方法更加簡單快捷。
關(guān)鍵詞:R語言;網(wǎng)絡爬蟲;網(wǎng)頁信息抓取;二手房
傳統(tǒng)的網(wǎng)絡搜索引擎在網(wǎng)絡信息資源的搜索中起著非常重要的作用,但它們?nèi)匀挥泻芏嘞拗啤,F(xiàn)如今,在網(wǎng)頁信息抓取上R語言有其獨特的優(yōu)勢,用它所編寫的爬蟲語法相對直觀簡潔,規(guī)則更加靈活簡單,對操作者要求也相對較低,不必深入研究某一軟件或編程語法,也不必具備很多網(wǎng)頁方面的相關(guān)知識,非專業(yè)的人甚至是初學者,也可輕松掌握其方法,快捷方便獲得所需的網(wǎng)頁信息。除此之外,R軟件可以非常自如的處理百萬數(shù)量級以下的數(shù)據(jù),而且其本身就是一個用于統(tǒng)計計算和統(tǒng)計制圖的功能強大的工具,運用R軟件進行操作,所實現(xiàn)的爬蟲技術(shù)的網(wǎng)頁信息抓取擷獲得到的數(shù)據(jù),可以直接進行統(tǒng)計分析和數(shù)據(jù)挖掘,省去了數(shù)據(jù)的再導入或整合的步驟,更加直接方便。
1 研究方法概述
本文運用R軟件中的rvest函數(shù)包,來實現(xiàn)抓取網(wǎng)頁信息數(shù)據(jù)。運用該包中read_html()、html_nodes()和html_text()三個函數(shù)與SelectorGadget工具(以下簡寫為工具)相配合。使用read_html()函數(shù)抓取整個網(wǎng)頁的原始HTML程式碼,再使用html_nodes()函數(shù)從整個網(wǎng)頁的元素中選出由工具獲取的路徑的信息,最后使用html_text()函數(shù)將HTML程式碼中的文字資料提取出來得到我們所需要的數(shù)據(jù)。并且根據(jù)網(wǎng)頁的規(guī)則,利用for()這一循環(huán)函數(shù)實現(xiàn)多網(wǎng)頁的信息抓取工作。接著與不同的抓取網(wǎng)頁信息的方法進行比較得出R語言做爬蟲的優(yōu)勢,并對R語言爬蟲技術(shù)的網(wǎng)頁信息抓取方法進行比較展望,也對大數(shù)據(jù)時代的數(shù)據(jù)獲取方式與技巧作進一步探索。
2 網(wǎng)絡爬蟲的相關(guān)概念與步驟
2.1 網(wǎng)絡爬蟲概念
網(wǎng)絡爬蟲,是一個用于自動提取網(wǎng)頁信息的程序,可以自動從萬維網(wǎng)上下載網(wǎng)頁,并將收集到的信息存儲到本地數(shù)據(jù)庫中。根據(jù)網(wǎng)絡爬蟲系統(tǒng)的結(jié)構(gòu)和實現(xiàn)技術(shù),大致可以分為以下幾種:通用網(wǎng)絡爬蟲、聚焦網(wǎng)絡爬蟲、增量式網(wǎng)絡爬蟲、深層網(wǎng)絡爬蟲。這些爬蟲技術(shù)的出現(xiàn)是為了提高爬行的效率,我們需要在更短的時間內(nèi)盡可能多地獲取有用的頁面信息。
2.2 網(wǎng)絡爬蟲步驟
實現(xiàn)網(wǎng)絡爬蟲的基本步驟有:①首先選取一部分精心挑選的種子URL;②將這些種子放入待抓取URL隊列;③從待抓取URL隊列中取出待抓取在URL,解析DNS,并且得到主機的ip,并將URL對應的網(wǎng)頁下載下來,存儲進已下載網(wǎng)頁庫中,此外,將這些URL放進已抓取URL隊列;④分析已抓取URL隊列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊列,從而進入下一個循環(huán)。
3 基于R語言rvest包實現(xiàn)網(wǎng)頁信息抓取
本文使用SelectorGadget路徑選擇工具,直接定位我們所需要的數(shù)據(jù),再結(jié)合R語言rvest包,以2018年4月鏈家網(wǎng)廣州二手房出售數(shù)據(jù)為例,將我們需要的數(shù)據(jù)從網(wǎng)頁中抓取出來。
3.1 網(wǎng)頁信息抓取準備
3.1.1 SelectorGadget工具
信息的抓取需先定位數(shù)據(jù),選取網(wǎng)頁節(jié)點,然后獲取的二手房相關(guān)信息的網(wǎng)頁路徑信息,具體的步驟如下:
①準備好SelectorGadget工具:打開廣州鏈家網(wǎng)頁面,并打開該工具列,其開啟之后,會顯示在頁面的右下角。
②產(chǎn)生CSS選擇器并顯示該選擇器所能擷取的HTML元素:使用鼠標在網(wǎng)頁上點選要獲取的資料,被點選的HTML元素就會以綠色標示,而這時該工具會嘗試偵測使用者想要抓取的資料的規(guī)則,進而產(chǎn)生一組CSS選擇器,并顯示在該工具列上,同時頁面上所有符合這組CSS選擇器的HTML元素都會用黃色標注出來,即目前這組CSS選擇器將會擷取所有綠色與黃色的HTML元素。
③去除不需要的HTML元素:該工具所偵測的CSS選擇器一般會包含一些所不需要的資料,這時可以將那些被標示但要排除在外的HTML元素點除,點除的元素會標示成紅色。
④獲取精準的CSS選擇器:在選擇與排除HTML元素后,所有想要擷取的元素已經(jīng)全部精準標示出來,可以生成一組精確的CSS選擇器,顯示在該工具列上,可以利用其在R軟件中進行處理。
3.1.2 R軟件相關(guān)函數(shù)包與使用
實現(xiàn)網(wǎng)頁信息的爬取,R語言的編寫需要引用到xml2、rvest、dplyr、stringr等的函數(shù)包里的函數(shù),故而下載這幾個函數(shù)包,并且加載所需的包。具體做法的是使用install.packages()與library()函數(shù)進行實現(xiàn),也可以將這些包下載到本地安裝。
3.2 網(wǎng)頁信息抓取實現(xiàn)
下面以鏈家網(wǎng)廣州二手房出售為例,根據(jù)前面的步驟,首先使用read_html()函數(shù)抓取整個鏈家網(wǎng)頁的原始HTML程式碼,再使用html_nodes()函數(shù)從整個鏈家網(wǎng)頁的元素中選出由SelectorGadget工具獲取的路徑的信息,最后使用html_text()函數(shù)將HTML程式碼中的文字資料提取出來得到我們所需要的鏈家網(wǎng)數(shù)據(jù)。
rvest包的幾個函數(shù)針對了某個網(wǎng)頁進行數(shù)據(jù)的爬取,但可以發(fā)現(xiàn),廣州鏈家網(wǎng)的二手房數(shù)據(jù)有很多頁,并且有用的信息包括房名、描述、位置、房價等,因此,選用循環(huán)函數(shù)for(),編寫出如下的函數(shù),將鏈家網(wǎng)上所有有分析價值的信息都爬取出來,并寫成csv格式的文件,便于進一步分析,由于篇幅有限,在此就列出部分結(jié)果,如下表所示。
上表給出了廣州部分二手房的基本信息。
可見,運用rvest包結(jié)合CSS選擇器能夠快速實現(xiàn)R語言下的網(wǎng)絡數(shù)據(jù)抓取,并適當結(jié)合stringr包中的字符串處理函數(shù)對網(wǎng)頁數(shù)據(jù)進行清洗和整理,能十分方便有效地獲得網(wǎng)頁數(shù)據(jù)并且可以直接進行數(shù)據(jù)處理和分析。通過直接利用所爬取的數(shù)據(jù),對房價是否符合正態(tài)分布進行簡單地分析,展示R語言實現(xiàn)網(wǎng)頁數(shù)據(jù)爬取之后對獲得的數(shù)據(jù)進行分析的便利性和優(yōu)越性。
4 rvest包與其他網(wǎng)頁信息抓取方法比較分析
R語言實現(xiàn)網(wǎng)絡爬蟲有兩種方法,一種是利用本文所提到的rvest包,另外一種是利用RCurl包和XML包。
由rvest函數(shù)包配合SelectorGadget工具實現(xiàn)R語言在網(wǎng)頁信息爬取上的應用這個方法,與采用XML包和RCurl包進行爬取相比,更加簡單,代碼更加簡潔直觀。R中的rvest包將原本復雜的網(wǎng)頁爬蟲工作壓縮到讀取網(wǎng)頁,檢索網(wǎng)頁和提取文本,使其變得非常簡單,而且根據(jù)網(wǎng)頁的規(guī)律,運用for()循環(huán)函數(shù)進行實現(xiàn)多張網(wǎng)頁的信息爬取。而使用XML包和RCurl包進行實現(xiàn),則需要一些關(guān)于網(wǎng)頁的基礎(chǔ)知識,模擬瀏覽器行為偽裝報頭,接著訪問頁面解析網(wǎng)頁,然后定位節(jié)點獲取信息,最后再將信息整合起來。該方法更為困難繁瑣,在訪問網(wǎng)頁時有時并不能順利讀取解析,并且在選取節(jié)點的時候需要HTML的基礎(chǔ)知識,在網(wǎng)頁源代碼中找尋,有些網(wǎng)頁的源代碼相當復雜,并不易于定位節(jié)點。
兩種實現(xiàn)的方法所能達到的效果基本大同小異,而且利用for()循環(huán)函數(shù)可以實現(xiàn)多網(wǎng)頁數(shù)據(jù)的爬取,從上手角度上講,rvest包顯示是更勝一籌,是XML包和RCurl包的進化,更加簡潔方便。
而除此之外,用Python實現(xiàn)網(wǎng)絡爬蟲也是很受歡迎。Python的pandas模塊工具借鑒了R的dataframes,而R中的rvest包則參考了Python的BeautifulSoup,兩種語言在一定程度上存在互補性。Python在實現(xiàn)網(wǎng)絡爬蟲上更有優(yōu)勢,但就網(wǎng)頁數(shù)據(jù)爬取方面而言,基于R語言工具進行實現(xiàn),更加簡潔方便,而且R在統(tǒng)計分析上是一種更高效的獨立數(shù)據(jù)分析工具,運用R語言獲取的數(shù)據(jù)避免了平臺環(huán)境轉(zhuǎn)換的繁瑣,從數(shù)據(jù)獲取、數(shù)據(jù)清洗到數(shù)據(jù)分析,代碼環(huán)境、平臺保持了一致性。
參考文獻:
[1]吳睿,張俊麗.基于R語言的網(wǎng)絡爬蟲技術(shù)研究[J].科技資訊,2016,14(34):35-36.
[2]西蒙·蒙策爾特.基于R語言的自動數(shù)據(jù)收集:網(wǎng)絡抓取和文本挖掘?qū)嵱弥改蟍M].機械工業(yè)出版社,2016.
[3]劉金紅,陸余良.主題網(wǎng)絡爬蟲研究綜述[J].計算機應用研究,2007,24(10):26-29.