R语言基于selenium模拟浏览器操作进行(AJAX渲染网页、动态网页)数据爬取-连载NO.02(更新中)

R语言动态网页数据爬取用法连载NO.02

selenium是一个开源的软件套件。selenium通过浏览器控制与网页进行交互,这样我们可以操作实时DOM树(浏览器窗口中视觉显示的方式)。

selenium可以控制浏览器实现文本输入、点击、滚动、滑动的操作。

                             可进行身份验证哦

使用selenium之前需要初始化selenium java server,server负责浏览器的启动与关闭。

使用Rselenium/Rwebdriver模拟浏览器操作抓取数据: 

在Rstudio中通过selenium api打开一个新的firefox窗口:

Rselenium包下打开firefox

remDr <- remoteDriver(browserName ="firefox")
system("java -jar \"D:/selenium-server-standalone-3.141.59.jar\"",wait = FALSE)
remDr$open()

 Rwebdriver包下打开firefox

关于Rwebdriver下载失败或者无法下载的问题,这里给出解决方案为:

首先你需要下载Rtools工具并安装,其次下载包不用install.packages,而是install_github,直接从github下载所需包,下载这个作者的install_github("crubba/Rwebdriver"),即可完美解决

library(Rwebdriver)
#打开浏览器之前先要启动selenium server
system("java -jar \"E:/selenium-server-standalone-3.141.59.jar\"",wait = FALSE)
#root为selenium java server的地址(默认地址如下),把firefox传递给参数browser是告诉服务器生成一个firefox浏览器窗口
start_session(root="http://localhost:4444/wd/hub/",browser="firefox")

Rwebdriver中相关常用函数说明(更新中):

Rwebdriver包中
star_session 创建浏览器会话page_forward向前翻一个页面
quit_session关闭会话,退出浏览器page_refresh刷新当前页面
status可查询服务器当前状态page_source接收HTML源代码
active_sessions检索活跃会话中的信息page_title接受网页的标题字符串
post.url打开新的网址window_handle返回活跃窗口的句柄
get.url获取当前网页网址window_handles返回当前会话的所有窗口句柄
element_find通过by方法和value值查找元素window_change把焦点改到带有handle句柄的窗口
element_xpath_find查找对应path字符串value的元素window_close关闭带有handle句柄的窗口
element_ptext_find查找对应文本字符串value的元素get_window_size返回当前窗口大小的向量
element_css_find查找对应css选择器字符串value的元素post_window_size为handle窗口发布新的窗口大小size
element_click(id,time,button)点击id元素get.window_position返回带有handle句柄的窗口的x、y坐标
element_clear清空id元素的文本域中输入的值post_window_position改变带有handle句柄窗口的坐标
page_back向后返回/退一个页面key生成键盘输入的term值

 Rselenium中相关常用函数说明(更新中):

Rselenium包中
remoteDriver使用JsonWireProtocol与selenium服务器通信,建立连接getCurrentUrl获取当前网页网址
open打开浏览器getPageSource获取网页源码
navigate跳转至指定网页clickElement点击元素
findElement查找元素更新中

 

 

用Rselenium内置函数前往/跳转到指定网页

#给定需要跳转的网址并前往
url <- 'https://www.baidu.com/'
remDr$navigate(url)
#进行指定内容搜索
# 定位文本框,可以用selectorgadget直接获取相应网页输入框的xpath
xpath <- '//*[@id="kw"]'
#通过findelement查找相应的元素
btn <- remDr$findElement(using = 'xpath', value = xpath)
# 输入文本并按回车
text <- list('leebelovedCSDN', key = 'enter')
btn$sendKeysToElement(text)

 用Rwebdriver内置函数前往/跳转到指定网页

post.url(https://blog.csdn.net/url="https://www.baidu.com/")
btn_id=element_xpath_find(value="//*[@id="kw"]")
#文本搜索后续补充

 获取当前搜索结果的网页网址:

btn$getCurrentUrl()
spyder_url<-btn$getCurrentUrl()[[1]]
#用RCurl包对网页进行解析
lee_url<-getURL(spyder_url,httpheader=mheader,debugfunction=dg$update,verbose=TRUE)
lee_analysis<-htmlParse(lee_url,encoding ="UTF-8")
#获取搜索结果页面的信息名称、网址
article_name<-xpathSApply(lee_analysis,"//*/div/h3[@class='t']",xmlValue)
article_link<-xpathSApply(lee_analysis,"//*/h3[@class='t']/a",xmlAttrs,'href')
art_link<-article_link[2,]



############
#或者直接用html_source<-remDr$getPageSource()[[1]]直接得到DOM树,然后进一步解析、查找
art_item<-html_source%>% read_html() %>% xml_find_all("//*/h3[@class='t']/a")
art_link<-art_item %>%xml_attr("href") 

Rselenium模拟点击页面

#模拟点击下一页
remDr$findElement('xpath','//div[@id="page"]/a[last()]')$clickElement()

 

 

更新中#########################################################

后期更新完整Rselenium、Rwebdriver爬取数据的文章及分析。

 

 

 

                                                                                                                                 

                                                                                                                                                            分享百科-松子

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刺猬多情

一分钱都是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值