gpt4 book ai didi

xml - 将 R2HTML 与 rvest/xml2 一起使用

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:10 27 4
gpt4 key购买 nike

我正在阅读 this关于新包 XML2 的博文。以前,rvest曾经依赖XML ,并且通过将函数组合在两个包中,它(至少)让我的很多工作变得更容易:例如,我会使用 htmlParse当我无法使用 html 读取 HTML 页面时,来自 XML 包(现在他们调用了 read_html )。

参见 this例如,然后我可以使用 rvesthtml_nodes这样的功能, html_attr在解析的页面上。现在,用 rvest取决于 XML2这是不可能的(至少在表面上)。

我只是想知道 XML 和 XML2 之间的基本区别是什么。除了在 post 中注明 XML 包的作者之外前面提到过,package 的作者没有解释 XML 和 XML2 的区别。

另一个例子:

library(R2HTML) #save page as html and read later
library(XML)
k1<-htmlParse("https://stackoverflow.com/questions/30897852/html-in-rvest-verses-htmlparse-in-xml")
head(getHTMLLinks(k1),5) #This works

[1] "//stackoverflow.com" "http://chat.stackoverflow.com" "http://blog.stackoverflow.com" "//stackoverflow.com"
[5] "http://meta.stackoverflow.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] "//stackoverflow.com" "http://chat.stackoverflow.com" "http://blog.stackoverflow.com" "//stackoverflow.com"
[5] "http://meta.stackoverflow.com"

#with read_html in rvest package, this is not possible (as I know)
library(rvest)
library(R2HTML)
k2<-read_html("https://stackoverflow.com/questions/30897852/html-in-rvest-verses-htmlparse-in-xml")

#This works
df1<-k2 %>%
html_nodes("a")%>%
html_attr("href")

head(df1,5)
[1] "//stackoverflow.com" "http://chat.stackoverflow.com" "http://blog.stackoverflow.com" "//stackoverflow.com"
[5] "http://meta.stackoverflow.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 包似乎只是对 XML 对象进行 capture.out,然后将其写回磁盘。这似乎不是将 HTML/XML 数据保存回磁盘的可靠方法。两者可能不同的原因是 XML 数据与 xml2 数据的打印方式不同。您可以定义一个函数来调用 as.character() 而不是依赖于 capture.output

HTML.xml_document<-function(x, ...) HTML(as.character(x),...)

或者您可能可以完全跳过 R2HTML 并直接使用 write_xml 写出 xml2 数据。

也许最好的方法是先下载文件,然后再导入。

download.file("http://stackoverflow.com/questions/30897852/html-in-rvest-verses-htmlparse-in-xml", "local.html")
k2 <- read_html("local.html")

关于xml - 将 R2HTML 与 rvest/xml2 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com