R {xml_node} към обикновен текст, като същевременно запазва етикетите?

Бих искал да направя точно това, което правят xml2::xml_text() или rvest::html_text(), но да запазя таговете, вместо да заменям напр. <br> с \n. Целта е напр. изтривам уеб страница, извличам възлите, които искам, и съхранявам обикновения HTML в променлива, подобно на write_html(), който би го съхранил във файл.

Как мога да направя това?


person Harold Cavendish    schedule 14.09.2018    source източник
comment
Когато молите за помощ, трябва да включите прост възпроизводим пример с примерен вход и желан изход, който може да се използва за тестване и проверка на възможни решения.   -  person MrFlick    schedule 14.09.2018
comment
@MrFlick Наясно съм, но тук задавам много общ въпрос и затова смятам, че описанието, което предоставих, трябва да е достатъчно. Решението, което търся, е една единствена функция, вече внедрена в xml2, само без изхвърляне на таговете или това, което прави друга функция, само с изход към друга променлива вместо външен файл.   -  person Harold Cavendish    schedule 14.09.2018
comment
Значи искате да запазите XML като низ без анализ? Защо просто не можете да го прочетете като низ? Или искате да прекосите/модифицирате дървото с xml2 и след това да получите изхода на конкретни части като необработен, неанализиран низ?   -  person divibisan    schedule 14.09.2018
comment
@divibisan Наистина. Тъй като структурата на данните е списък с външни указатели и не знам как да го конвертирам в низ.   -  person Harold Cavendish    schedule 14.09.2018


Отговори (1)


По ирония на съдбата се оказва, че as.character() работи добре.

Следователно:

library(rvest)
html <- read_html("http://stackoverflow.com")

res <– html %>%
         html_node("h1") %>%
         as.character()

> res

[1] "<h1 class=\"-title\">Learn, Share, Build</h1>"

Това е желаният резултат в текущия ми случай на употреба.

От друга страна, за сравнение, ако трябва да премахнете етикетите:

res <- html %>%
         html_node("h1") %>%
         html_text()

> res
[1] "Learn, Share, Build"
person Harold Cavendish    schedule 15.09.2018