/ / Korzystanie z R2HTML z rvest / xml2 - xml, r, rvest

Używanie R2HTML z rvest / xml2 - xml, r, rvest

czytałem to wpis na blogu na nowym pakiecie XML2. Poprzednio, rvest kiedyś polegał na XMLi ułatwiło mi to (przynajmniej) połączenie funkcji w dwóch pakietach: np. używałbym htmlParse z pakietu XML, gdy mogę „odczytać stronę HTML za pomocą html (teraz dzwonili read_html).

Widzieć to na przykład, a potem mogę użyć rvest funkcje takie jak html_nodes, html_attr na analizowanej stronie. Teraz z rvest zależy od XML2 nie jest to możliwe (przynajmniej na powierzchni).

Zastanawiałem się, jaka jest podstawowa różnica między XML i XML2. Inne niż przypisanie autora pakietu XML do stanowisko Wspomniałem wcześniej, autor pakietu nie wyjaśnia różnic między XML i XML2.

Inny przykład:

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)

Aktualizacje:

#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’

Używam Windows 8, R 3.2.1. I RStudio 0.99.441.

Odpowiedzi:

4 dla odpowiedzi № 1

The R2HTML pakiet wydaje się capture.out na obiekcie XML, a następnie zapisuje go z powrotem na dysk. To nie wygląda na solidny sposób zapisywania danych HTML / XML z powrotem na dysk. XML dane są drukowane inaczej niż xml2 dane. Możesz zdefiniować funkcję do wywołania as.character() zamiast polegać na capture.output

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

Albo prawdopodobnie mógłbyś przejść R2HTML w sumie i wypisz xml2 dane bezpośrednio z write_xml.

Być może najlepszym rozwiązaniem byłoby pobranie pliku, a następnie zaimportowanie go.

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