天天看點

《資料科學:R語言實作》——2.7 爬取網絡資料

本節書摘來自華章計算機《資料科學:r語言實作》一書中的第2章,第2.7節,作者 丘祐玮(david chiu),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在本教程中,你需要給開發環境安裝r,同時確定計算機可以通路網際網路。

《資料科學:R語言實作》——2.7 爬取網絡資料

2.頁面出現後,如圖9所示。我們可以安裝加載rvest程式包:

《資料科學:R語言實作》——2.7 爬取網絡資料
《資料科學:R語言實作》——2.7 爬取網絡資料

4.使用浏覽器的内置網頁檢視器,檢視下列名額圖中的具體報價位置(如圖10中用紅框标記):

《資料科學:R語言實作》——2.7 爬取網絡資料

5.你可以移動滑鼠檢視具體報價,單擊希望爬取的目标元素。如圖11所示,

部分包含所有所需的資訊:

《資料科學:R語言實作》——2.7 爬取網絡資料

6.使用函數html_nodes抽取cell類中的元素:

《資料科學:R語言實作》——2.7 爬取網絡資料

7.另外,我們可以使用cell__label類中的元素解析具體報價的标簽,從爬取的html中抽取文本,并清理抽取文本中的空格和換行符:

《資料科學:R語言實作》——2.7 爬取網絡資料

8.而且,我們可以使用cell__value類中的元素抽取具體報價的值,從爬取的html中抽取文本,同樣清理空格和換行符:

《資料科學:R語言實作》——2.7 爬取網絡資料

9.最後我們可以設定抽取的label作為value的名稱:

《資料科學:R語言實作》——2.7 爬取網絡資料
《資料科學:R語言實作》——2.7 爬取網絡資料

11.然後我們使用網頁檢視器檢視表元素的位置,如圖13所示。

12.我們可以使用html_table,通過data-table類抽取表元素:

《資料科學:R語言實作》——2.7 爬取網絡資料
《資料科學:R語言實作》——2.7 爬取網絡資料

從網站上爬取資料最困難的是資料使用不同的格式進行釋出和結構化。在開展工作之前,你需要完全了解資料在html中是如何結構化的。

由于html(hypertext markup language,超文本标記語言)擁有和xml類似的文法,我們可以使用xml程式來讀取和解析html網頁。但是,xml程式包隻提供了xpath方法。它有如下兩個缺點:

《資料科學:R語言實作》——2.7 爬取網絡資料

由于這些原因,在解析html的時候,我們推薦使用css選擇器,而不是xpath。

python使用者可能對如何使用請求和beautifulsoup程式包快速爬取資料比較熟悉。rvest程式包就是r中用來實作類似功能的。它提供了簡單有效的從html網頁收集資料的能力。

然後,你可以把光标移動到devtools視窗的左上部分,選取inspect element圖示(類似放大鏡的符号)。接着,單擊目标元素,devtools視窗會對選取區域的源代碼進行高亮顯示。你可以把光标移動到高亮區域,并右擊。從彈出菜單中,單擊copy css path抽取css路徑。你也可以使用cell類,檢視源代碼,并觀察選取的元素是如何在html代碼中結構化的。

rvest的一個優點是它在設計之初就與magrittr相容。是以我們可以使用管道操作符%>%把每個階段的輸出連接配接起來。 我們可以首先調用spx_quote擷取輸出源,然後把輸出傳給html_nodes。由于函數html_nodes使用css選擇器來解析元素,是以函數會使用基礎的,帶有類型(例如div)、id(例如#header)和類(例如.cell)的選擇器 。由于待抽取的元素擁有cell類,是以你應該在cell前放置一個點号(.)。

最後,我們應該從之前解析的節點中抽取标簽和值。這裡,我們首先抽取cell__label類中的元素,然後使用html_text抽取文本。我們可以使用函數gsub清理文本中的空格和換行符。類似地,我們使用同樣的方法來抽取class__value的元素。因為我們從具體的報價中抽取了标簽和值,我們就可以使用标簽作為值的名稱。現在我們已經把網絡資料組織在了結構化的資料中。

我們也可以使用rvest采集表格資料。與标普500指數資料采集的過程類似,我們可以首先通路能源和石油市場指數網頁,然後使用網絡元素檢視器找到表格資料元素位置。由于我們已經找到了data-table類中的元素,我們可以使用函數html_table來讀取表格内容,并傳給一個資料框。

《資料科學:R語言實作》——2.7 爬取網絡資料

2.單擊右上角圖示打開selectorgadget,選取需要爬取的區域。被選區域會變成綠色,如圖15所示。這個工具會展示區域的css路徑,以及與路徑比對的元素數目:

《資料科學:R語言實作》——2.7 爬取網絡資料

3.你可以粘貼抽取的css路徑給html_nodes,作為輸入參數來解析資料。

《資料科學:R語言實作》——2.7 爬取網絡資料

2.然後,使用下列指令啟動selenium單機伺服器:

《資料科學:R語言實作》——2.7 爬取網絡資料

3.如果你成功地啟動了selenium單機伺服器,你應該看到下列資訊,如圖17所示。它意味着你可以通過端口4444連接配接伺服器了:

《資料科學:R語言實作》——2.7 爬取網絡資料

4.現在,你可以使用下列指令安裝加載rselenium:

《資料科學:R語言實作》——2.7 爬取網絡資料

5.安裝rselenium之後,注冊驅動并連接配接selenium伺服器:

《資料科學:R語言實作》——2.7 爬取網絡資料

6.檢視伺服器的狀态:

《資料科學:R語言實作》——2.7 爬取網絡資料
《資料科學:R語言實作》——2.7 爬取網絡資料

8.最後,我們可以使用css選取器爬取資料:

《資料科學:R語言實作》——2.7 爬取網絡資料