R语言中如何使用RCurl包

这篇文章主要介绍“R语言中如何使用RCurl包”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言中如何使用RCurl包”文章能帮助大家解决问题。

创新互联是一家专注于成都做网站、成都网站设计与策划设计,夏邑网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:夏邑等地区。夏邑做网站价格咨询:18980820575

这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。

比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。

耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

R语言中如何使用RCurl包

今天讲解的这个包将所有的任务量缩减到一句代码!

library("rvest")
URL<-"https://www.aqistudy.cn/historydata/monthdata.php?city=北京" %>% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")

大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)

使用RCurl包请求!

header<-c("User-Agent"="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36")
mytable <- getURL(URL,httpheader=header,.encoding="UTF-8") %>% htmlParse(encoding ="UTF-8") %>% readHTMLTable(header=TRUE)
$`NULL`
NULL

这是多大仇多大怨啊~_~

使用rvest试一试:

mytable <- URL %>%  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3

恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!

使用selenium驱动浏览器

#java -jar D:/selenium-server-standalone-3.3.1.jar
#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)

start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")   post.url(URL) mytable<-page_source() %>% stri_conv(from="utf-8") %>% read_html() %>% html_table() quit_session()

R语言中如何使用RCurl包

这次总算拿到了!数一数写了多少字的代码!

有木有更加快捷的方法呢,当然有啦!

接下来瞪大眼睛看这一款神器!

使用rdom包:

stopifnot(Sys.which("phantomjs") != "")
#以上代码检测系统路径中是否含有phantomjs浏览器
#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,
#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")
#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)


library("rdom")
tbl <- rdom(URL) %>% readHTMLTable(header=TRUE)  %>% `[[`(1)

R语言中如何使用RCurl包

有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!

似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!

下面这一句只是稍微修复一下编码!

names(tbl) <- names(tbl) %>% stri_conv(from="utf-8")
DT::datatable(tbl)

R语言中如何使用RCurl包

R语言中如何使用RCurl包

rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。

关于“R语言中如何使用RCurl包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


网页名称:R语言中如何使用RCurl包
网页链接:http://scyanting.com/article/gpjesd.html