簡體   English   中英

用RVest讀取HTML時不希望有的反斜杠

[英]Undesired backslashes when reading a html with rvest

我正在嘗試使用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")

但是,當我閱讀“ pg”時,在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與墨西哥IP一起使用時,似乎才會發生此錯誤:/

  2. 按照下面建議 ,我嘗試使用正則表達式清理對象(“ pg”)。

因此,在查看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>

我不明白這種行為

我對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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM