用rvest读取html时不需要的反斜杠

时间:2017-11-17 20:59:02

标签: html r web-scraping rvest backslash

我正在尝试使用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)}

更新!

  1. 只有在使用墨西哥知识产权的rvest时才会出现此错误:/

  2. suggestion below之后,我尝试使用正则表达式来清理我的对象(&#34; pg&#34;)。

  3. 所以当看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>
    

    我不明白这种行为

1 个答案:

答案 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"