2017-02-02 57 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