【问题标题】:Adding whitespace to text elements向文本元素添加空格
【发布时间】:2017-06-19 15:01:01
【问题描述】:

有没有办法为每个包含文本的元素添加空格? 对于这个例子:

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()。结果是多个文本组合在一个向量元素中。这使得无法推断相应部分的开始和结束。

【问题讨论】:

    标签: r web-scraping rvest xml2


    【解决方案1】:

    你的意思是这样的吗?

    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)
    }
    

    【讨论】:

    • 效果很好,非常感谢! :) 你介意简单解释一下这个代码块是如何工作的吗?我不熟悉UseMethod()
    • @methodds:只是简化了功能。看看旧版本的工作原理:adv-r.had.co.nz/OO-essentials.html#s3 我意识到我为我的一个特殊用例编写了代码。以上对于大多数用例应该没问题...
    • 谢谢,这也是我理解的更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多