3

新しいパッケージ XML2 に関するこのブログ投稿を読んでいました。以前はrvestに依存してXMLいましたが、(少なくとも) 2 つのパッケージの関数を組み合わせることで、多くの作業が簡単になりました。たとえば、(現在は を呼び出している)htmlParseを使用して HTML ページを読み取れない場合は、XML パッケージから使用していました。 .htmlread_html

例としてこれを参照してください。解析されたページで、などのrvest関数を使用できます。現在、これに依存することはできません (少なくとも表面上では)。html_nodeshtml_attrrvestXML2

XML と XML2 の基本的な違いは何だろうと思っていました。前述の投稿で XML パッケージの作成者を特定する以外に、パッケージの作成者は 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 を使用しています。

4

1 に答える 1

4

パッケージは、XML オブジェクトにあるR2HTMLように見えcapture.out、それをディスクに書き戻します。これは、HTML/XML データをディスクに保存する堅牢な方法とは思えません。2 つが異なる理由は、XMLデータがデータとは異なる方法で出力されるためxml2です。as.character()依存するのではなく、呼び出す関数を定義できますcapture.output

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

または、 で完全にスキップして、 でデータを直接R2HTML書き出すこともできます。xml2write_xml

おそらく、最初にファイルをダウンロードしてからインポートするのが最善の方法でしょう。

download.file("http://stackoverflow.com/questions/30897852/html-in-rvest-verses-htmlparse-in-xml", "local.html")
k2 <- read_html("local.html")
于 2015-06-22T17:57:19.747 に答える