1. 程式人生 > >R語言爬取動態網頁之環境準備

R語言爬取動態網頁之環境準備

   在R實現pm2.5地圖資料展示文章中,使用rvest包實現了靜態頁面的資料抓取,然而rvest只能抓取靜態網頁,而諸如ajax非同步載入的動態網頁結構無能為力。在R語言中,爬取這類網頁可以使用RSelenium包和Rwebdriver包。

  RSelenium包和Rwebdriver包都是通過呼叫Selenium Server來模擬瀏覽器環境。其中,Selenium是一個用於網頁測試的Java開源軟體,它可以模擬瀏覽器的點選、滾動、滑動以及文字輸入等操作。因為Selenium是Java程式,因此在使用RSelenium包和Rwebdriver包之前必須為計算機設定Java環境。以下是使用RSelenium包和Rwebdriver包的前期準備步驟:


一、RSelenium包和Rwebdriver包的下載安裝

  RSelenium包從CRAN直接下載安裝,Rwebdriver包則需要從github上下載,下載過程參考install_github無法安裝 Rwebdriver包的解決方法

二、Java環境的設定

  理論上講,呼叫Java程式安裝JRE(Java Runtime Environment)即可,但本文推薦安裝JDK(Java Development Kit),JDK中包含JRE模組,且網上找到的Java環境變數設定教程多針對JDK。

  1、 JDK的下載

  本文件中下載最新版的jdk-11.0.1_windows-x64_bin.zip

  2、 JDK的安裝

  由於下載的是無需安裝的版本,直接將檔案解壓出來,放到D:\Program Files\java目錄下即可

  3、環境變數的設定(可參考Java環境變數設定

  需設定JAVA_HOME,CLASS_PATH,PATH三個環境變數

  JAVA_HOME

  D:\Program Files\java\jdk-11.0.1

  CLASSPATH

  %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

  PATH

  %JAVA_HOME%\bin

  三個環境變數設定好以後,開啟cmd,輸入javac,不報錯即表示安裝成功。

  

  

三、selenium以及瀏覽器驅動的下載和執行

  1、下載selenium,網址為https://www.seleniumhq.org/download/

  下載最新版本,也可以到http://selenium-release.storage.googleapis.com/index.html 下載之前的版本。

   2、下載瀏覽器驅動

  Chrome驅動:http://npm.taobao.org/mirrors/chromedriver

  Firefox驅動:http://github.com/mozilla/geckodriver/releases

  下載時要注意自己瀏覽器的版本,如果使用Chrome瀏覽器可參考selenium之chromedriver與chrome版本對映表(更新至v2.34)

   在本環境中下載的是最新時間的v2.44版本

  

  3、開啟cmd執行selenium和瀏覽器驅動,比如我使用的是Chrome瀏覽器,因此在cmd中輸入java -Dwebdriver.chrome.driver="E:\Selenium\chromedriver.exe" -jar E:\Selenium\selenium-server-standalone-3.141.59.jar

  

  如出現下圖所示介面,則啟動成功(在R語言呼叫RSelenium包和Rwebdriver包時,cmd不要關閉)。

  

 

四、至此所有前期準備就都已完成,可以使用RSelenium包和Rwebdriver包了。

  以RSelenium包為例

  

library(RSelenium)

remDr <- remoteDriver(
  browserName = "chrome",
  remoteServerAddr = "localhost",
  port = 4444
)

remDr$open()

url <- 'https://www.google.com/'

remDr$navigate(url)

   可以看到“Chrome正受到自動測試軟體的控制”字樣。

 

  此時再使用rvest包對網頁進行抓取,抓到的就是經過瀏覽器渲染後的頁面:

library(rvest)
webpage <- read_html(remDr$getPageSource()[[1]][1])

 

參考連結:R語言爬取動態網頁:使用RSelenium包和Rwebdriver包的前期準備