Rvest:html 文本中的“<80%”生成解析错误
Rvest: "<80%" in html text generates parsing error
在尝试抓取某些网站的抵押贷款利率时,选项标签中的“<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>
如您所见,从“<80%”开始的整个位已经 dropped/replaced 被 tabs/newlines 了。
有没有办法避免这种情况?
只需做一些预处理来修复非标准HTML:
library(rvest)
library(stringi)
url <- "https://vdvconseil.be/nl/hypothecaire-leningen/bereken-uw-hypothecaire-lening/"
doc <- readLines(url)
将所有 <option…
标签中的所有原始 <
替换为 <
:
doc[which(grepl("<option", doc))] <-
stri_replace_all_regex(doc[which(grepl("<option", doc))],
"<([[:digit:]]+)", "<")
现在回去阅读和处理文档:
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%"
在尝试抓取某些网站的抵押贷款利率时,选项标签中的“<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>
如您所见,从“<80%”开始的整个位已经 dropped/replaced 被 tabs/newlines 了。 有没有办法避免这种情况?
只需做一些预处理来修复非标准HTML:
library(rvest)
library(stringi)
url <- "https://vdvconseil.be/nl/hypothecaire-leningen/bereken-uw-hypothecaire-lening/"
doc <- readLines(url)
将所有 <option…
标签中的所有原始 <
替换为 <
:
doc[which(grepl("<option", doc))] <-
stri_replace_all_regex(doc[which(grepl("<option", doc))],
"<([[:digit:]]+)", "<")
现在回去阅读和处理文档:
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%"