在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包的前期准备

R语言爬取动态网页之环境准备的更多相关文章

  1. 爬虫(三)通过Selenium + Headless Chrome爬取动态网页

    一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...

  2. 记录几个爬取动态网页时的问题(下拉框,旧的元素无法获取,获取的源代码和f12看到的不一致,爬取延迟)

    更新.....这个动态网页其实直接抓取ajax请求就可以了,很简单,我之前想复杂了,虽然也实现了,但是效率极低,不过没关系,就当作是对Selenium的一次学习吧 1.最近在爬取一个动态网页,其中为了 ...

  3. python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  4. 利用selenium并使用gevent爬取动态网页数据

    首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置  https: ...

  5. R语言爬虫:使用R语言爬取豆瓣电影数据

    豆瓣排名前25电影及评价爬取 url <-'http://movie.douban.com/top250?format=text' # 获取网页原代码,以行的形式存放在web 变量中 web & ...

  6. 爬取动态网页:Selenium

    参考:http://blog.csdn.net/wgyscsf/article/details/53454910 概述 在爬虫过程中,一般情况下都是直接解析html源码进行分析解析即可.但是,有一种情 ...

  7. python爬取动态网页2,从JavaScript文件读取内容

    import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...

  8. 写论文,没数据?R语言抓取网页大数据

    写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...

  9. Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

随机推荐

  1. CentOS7搭建FastDFS V5.11分布式文件系统(三)

    1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...

  2. shell 删除文本中的重复行

    三种常见方法:第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复 ...

  3. apache笔记

    apache笔记 一)两种工作模式 Prefork和worker prefork模式: 一个进程响应一个请求 主进程生成多个工作进程,由工作进程一对一的去响应客户端的请求 过程: 1)用户空间有个具有 ...

  4. 【hdu 6071】Lazy Running

    菜鸡永远都在做着变聚的梦. 题意 有 \(4\) 个点连成一个环,连接顺序依次为 \(1-2-3-4-1\).相邻两个点之间有个距离 \(d_{i,i+1}\)(特别地,当 \(i=4\) 时为 \( ...

  5. Django学习系列9:接着修改首页

    现在的功能测试还是失败的,继续修改代码,让其通过.因为HTML现在保存在模板中,可以尽情修改,无需编写额外的单元测试.我们需要一个<h1>元素 修改:lists/templates/hom ...

  6. noi.ac NA535 【生成树】

    因为太蠢一直写T1也没仔细想,赛后发现是个真小清新思维题,本质构造??? 首先显然不会无解,这个随随便便证一下就有了 另外给的式子没啥意义,也就能说明颜色随机???害人不浅 然后就从\(1\)开始,钦 ...

  7. BZOJ2656 [Zjoi2012]数列(sequence)[模拟]

    这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor ...

  8. 更新protobuf

    sudo pip install --upgrade protobuf sudo apt-get install libprotobuf-dev protobuf-compiler这个不知道是什么问题 ...

  9. LINUX装机问题:无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端

    用VMware装LINUX虚拟机之后,你会发现在X Window的登陆界面无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端,这是因为VMware默认的快捷键也是Ctrl+Alt,所以你只需 ...

  10. OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)

    一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...