Rvest:html文本中的“< 80%”会生成解析错误

时间:2016-02-22 17:25:38

标签: r rvest

在试图抓住一些网站的抵押贷款利率时,选项标签中的“< 80%”似乎导致了错误。

library(rvest)

url <- "https://vdvconseil.be/nl/hypothecaire-leningen/bereken-uw-hypothecaire-lening/"
page <- read_html(url)

page %>% html_nodes("option")

结果

{xml_nodeset (38)}  
[1] <option value="72">1/1/1 CAP 1,56 (voorwaarden) +1,56/-1,56 Q:\n\t\t\t\t\t\t\t\n\n\t\t\t\t</option>
[2] <option value="50">1/1/1 cap 1,74 (voorwaarden) +1,74/-1,74 Q:Tot 80% T:1,74%</option> 
...

虽然我期待看到:

<option value="72" >1/1/1 CAP 1,56 (voorwaarden) +1,56/-1,56 Q:<85% T:1,56%</option>

正如您所看到的,以“&lt; 80%”开头的整个位已被标签/换行符删除/替换。 有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:2)

只需进行一些预处理即可修复非标准HTML:

library(rvest)
library(stringi)

url <- "https://vdvconseil.be/nl/hypothecaire-leningen/bereken-uw-hypothecaire-lening/"
doc <- readLines(url)

将所有<标记中的所有原始&lt;替换为<option…

doc[which(grepl("<option", doc))] <-
  stri_replace_all_regex(doc[which(grepl("<option", doc))],
                         "<([[:digit:]]+)", "&lt;$1")

现在回去阅读和处理文件:

page <- read_html(paste0(doc, collapse=""))

opt <- page %>% html_nodes("option")
html_text(opt)

##  [1] "1/1/1 CAP 1,56 (voorwaarden) +1,56/-1,56 Q:<85% T:1,56%"          
##  [2] "1/1/1 cap 1,74 (voorwaarden) +1,74/-1,74 Q:Tot 80% T:1,74%"       
##  [3] "5/5/5 cap 1,51 (voorwaarden) +1,51/-1,51 Q:<85% T:1,51%"          
##  [4] "5/5/5 cap 1,67 (voorwaarden) +1,67/-1,67 Q:\t\t\t\t\t\t\t\t\t\t\t"
##  [5] "10/5/5  (voorwaarden)  +1,95/-1,95 Q:<85% T:1,95%"                
##  [6] "10/5/5 (voorwaarden) +1,96/-1,96 Q:<80% T:1,96%"                  
##  [7] "10/5/5(Voorwarden) +2/-2,11 Q:80 à 100% T:2,11%"                  
##  [8] "Vast 10 jaar (voorwaarden)  Q:<85% T:1,44%"                       
##  [9] "Vast 10 jaar (voorwaarden)  Q:<80% T:1,47%"                       
## [10] "Fxed 10 yaar (voorwaarden)  Q:<90% T:1,60%"                       
## [11] "Vast 10 jaar   Q:80 à 100% T:1,62%"                               
## [12] "Vast 13 jaar (voorwaarden)   Q:<80% T:1,63%"                      
## [13] "Vast 13 jaar (voorwaarden)  Q:80 à 100% T:1,78%"                  
## [14] "Vaste maandelijkse accordion 15-18 jaar  Q:<80% T:1,58%"          
## [15] "Vaste maandelijkse accordion 15-18 jaar  Q:<100% T:1,73%"         
## [16] "Vast 15 jaar (voorwaarden)  Q:<85% T:1,81%"                       
## [17] "Vast 15 jaar (voorwaarden)  Q:<80% T:1,86%"                       
## [18] "Vaast 15 jaar (voorwaarden)  Q:<90% T:1,89%"                      
## [19] "Vast 15 jaar (voorwaarden)  Q:80 à 100% T:2,01%"                  
## [20] "Vast 17 jaar (voorwaarden)  Q:<90% T:1,97%"                       
## [21] "Vast 18 jaar (voorwaarden)  Q:<80% T:2,00%"                       
## [22] "Vast 18 jaar (voorwaarden)  Q:<85% T:2,03%"                       
## [23] "Vast 18 jaar (voorwaarden)  Q:<100% T:2,14%"                      
## [24] "Vaste maandelijkse accordéon 20-25 jaar  Q:<80 % T:1,79%"         
## [25] "Vaste maandelijkse accordéon 20-25 jaar  Q:80 à 100% T:1,94%"     
## [26] "Vast 20 jaar (voorwaarden)  Q:<85% T:2,03%"                       
## [27] "Vaast 20 jaar (voorwaarden)  Q:<90% T:2,10%"                      
## [28] "Vast 20 jaar (voorwaarden)  Q:<80% T:2,14%"                       
## [29] "Vast 20 jaar (voorwaarden)  Q:80 à 100% T:2,29%"                  
## [30] "Vast 22 jaar  Q:<90% T:2,23%"                                     
## [31] "Mensualités fixes accordéon 25-30 ans  Q:<80 % T:1,96%"           
## [32] "Vaste maandelijkse accordéon 20-25 jaar  Q:80 à 100% T:2,11%"     
## [33] "Vast 25 jaar (voorwaarden)  Q:<80% T:2,28%"                       
## [34] "Vast  25 jaar (voorwaarden)  Q:<90% T:2,32%"                      
## [35] "Vast 25 jaar (voorwaarden)  Q:<85% T:2,36%"                       
## [36] "Vast 25 jaar (voorwaarden)  Q:80 à 100% T:2,43%"                  
## [37] "Vast 30 jaar   Q:<100% T:2,88%"                                   
## [38] "Vast 30 jaar (voorwaarden)  Q:<95% T:3,10%"