莊旭東 王志堅

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