本章目标:掌握RSelenium核心操作,可以用R自动化控制浏览器。
一、什么是RSelenium
RSelenium是一个R语言下的包,通过这个包,我们可以通过脚本控制浏览器进行浏览、点击、输入内容、解析数据等操作,实现R语言的自动化数据爬取。
二、打开RSelenium包
- 打开cmd启动Selenium Server(不要关闭)
java -Dwebdriver.chrome.driver="C:UserselemeDownloadschromedriver.exe" -jar C:UserselemeDownloadsselenium-server-standalone-3.0.1.jar
- Rstudio中调用RSelenium包
#打开RSelenium包
library(RSelenium)
- 建立远程驱动实例,我们可以通过这个实例进行各种网页操作
#建立远程驱动实例
remDr <- remoteDriver(
browserName = "chrome",
remoteServerAddr = "localhost",
port = 4444L
platform = "ANY"
)
三、R操作浏览器的方法
四、R环境操作实例
#打开,关闭Session
remDr$open()
chrome显示正在受自动测试软件控制
#浏览网页
remDr$navigate('https://sh.lianjia.com/xiaoqu/')
navigate网页后显示页面
#后退,前进,刷新
remDr$goBack()
remDr$goForward()
remDr$refresh()
#抓取元素位置
xiaoqu_name_element <- remDr$findElement(using = "xpath", value = "/html/body/div[4]/div[1]/ul/li[1]/div[1]/div[1]/a")
#点击元素位置
xiaoqu_name_element$clickElement()
clickElement后,浏览器打开了上海康城的网站
#输入文本、清空文本
input_element <- remDr$findElement(using = "xpath", value = '//input[@id="searchInput"]')
input_element$sendKeysToElement(list('上海',key='enter')) #注意文本以list类型输入,key = 'enter'表示输入内容后直接按回车键
input_element$clearElement() #表示清楚文本内容
通过sendKeysToElement方法将“上海”传入文本框
#抓取元素值、抓取元素属性
xiaoqu_name_element <- remDr$findElement(using = "xpath", value = "/html/body/div[4]/div[1]/ul/li[1]/div[1]/div[1]/a")
xiaoqu_name_element$getElementText() 结果返回小区名称
xiaoqu_name_element$getElementAttribute('href')结果返回小区名称的href属性值(小区链接)
分别返回了元素值以及元素的href属性值
常用的RSelenium操作标签已经举例,其他操作可以参见官方文档RSelenium文档
本课完整代码:
#打开RSelenium包
library(RSelenium)
# 建立远程驱动实例
remDr <- remoteDriver(
browserName = "chrome",
remoteServerAddr = "localhost",
port = 4444L
platform = "ANY"
)
#打开,关闭Session
remDr$open()
#浏览网页
remDr$navigate('https://sh.lianjia.com/xiaoqu/')
#后退,前进,刷新
remDr$goBack()
remDr$goForward()
remDr$refresh()
#抓取元素位置
xiaoqu_name_element <- remDr$findElement(using = "xpath", value = "/html/body/div[4]/div[1]/ul/li[1]/div[1]/div[1]/a")
#点击元素位置
xiaoqu_name_element$clickElement()
#输入文本、清空文本
input_element <- remDr$findElement(using = "xpath", value = '//input[@id="searchInput"]')
input_element$sendKeysToElement(list('上海',key='enter')) #注意文本以list类型输入,key = 'enter'表示输入内容后直接按回车键
input_element$clearElement() #表示清楚文本内容
#抓取元素值、抓取元素属性
xiaoqu_name_element <- remDr$findElement(using = "xpath", value = "/html/body/div[4]/div[1]/ul/li[1]/div[1]/div[1]/a")
xiaoqu_name_element$getElementText() 结果返回小区名称
xiaoqu_name_element$getElementAttribute('href')结果返回小区名称的href属性值(小区链接)
数据采集课程:
有马骏:第0课:一个周末学会R语言数据采集:数据从哪里来?zhuanlan.zhihu.com
有马骏:第1课:一个周末学会R语言数据采集:爬虫介绍zhuanlan.zhihu.com
有马骏:第2课:一个周末学会R语言数据采集:R爬虫环境安装zhuanlan.zhihu.com
有马骏:第3课:一个周末学会R语言数据采集:XPath基础zhuanlan.zhihu.com
有马骏:第4课:一个周末学会R语言数据采集: Selenium常用操作zhuanlan.zhihu.com
有马骏:第5课:一个周末学会R语言数据采集:正则表达式入门zhuanlan.zhihu.com
有马骏:第6课:一个周末学会R语言数据采集:爬取链家小区数据zhuanlan.zhihu.com
数据处理课程:
有马骏:第0课:一个周末学会R语言数据处理:从数据库到数仓再到数据集市zhuanlan.zhihu.com
有马骏:第1课:一个周末学会R语言数据处理:表快速读取zhuanlan.zhihu.com
有马骏:第2课:一个周末学会R语言数据处理:表拆分和拼接zhuanlan.zhihu.com