将 R2HTML 与 rvest/xml2 一起使用
Using R2HTML with rvest/xml2
我正在阅读 this 关于新包 XML2 的博客 post。以前,rvest
曾经依赖于 XML
,它通过在两个包中组合函数(至少)使我的很多工作更容易:例如,我会使用 htmlParse
来自 XML 当我无法使用 html
读取 HTML 页面时打包(现在他们调用 read_html
)。
请参阅 示例,然后我可以在解析后的页面上使用rvest
函数,如html_nodes
、html_attr
。现在,rvest
取决于 XML2
这是不可能的(至少在表面上)。
我只是想知道 XML 和 XML2 之间的基本区别是什么。除了在我之前提到的 post 中注明 XML 包的作者外,包的作者没有解释 XML 和 XML2.[=26 之间的区别=]
另一个例子:
library(R2HTML) #save page as html and read later
library(XML)
k1<-htmlParse("")
head(getHTMLLinks(k1),5) #This works
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
# But, I want to save HTML file now in my working directory and work later
HTML(k1,"k1") #Later I can work with this
rm(k1)
#read stored html file k1
head(getHTMLLinks("k1"),5)#This works too
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
#with read_html in rvest package, this is not possible (as I know)
library(rvest)
library(R2HTML)
k2<-read_html("")
#This works
df1<-k2 %>%
html_nodes("a")%>%
html_attr("href")
head(df1,5)
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
# But, I want to save HTML file now in my working directory and work later
HTML(k2,"k2") #Later I can work with this
rm(k2,df1)
#Now extract webpages by reading back k2 html file
#This doesn't work
k2<-read_html("k2")
df1<-k2 %>%
html_nodes("a")%>%
html_attr("href")
df1
character(0)
更新:
#I have following versions of packages loaded:
lapply(c("rvest","R2HTML","XML2","XML"),packageVersion)
[[1]]
[1] ‘0.2.0.9000’
[[2]]
[1] ‘2.3.1’
[[3]]
[1] ‘0.1.1’
[[4]]
[1] ‘3.98.1.2’
我正在使用 Windows 8、R 3.2.1 和 RStudio 0.99.441。
R2HTML
包似乎只是 capture.out
在 XML 对象上,然后将其写回磁盘。这似乎不是将 HTML/XML 数据保存回磁盘的可靠方法。两者可能不同的原因是 XML
数据与 xml2
数据的打印方式不同。您可以定义一个函数来调用 as.character()
而不是依赖 capture.output
HTML.xml_document<-function(x, ...) HTML(as.character(x),...)
或者您可以完全跳过 R2HTML
,直接用 write_xml
写出 xml2
数据。
也许最好的方法是先下载文件,然后再导入。
download.file("", "local.html")
k2 <- read_html("local.html")
我正在阅读 this 关于新包 XML2 的博客 post。以前,rvest
曾经依赖于 XML
,它通过在两个包中组合函数(至少)使我的很多工作更容易:例如,我会使用 htmlParse
来自 XML 当我无法使用 html
读取 HTML 页面时打包(现在他们调用 read_html
)。
请参阅rvest
函数,如html_nodes
、html_attr
。现在,rvest
取决于 XML2
这是不可能的(至少在表面上)。
我只是想知道 XML 和 XML2 之间的基本区别是什么。除了在我之前提到的 post 中注明 XML 包的作者外,包的作者没有解释 XML 和 XML2.[=26 之间的区别=]
另一个例子:
library(R2HTML) #save page as html and read later
library(XML)
k1<-htmlParse("")
head(getHTMLLinks(k1),5) #This works
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
# But, I want to save HTML file now in my working directory and work later
HTML(k1,"k1") #Later I can work with this
rm(k1)
#read stored html file k1
head(getHTMLLinks("k1"),5)#This works too
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
#with read_html in rvest package, this is not possible (as I know)
library(rvest)
library(R2HTML)
k2<-read_html("")
#This works
df1<-k2 %>%
html_nodes("a")%>%
html_attr("href")
head(df1,5)
[1] "//whosebug.com" "http://chat.whosebug.com" "http://blog.whosebug.com" "//whosebug.com"
[5] "http://meta.whosebug.com"
# But, I want to save HTML file now in my working directory and work later
HTML(k2,"k2") #Later I can work with this
rm(k2,df1)
#Now extract webpages by reading back k2 html file
#This doesn't work
k2<-read_html("k2")
df1<-k2 %>%
html_nodes("a")%>%
html_attr("href")
df1
character(0)
更新:
#I have following versions of packages loaded:
lapply(c("rvest","R2HTML","XML2","XML"),packageVersion)
[[1]]
[1] ‘0.2.0.9000’
[[2]]
[1] ‘2.3.1’
[[3]]
[1] ‘0.1.1’
[[4]]
[1] ‘3.98.1.2’
我正在使用 Windows 8、R 3.2.1 和 RStudio 0.99.441。
R2HTML
包似乎只是 capture.out
在 XML 对象上,然后将其写回磁盘。这似乎不是将 HTML/XML 数据保存回磁盘的可靠方法。两者可能不同的原因是 XML
数据与 xml2
数据的打印方式不同。您可以定义一个函数来调用 as.character()
而不是依赖 capture.output
HTML.xml_document<-function(x, ...) HTML(as.character(x),...)
或者您可以完全跳过 R2HTML
,直接用 write_xml
写出 xml2
数据。
也许最好的方法是先下载文件,然后再导入。
download.file("", "local.html")
k2 <- read_html("local.html")