R语言爬取动态网页之环境准备

   在R实现pm2.5地图数据展现文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力。在R语言中,爬取这类网页可使用RSelenium包和Rwebdriver包。html

  RSelenium包和Rwebdriver包都是经过调用Selenium Server来模拟浏览器环境。其中,Selenium是一个用于网页测试的Java开源软件,它能够模拟浏览器的点击、滚动、滑动以及文字输入等操做。由于Selenium是Java程序,所以在使用RSelenium包和Rwebdriver包以前必须为计算机设置Java环境。如下是使用RSelenium包和Rwebdriver包的前期准备步骤:java


1、RSelenium包和Rwebdriver包的下载安装git

  RSelenium包从CRAN直接下载安装,Rwebdriver包则须要从github上下载,下载过程参考install_github没法安装 Rwebdriver包的解决方法github

2、Java环境的设置web

  理论上讲,调用Java程序安装JRE(Java Runtime Environment)便可,但本文推荐安装JDK(Java Development Kit),JDK中包含JRE模块,且网上找到的Java环境变量设置教程多针对JDK。ajax

  一、 JDK的下载chrome

  本文档中下载最新版的jdk-11.0.1_windows-x64_bin.zipnpm

  二、 JDK的安装windows

  因为下载的是无需安装的版本,直接将文件解压出来,放到D:\Program Files\java目录下便可api

  三、环境变量的设置(可参考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,不报错即表示安装成功。

  

  

3、selenium以及浏览器驱动的下载和运行

  一、下载selenium,网址为https://www.seleniumhq.org/download/

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

   二、下载浏览器驱动

  Chrome驱动:http://npm.taobao.org/mirrors/chromedriver

  Firefox驱动:http://github.com/mozilla/geckodriver/releases

  下载时要注意本身浏览器的版本,若是使用Chrome浏览器可参考selenium之chromedriver与chrome版本映射表(更新至v2.34)

   在本环境中下载的是最新时间的v2.44版本

  

  三、打开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不要关闭)。

  

 

4、至此全部前期准备就都已完成,可使用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包的前期准备

相关文章
相关标签/搜索