標籤:

初探 RSelenium —— 基於豆瓣電影的爬蟲實例

工具準備

  • JAVA:安裝 JAVA
  • Selenium Server:下載 selenium-server-standalone-版本號.jar (本文使用的是 3.4.0 版本)
  • Chrome:安裝 Chrome
  • ChromeDriver:下載 chromedrive.exe

註:下載的 chromedriver.exe 需放置在 Chrome 瀏覽器的安裝目錄下,即和 chrome.exe 放在同一個文件目錄下。並將該目錄添加入 環境變數 中。

一般 Chrome 的默認安裝路徑為:C:Program Files (x86)GoogleChromeApplication 。

  • SelectorGadget :[ ~~非必需~~ ] Chrome 擴展,可用於定位網頁元素的 xpath 。不過,也可以用 Chrome 瀏覽器在網頁右鍵選項卡中的「檢查」 功能(快捷鍵:F12)。
  • 所需 R 包: RSelenium 包:實現對瀏覽器行為的自動控制 rvest 包:讀取網頁,定位網頁元素並提取文本 stringr 包:利用正則表達式進行字元串處理。

Lets do it !

本文以「鹿晗」作為關鍵詞( ~~真愛粉們不要太較真~~ ),搜索其出演過的電影,最終整理齣電影名、評分信息和評價人數表。

啟動 Selenium Server

在所下載的 selenium-server-standalone-3.4.0.jar 文件目錄下打開命令行,輸入以下命令以啟動Selenium Server :

你也可以把這個命令存成後綴為 .cmd 的文件放在該文件目錄下,這樣下次只需雙擊運行即可。

在 R 中連接 Server ,打開瀏覽器和目標網頁 。

是不是發現,運行代碼後自動啟動了 Chrome ,並打開了 豆瓣電影 ?!有沒有一點緊張和小刺激?!

定位網頁元素,並向其傳入參數

RSelenium 包可通過 name 、 id 、 class 、 css-selectors 、 xpath 對網頁元素進行定位。本文儘可能多地採取不同的方法來展示如何使用它們。

可以看到,我們需要定位到搜索框。使用 SelectorGadget 或者瀏覽器的「檢查」功能,得到該搜索框的 name 為 search_text 。

在定位到搜索框後,需要傳入 keyword 並」回車「,從而實現搜索。

findElement :定位符合條件的網頁元素

sendKeysToElement :傳入參數

現在網頁應該變成了」鹿晗「所出演的電影列表了。

讀取網頁,得到所需元素的文本

首先,我們定位到每一部電影。通過瀏覽器的「檢查」功能,可以看出每部電影的 class=」pl2「 。定位到每部電影之後,提取其中的信息即可。

  • getElementAttribute :得到網頁信息

接下來就是靜態網頁的爬蟲套路了,使用 rvest 包和 stringr 包里的函數即可。

  • read_html :讀取網頁
  • html_nodes :定位元素
  • html_text :得到元素文本
  • strreplaceall 、 str_extract :字元串處理

跳轉到」下一頁「,爬取所有頁信息

將第一頁的結果爬取完後,我們需要跳轉到下一頁,實現對所有搜索結果的爬取。

因此,需要判斷還有多少頁待爬取,遍歷剩下的網頁即可。

圖中,"第二頁"所對應的 xpath 為 //*[@id="content"]/div/div[1]/div[3]/a ;」後頁「所對應的 class="next" ,我們使用 css-selectors 定位到它。

findElements :定位所有符合條件的網頁元素

clickElement :點擊

後續工作

當爬取了所有網頁的信息之後,我們應當對結果進行整理,並儲存。同時,關閉進程,退出瀏覽器。

quit :關閉進程,退出瀏覽器

部分爬取結果如下圖所示:

題外話

我們再做點有意思的工作~ ??

在 cmd 中運行 Rscipt 命令可以運行 R 的腳本,並傳入參數。我們只需要把 keyword<- "鹿晗" 改成 keyword<- commandArgs(T) 。

commandArgs :在 Rscript 命令中傳入參數 [ ~~非必需~~ ] 考慮到本人在 RStudio 中包安裝路徑並非與 R 默認的包安裝路徑相同,為了在運行 Rscipt 命令時,順利載入所需的包,還需要在腳本開頭添加所需載入包的位置。

此外,由於在運行 Rscipt 命令時,出現了缺失函數的錯誤,還需要額外載入 methods 包。

添加下列代碼即可:

將該 R 腳本文件儲存為 Crawler_DoubanMovie.R 。這樣一來,你只需在 R 腳本文件所在文件目錄下打開命令行工具,輸入如下命令,就可以完成整個爬取工作,並得到輸出的 .csv 文件了:


推薦閱讀:

大數據即服務(BDaaS):大數據行業的下一個熱門丨數據工匠簡報(6.20)
USC EE PHD和CMU MIIS master如何選擇?
福布斯深度專訪Jeff Dean——谷歌人工智慧背後的大腦丨數據工匠簡報(8.08)
Github上Pandas,Numpy和 Scipy三個庫中20個最常用的函數

TAG:数据科学家 |