我正在尝试使用rvest阅读一个网站,我的代码如下:
pg <- read_html("https://www.gob.mx/presidencia/archivo/prensa?utf8=%E2%9C%93&idiom=es&style=list&order=DESC&filter_id=&filter_origin=archive&tags=&year=&category=Discursos+del+Presidente&year=&category=Discursos+del+Presidente")
然而,当我读到&#34; pg&#34;我在html类之间得到双反斜杠,如下面的代码片段所示:
<a class='\\"small-link\\"' href="%5C%22/presidencia/es/prensa/epn-palabras-134612?idiom=es%5C%22" target='\\"_blank\\"'>
当我阅读其他网站时,不会发生这种情况:
pg2 <- read_html("http://www.imdb.com/title/tt0245712/")
#output: <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
知道为什么会这样吗?我真的想摆脱它,因为它阻碍了我用html_nodes()检索数据:
pg %>%
html_nodes(".small-link")
#output: {xml_nodeset (0)}
更新!
只有在使用墨西哥知识产权的rvest时才会出现此错误:/
在suggestion below之后,我尝试使用正则表达式来清理我的对象(&#34; pg&#34;)。
所以当看pg div类时,会有这样的双反斜杠:
pg
#Result: <div class='\\"col-md-12' small-bottom-buffer>
如果我清理pg试图删除一个反斜杠它似乎工作,我只剩下一个:
pg2 <- gsub("\\\\", "", pg)
pg2
#Result: <div class='\"col-md-12' small-bottom-buffer>
但是,如果我尝试删除两个反斜杠,我会改为三个!:
pg3 <- gsub("\\\\\\\\", "", pg)
pg3
#<div class='\\\"col-md-12' small-bottom-buffer>
我不明白这种行为
答案 0 :(得分:0)
我不熟悉rvest提供一个rvest解决方案,但您可以使用readLines和grep来查找您正在寻找的数据。然后,您可以使用REGEX来清理它
pg3 <- readLines("https://www.gob.mx/presidencia/archivo/prensa?utf8=%E2%9C%93&idiom=es&style=list&order=DESC&filter_id=&filter_origin=archive&tags=&year=&category=Discursos+del+Presidente&year=&category=Discursos+del+Presidente")
grep('<a class=\"small-link\"', pg3, value = TRUE)
grep('<a class="small-link"', pg3, value = TRUE)
grep('<a class=\\"small-link\\"', pg3, value = TRUE)
这三个都有效。你看到的原因是“因为\是一个转义字符,而且”是一个特殊字符,因为它用于将字符数据输入到R.例如:
> print("test"test")
Error: unexpected symbol in "print("test"test"
> print('test"test')
[1] "test\"test"
> print("test\"test")
[1] "test\"test"