解析html包含  (不间断的空间)

And*_*ald 8 r stringr

我正在rvest用来解析一个网站.我正在用这些小小的不间断空间撞墙.如何删除 解析后的html文档中元素创建的空格?

library("rvest")
library("stringr")  

minimal <- html("<!doctype html><title>blah</title> <p>&nbsp;foo")

bodytext <- minimal %>%
  html_node("body") %>% 
  html_text
Run Code Online (Sandbox Code Playgroud)

现在我已经提取了正文:

bodytext
[1] " foo"
Run Code Online (Sandbox Code Playgroud)

但是,我无法删除那个讨厌的空白!

str_trim(bodytext)

gsub(pattern = " ", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

hrb*_*str 8

jdharrison回答:

gsub("\\W", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

并且,这将有效,但你可以使用:

gsub("[[:space:]]", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

这将删除所有Space characters: tab, newline, vertical tab, form feed, carriage return, space and possibly other locale-dependent characters.它是一个非常可读的替代其他,神秘的正则表达式类.

  • 不幸的是,后一种解决方案无论多么可读,都行不通.问题似乎涉及编码(请参阅我对@MrFlick的评论) (3认同)

sha*_*hef 7

我遇到了同样的问题,并已经确定了简单的替代

gsub(intToUtf8(160),'',bodytext)
Run Code Online (Sandbox Code Playgroud)

(编辑正确的案例.)


MrF*_*ick 3

代表&nbsp“不间断空格”,在 unicode 空间中,它具有与“常规”空格(即" ")不同的字符。比较

charToRaw(" foo")
# [1] 20 66 6f 6f
charToRaw(bodytext)
# [1] c2 a0 66 6f 6f
Run Code Online (Sandbox Code Playgroud)

因此,您需要使用特殊字符类之一来表示空白。您可以使用以下命令删除所有空格

gsub("\\s", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,我需要确保字符串的编码设置正确

Encoding(bodytext) <- "UTF-8"
gsub("\\s", "", bodytext)
Run Code Online (Sandbox Code Playgroud)

  • `Encoding(bodytext)` 返回 `UTF-8`,但显示为空格的内容无法与任何以空格为目标的表达式匹配,无论是 `\\s` 还是 `[:space:]` (2认同)