R语言rdom包简介
来源:互联网 发布:ubuntu 查看mysql状态 编辑:程序博客网 时间:2024/06/04 19:19
radom
在R中,通过调用phantomjs无头浏览器来渲染和解析DOM(文档对象模型)。
安装
使用rdom包有赖于phantomjs,因此请保证已安装该浏览器(参考Selenium环境配置第5部分),并将存放路径径添加到系统变量中。
stopifnot(Sys.which("phantomjs") != "")# 检测系统路径中是否含有phantomjs,若未下载,或已下载但未添加系统路径都会导致报错
目前rdom尚未在CRAN上发布,可以通过devtools包安装
devtools::install_github("cpsievert/rdom")
简介
诸如XML、xml2及rvest等爬虫包能够帮助我们直接从url下载并解析HTML文件。
但是这些包的工作原理中,缺少一个中介浏览器引擎对DOM进行渲染。
为了展示这种差异,假设我们现在想要提取如下HTML页面中的表格:
XML::htmlParse()
和rvest::read_html()
返回的是HTML页面下的静态源代码,其中并不包括我们想要的<table>
元素(因为JavaScript会时刻改变DOM的状态):
XML::htmlParse("http://bl.ocks.org/cpsievert/raw/2a9fb8f504cd56e9e8e3/")
<!DOCTYPE html><html><body> A Simple Table made with JavaScript <p></p> <script> function tableCreate(){ var body = document.body, tbl = document.createElement('table'); for(var i = 0; i < 3; i++){ var tr = tbl.insertRow(); for(var j = 0; j < 3; j++){ var td = tr.insertCell(); td.appendChild(document.createTextNode("Cell")); } } body.appendChild(tbl); } tableCreate(); </script></body></html>
rdom包中最主要的函数是rdom(),它通过调用phantomjs来渲染和解析DOM,得到HTML字符串。用户可以通过rdom()函数,设定一个CSS(路径)选择器用以提取某些元素,而不是将整个DOM以字符串的形式从phantomjs直接传回R。
tbl <- rdom::rdom("http://bl.ocks.org/cpsievert/raw/2a9fb8f504cd56e9e8e3/", css = "table")tbl
<table> <tbody> <tr> <td>Cell</td> <td>Cell</td> <td>Cell</td> </tr> <tr> <td>Cell</td> <td>Cell</td> <td>Cell</td> </tr> <tr> <td>Cell</td> <td>Cell</td> <td>Cell</td> </tr> </tbody></table>
在这种情况下,我们就可以用XML::readHTMLTable()
或rvest::html_table()
将<table>
节点转换为数据框形式。
XML::readHTMLTable(tbl)
V1 V2 V31 Cell Cell Cell2 Cell Cell Cell3 Cell Cell Cell
渲染shiny app
rdom包的另外一个有趣的示例是渲染(及测试)shiny app。
library(shiny)runExample("01_hello")
Listening on http://127.0.0.1:4870
现在,在另一个R会话窗口中,将这个url传递给rdom()。在本案例中,我们仅返回app的标题。
header <- rdom::rdom("http://127.0.0.1:4870", "h2")
<h2>Hello Shiny!</h2>
如此一来,测试shiny app就变得轻而易举。
library("testthat")expect_identical(XML::xmlValue(header), "Hello Shiny!")
使用CLI
rdom()实质上是对phantomjs命令行界面的封装
因此,如果你的任务无需用到R语言,那么使用CLI可能更加高效。
$ git clone https://github.com/cpsievert/rdom.git$ cd rdom$ phantomjs inst/rdomjs/rdom.js inst/jsTable/jsTable.html table false 1 table.html$ vi table.html
rdom.js
脚本遵循如下四个参数:
1. url
网页的URL地址(必要参数)
2. css
CSS选择器
3. all
此参数决定从页面中抓取元素时,是采用querySelector还是采用querySelectorAll
4. timeout
下载和渲染页面的最长等待时间,以秒为单位
5. filename
将HTML字符串写入文件
每次调用rdom()时,都会启动phantomjs进程,phantomjs浏览器会打开并充分渲染指定站点。
致谢
感谢webshot包的开发者Winston Chang,启发了rdom包的设计。
以上翻译自:rdom包github项目主页
阅读全文
0 0
- R语言rdom包简介
- R语言rvest包简介
- R语言的plyr包简介
- R语言的plyr包简介
- RSelenium/Rwebdriver/rdom包抓取表格数据
- R 语言 简介 .
- R语言简介
- R语言简介
- R语言简介
- R语言dplyr简介
- R语言简介
- R语言简介
- R语言简介
- #R# R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理
- knitr包 R语言
- R语言 -- 包
- R语言quantmod包
- R语言tseries包
- 大数相加/减/乘/除/取余 模板
- java基础代码----根据日期字符串 查找对应的周期的起始位置和结束位置
- tensorflow学习笔记: variable scope
- LintCode 第452题 删除链表中的元素
- angular4: Unhandled Promise rejection Cannot assign to a reference or variable
- R语言rdom包简介
- 浏览器拦截新窗口打开的问题
- springcloud(一):大话Spring Cloud
- Socket与Serversocket的写出问题
- java 面向对象
- OpenStack-M版(Mitaka)搭建基于(Centos7.2)+++十二、Openstack编排服务服务(heat)
- Integer和int的区别
- 1445 变色DNA(最短路)
- oracle数据库表的约束constraints