我想从一个html文件中提取键-值对(参见下面的示例).遗憾的是,没有与每个键-值对对应的html node (如div元素).相反,所有信息都出现在一个段落中,其中关键点突出显示为<strong>
.
我想将键值对表示为一个嵌套框的两列或两个相同长度的列表,其中key 1
对应于value 1
,key 2
到value 2a
和value 2b
,以及key 3
到value 3
.文件中的换行符设置不一致.
因为每一对都没有div元素,所以我可能不得不想出一个策略来在每个键之后的段落后面加上split?我在下面附上一个将html视为原始文本的黑客try :
library(tidyverse)
library(rvest)
html <- minimal_html(
"<p>
<strong>key 1</strong> value 1
<br></br>
<strong>key 2</strong> value 2a
<br></br>
value 2b
<br></br>
<strong>key 3</strong>
<br></br>
value 3
</p>"
)
# hacky solution treating html as raw text
s <- html |>
html_elements("p") |>
as.character()
parse_html <- function(s) {
s |>
read_html() |>
html_text2()
}
s |>
str_replace_all("<strong>(.*)</strong>", "✂️\\1🔧") |>
str_split_1("✂️") |>
map_chr(parse_html) |>
discard(\(x) str_length(x) == 0L) |>
str_split("🔧") |>
map(str_squish)
#> [[1]]
#> [1] "key 1" "value 1"
#>
#> [[2]]
#> [1] "key 2" "value 2a value 2b"
#>
#> [[3]]
#> [1] "key 3" "value 3"
创建于2024-01-18年第reprex v2.1.0页