重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“R语言中如何使用RCurl包”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言中如何使用RCurl包”文章能帮助大家解决问题。
创新互联是一家专注于成都做网站、成都网站设计与策划设计,夏邑网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:夏邑等地区。夏邑做网站价格咨询:18980820575
这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
今天讲解的这个包将所有的任务量缩减到一句代码!
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()
这次总算拿到了!数一数写了多少字的代码!
有木有更加快捷的方法呢,当然有啦!
接下来瞪大眼睛看这一款神器!
使用rdom包:
stopifnot(Sys.which("phantomjs") != "")
#以上代码检测系统路径中是否含有phantomjs浏览器
#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,
#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")
#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)
library("rdom")
tbl <- rdom(URL) %>% readHTMLTable(header=TRUE) %>% `[[`(1)
有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
下面这一句只是稍微修复一下编码!
names(tbl) <- names(tbl) %>% stri_conv(from="utf-8") DT::datatable(tbl)
rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
关于“R语言中如何使用RCurl包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。