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)

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

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

post.url(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爬取数据的文章及分析。

 

 

 

                                                                                                                                 

                                                                                                                                                            分享百科-松子

你可能感兴趣的:(R语言爬虫)