[R语言] 利用RSelenium/ Rwebdriver抓取动态页面
Posted 乔博研习社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[R语言] 利用RSelenium/ Rwebdriver抓取动态页面相关的知识,希望对你有一定的参考价值。
前言
有关R语言爬虫的实践,主要有以下几个包:RCurl、XML、rvest、RSelenium、Rwebdriver,相比Python,R语言的爬虫实例比较少,学习R语言爬虫,可以参考《基于R语言的自动数据收集》,该书涉及的面比较广且配有案例,但有些章节讲的不够深入,仍需补充完善。
爬虫对象一般有静态页面、script页面、ajax页面,至于网页知识和相关原理暂不关注,本文主要与大家分享如何利用RSelenium抓取动态页面(JS渲染页面)。
RSelenium介绍
RSelenium作用是用R调用Selenium Server。SeleniumServer允许你在不同的浏览器上打开网址,对网页进行操作,并爬取网页元素的独立JAVA程序。所以,通过Selenium Server我们可以对网页进行操作,然后爬取操作后的数据,从而进行爬取动态页面。
基于selenium调用Rwebdriver包,便可将动态网页(ajax)处理成我们熟悉的爬虫方法,再爬取页面。
准备工作
安装系统:Win7 64
下载安装:
1. JAVAJDK 1.8.0_101(传送门);
Selenium Server是一个JAVA程序,需要JAVA的环境,要安装jdk;
安装配置(传送门)。
2. SeleniumServer stand-alone 3.4.0(传送门);
Selenium Server的JAVA文件;
在cmd中运行java -jar D:\R\selenium-server-standalone-3.4.0.jar
出现 ”SeleniumServer is up and running“ 表示启动成功。
3. Chrome浏览器 60.0.3112.90 (传送门),需翻墙。
ChromeDriver 2.31(传送门);
4. SeleniumServer调用Chrome的驱动。
把解压后的ChromeDriver.exe放在
C:\Program Files(x86)\Google\Chrome\Application,与chrome.exe放在同一个目录下面。
将C:\ProgramFiles (x86)\Google\Chrome\Application添加到环境变量PATH的路径中。
应用实例
1. 目标:在网贷之家的数据平台(http://shuju.wdzj.com/)中爬取近7日各个P2P平台的数据表格(成交量、平均收益率、投资人数、人均投资金额)下图红色方框的内容。
2. 爬取流程
1>启动Selenium Server。
通过R调用SeleniumServer并打开网页,对页面进行点击,选取相应条件。 通过RSelenium与rvest共同爬取数据。
2>安装包
Rwebdriver包需要调用devtools从github下载:
devtools::install_github(repo="Rwebdriver",username="crubba")
3. 爬虫程序
library(Rwebdriver)
library(XML)
start_session(root ="http://localhost:4444/wd/hub/", browser ="chrome")
list_url <- "http://shuju.wdzj.com/"
post.url(url = list_url)
# 近7日
condition_date <-element_xpath_find("/html/body/div[3]/div[2]/div[1]/div[2]/div[2]/div[1]/ul/li[2]")
element_click(ID = condition_date, times =1, button = "left")
# 数据自选指标
shuju_diy <- element_xpath_find("/html/body/div[3]/div[2]/div[2]/div[1]/a")
element_click(ID = shuju_diy, times = 1,button = "left")
#平均借款期限(去除字段)
condition_diy_d4 <-element_xpath_find("/html/body/div[3]/div[2]/div[2]/div[2]/div[2]/ul/li[3]")
element_click(ID = condition_diy_d4, times= 1, button = "left")
#待还余额(去除字段)
condition_diy_d8 <- element_xpath_find("/html/body/div[3]/div[2]/div[2]/div[2]/div[2]/ul/li[5]")
element_click(ID = condition_diy_d8, times= 1, button = "left")
#投资人数(选入字段)
condition_diy_d1 <-element_xpath_find("/html/body/div[3]/div[2]/div[2]/div[2]/div[2]/ul/li[10]")
element_click(ID = condition_diy_d1, times= 1, button = "left")
#人均投资金额(选入字段)
condition_diy_d13 <-element_xpath_find("/html/body/div[3]/div[2]/div[2]/div[2]/div[2]/ul/li[11]")
element_click(ID = condition_diy_d13, times= 1, button = "left")
#确定
submit_diy <- element_xpath_find("//*[@id='btn-diy']")
element_click(ID = submit_diy, times = 1,button = "left")
pageSource <- page_source() # 保存静态页面
list_web <-htmlParse(pageSource,encoding = "UTF-8") #中文乱码
tableNodes <-getNodeSet(list_web,"//*[@id='platTable']") #解析表格
tb <- readHTMLTable(tableNodes[[1]],header = FALSE)
names(tb) <-c('amount','incomeRate','bidderNum','avgBidMoney')
write.csv(tb,'tb.csv')
本文通过Xpath确定选项的位置,然后点击。在Chrome浏览器中,通过右击所需要查看的元素,单击“检查”,在开发者模式中,通过右击被蓝色覆盖(即被选中)的部分,单击Copy,单击Copy Xpath,即可得到Xpath。通过page_source()保存成静态页面,然后用XML解析,获取并保存。
结语
作为初学者,我是站在巨人肩膀前进,感谢那些乐于学习和分享的人,在你们的文章里,我学到很多,然后自己将案例重新走通,再分享。希望对初学者有一定的帮助。如果需要更加深入了解,请查看参考资料。
参考资料
[1] https://zhuanlan.zhihu.com/p/24772389
[2] https://zhuanlan.zhihu.com/p/28108329
[3] http://blog.csdn.net/abc200941410128/article/details/72511931
[4] RSelenium: Basics
以上是关于[R语言] 利用RSelenium/ Rwebdriver抓取动态页面的主要内容,如果未能解决你的问题,请参考以下文章