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包的前期准备
R语言爬取动态网页之环境准备的更多相关文章
- 爬虫(三)通过Selenium + Headless Chrome爬取动态网页
一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...
- 记录几个爬取动态网页时的问题(下拉框,旧的元素无法获取,获取的源代码和f12看到的不一致,爬取延迟)
更新.....这个动态网页其实直接抓取ajax请求就可以了,很简单,我之前想复杂了,虽然也实现了,但是效率极低,不过没关系,就当作是对Selenium的一次学习吧 1.最近在爬取一个动态网页,其中为了 ...
- python爬取动态网页数据,详解
原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...
- 利用selenium并使用gevent爬取动态网页数据
首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置 https: ...
- R语言爬虫:使用R语言爬取豆瓣电影数据
豆瓣排名前25电影及评价爬取 url <-'http://movie.douban.com/top250?format=text' # 获取网页原代码,以行的形式存放在web 变量中 web & ...
- 爬取动态网页:Selenium
参考:http://blog.csdn.net/wgyscsf/article/details/53454910 概述 在爬虫过程中,一般情况下都是直接解析html源码进行分析解析即可.但是,有一种情 ...
- python爬取动态网页2,从JavaScript文件读取内容
import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...
- 写论文,没数据?R语言抓取网页大数据
写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...
- Python+Selenium爬取动态加载页面(2)
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
随机推荐
- MySQL中自定义排序
在开发时候,我们经常使用的是默认的排序规则,但在某些特殊情况下,通过指定顺序来进行排序 -- fileld自定义排序时,应该是非主键的,否则主键是无效 SELECT * FROM customer W ...
- 一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密
什么是MD5? MD5(Message Digest Algorithm 5,信息摘要算法5),是计算机广泛使用的摘要算法(又称哈希算法)之一.MD5是将一段信息,通过其不可逆的字符串变换算法,产生了 ...
- LINUX任意精度计算器BC用法
[用途说明] Bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下.手册页上说bc是An arbitrary precision cal ...
- 网络初级篇之OSPF(二)实验
一.实验目的: 下面关于OSPF的实验,仔细看配置过程,以增加对OSPF的理解. 二.实现目标: 使用OSPF实现所有主机之间的通信 三.配置过程: 1.AR1的配置过程: ...
- 一,Devops核心要点及kubernetes的架构概述
目录 1,devops的简述及要点 2,kubernetes的简单介绍与组成 特性 集群构成 pod的基本概念 kubernetes网络 1,devops的简述及要点 DevOps,分层架构 ---& ...
- Could not determine which “make” command to run. Check the “make” step in the build configuration
环境: QT5.10 VisualStudio2015 错误1: Could not determine which “make” command to run. Check the “make” s ...
- maven中使用jetty插件
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...
- 第二章 Vue快速入门-- 17 v-for指令的四种使用方式
1.v-for循环普通数组 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 【HDU5890】Eighty seven
题目大意:给定 N 个数,M 个询问,每次询问如果去掉三个数(可能相同),能否选择恰好 10 个数字,凑出 87 这个数. 题解:骚操作.. 集合凑数问题是一个很经典的模型,即:背包问题. 先进行预处 ...
- IPC 进程间通信方式——共享内存
共享内存 共享内存区域是被多个进程共享的一部分物理内存. 多个进程都可以把共享内存映射到自己的虚拟空间.所有用户空间的进程要操作共享内存,都要将其映射到自己的虚拟空间,通过映射的虚拟内存空间地址去操作 ...