R、revest、文本抓取——根据标签从HTML节点中删除特定元素



下面是一个快速的模拟代码

<div class = "speech">
<p>
<a id = "xxxx"> </a>
<b> <a href = "xxxx"> xxxx </a> </b>
Text text text <i> text </i> text
<br>
text text <sup> text </sup> text
</p>
<p>
<a id = "xxxx"> </a>
<b> <a href = "xxxx"> xxxx </a> </b>
Text text text <i> text </i> text
<br>
text text <sup> text </sup> text
</p>
</div>

我想获得一个列表或数据框架,其中包含每个" "作为该列表/数据帧的唯一条目连接的节点。基本上,我想去掉"a"one_answers";b"从子节点中得到结果,同时得到每个文本内容的" "标记用于列表/数据框架中的一个字符串条目,不带"i", "br"one_answers";sup"标签(但仍然是这些标签内的文本)

提前感谢!

下面是我的代码:
GET(url = "https://xxx") %>%
read_html() %>%
html_nodes(xpath = "//div[@class = 'speech']//text()") %>%
as.character()

我被困在这里了。它得到的是一个带有文本元素的列表,但是:

  • "i", "sup"one_answers";br"标签在这个列表中做了一个分隔,而我想要每个" ">

foo.html为包含示例html的文件:

library(tidyverse)
library(rvest)
library(xml2)
doc <-
read_html("foo.html") %>%
html_nodes(xpath = "//p") %>%
as_xml_document(root = ".")
xml_remove(
doc %>% xml_find_all(xpath = "//a|b")
)
doc %>%
as_list() %>%
pluck(".") %>%
map(~ .x %>% purrr::simplify() %>% paste0(collapse = " "))

输出:

$p
[1] "n n list(" ", " ") nText text text  list(" text ")  textn list() ntext text  list(" text ")  textn"
$p
[1] "n n list(" ", " ") nText text text  list(" text ")  textn list() ntext text  list(" text ")  textn"

最新更新