在包含<div> </div>的<p> </p>标签中检索文本

时间:2019-07-17 14:30:03

标签: html r xpath rvest

在使用R进行网络抓取研究文章时,我遇到了HTML代码,其中<div></div>标签嵌套在<p></p>标签中,该标签显然是ungrammatical

尽管如此,我还是希望在<p></p>标签内检索整个文本。

如果我仅执行以下操作,则结束</div>标记之后的所有文本都将被忽略,因为显然</p>和换行符会自动插入<div>标记之前。

在下面的示例中,我要检索的是“ text1text3”,而不仅仅是“ text1”。

> library("rvest"); library("tidyverse")
> x <- read_html("<p>text1<div>text2</div>text3</p>")
> x %>% html_nodes("p") %>% html_text()
[1] "text1"
> x
{xml_document}
<html>
[1] <body>\n<p>text1</p>\n<div>text2</div>text3</body>

有没有办法做到这一点?任何指针将不胜感激。

说明:

我想做的是检索<p>-节点的文本,无论它们位于何处。它们通常嵌套在<div></div>中,或者可以包含<div></div>,如上例所示。我更喜欢排除嵌套在<div>节点内的<p>节点的文本,但是两者都可以。因此,我希望在以下内容中使用“ text2text4”(或“ text2text3text4”,我更喜欢前者):<div>text1<p>text2<div>text3</div>text4</p>text5</div>

1 个答案:

答案 0 :(得分:0)

这是获取text2text3text4作为输出的纯xpath解决方案。

string-join(//p/descendant-or-self::*/text(),'')

截屏:

enter image description here