2017-02-02 1 views
1

Gibt es eine Möglichkeit, Leerzeichen zu allen Elementen hinzuzufügen, die Text enthalten? Für dieses Beispiel:Whitespace zu Textelementen hinzufügen

movie <- read_html("http://www.imdb.com/title/tt1490017/") 
cast <- html_nodes(movie, "#titleCast span.itemprop") 
cast %>% html_structure() 
[[1]] 
<span.itemprop [itemprop]> 
    {text} 

[[2]] 
<span.itemprop [itemprop]> 
    {text} 

Ich würde eine nachfolgende Leerzeichen auf jedes Textelement hinzufügen möchten, bevorhtml_text() verwenden. Ich habe einen anderen Anwendungsfall, wo ich html_text() höher in der Dokumenthierarchie verwenden möchte. Das Ergebnis ist, dass mehrere Texte innerhalb eines Vektorelements kombiniert werden. Dies macht es unmöglich, Anfang und Ende der entsprechenden Teile abzuleiten.

Antwort

4

Meinst du sowas?

doc <- minimal_html("Hello<p>World</p>") 
doc %>% html_text # HelloWorld 
doc %>% html_text_collapse(" ") # Hello World 

Wenn ja hier ist der Code:

require(stringi) 
require(rvest) 

html_text_collapse <- function(x, collapse = " ", trim = TRUE){ 
    text <- html_text(html_nodes(x, xpath = ".//text()[normalize-space()]")) 
    if (trim) { 
    text <- stri_trim_both(text) 
    } 
    paste(text, collapse = collapse) 
} 
+0

, das perfekt funktioniert, vielen Dank! :) Könnten Sie kurz erklären, wie dieser Code-Chunk funktioniert? Ich bin nicht vertraut mit '' '' UseMethod() '' ''. – methodds

+1

@methodds: Einfach die Funktion vereinfacht. Sehen Sie hier, wie der alte funktioniert: http://adv-r.had.co.nz/OO-essentials.html#s3 Ich erkannte, dass ich das für einen speziellen Anwendungsfall von mir codiert. Das obige sollte für die meisten Anwendungsfälle in Ordnung sein ... – Rentrop

+0

Danke das ist noch besser in auch etwas das ich verstehe. – methodds