2017-02-02 61 views
1

有沒有方法給每個包含文本的元素添加空格? 對於這個例子:給文本元素添加空格

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} 

我會想使用html_text()前尾隨空白添加到每個文本元素。我有另一個用例,我想在文檔層次結構中使用更高一層的html_text()。其結果是幾個文本在一個向量元素內合併。這使得不可能推斷相應部分的開始和結束。

回答

4

你的意思是這樣的嗎?

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

如果所以這裏是代碼:

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

完美的作品,太感謝你了! :)你介意簡單解釋一下這個代碼塊是如何工作的嗎?我不熟悉'UseMethod()''''。 – methodds

+1

@methodds:簡化了功能。在這裏看看這個舊的工作方式:http://adv-r.had.co.nz/OO-essentials.html#s3 我意識到我編碼爲我的一個特殊用例。以上應該可以適用於大多數使用情況... – Rentrop

+0

謝謝,我的理解也更好。 – methodds