如何获取某个class之前的HTML元素?
How to get HTML element that is before a certain class?
我正在抓取并且无法获取位于包含“type2”的另一个“th”元素之前的“th”标签的元素class。我更喜欢通过识别它是 "th" 之前的元素 "th" 和 class "type2" 因为我的 HTML 有很多 "th" 这是我在表格之间发现的唯一区别。
使用 rvest 或 xml2(或其他 R 包),我可以获得这个父项吗?
我要的内容是"text_that_I_want".
谢谢!
<tr>
<th class="array">text_that_I_want</th>
<td class="array">
<table>
<thead>
<tr>
<th class="string type2">name</th>
<th class="array type2">answers</th>
</tr>
</thead>
我们可以在所有<th>
中查找"type2"字符串,得到第一个出现的索引减1得到我们想要的索引:
library(dplyr)
library(rvest)
location <- test%>%
html_nodes('th') %>%
str_detect("type2")
index_want <- min(which(location == TRUE) - 1)
test%>%
html_nodes('th') %>%
.[[index_want]] %>%
html_text()
[1] "text_that_I_want"
相对于给定节点导航 xpath 的正式且更通用的方法是通过 ancestor
preceding-sibling
:
read_html(htmldoc) %>%
html_nodes(xpath = "//th[@class = 'string type2']/ancestor::td/preceding-sibling::th") %>%
html_text()
#> [1] "text_that_I_want"
我正在抓取并且无法获取位于包含“type2”的另一个“th”元素之前的“th”标签的元素class。我更喜欢通过识别它是 "th" 之前的元素 "th" 和 class "type2" 因为我的 HTML 有很多 "th" 这是我在表格之间发现的唯一区别。
使用 rvest 或 xml2(或其他 R 包),我可以获得这个父项吗? 我要的内容是"text_that_I_want".
谢谢!
<tr>
<th class="array">text_that_I_want</th>
<td class="array">
<table>
<thead>
<tr>
<th class="string type2">name</th>
<th class="array type2">answers</th>
</tr>
</thead>
我们可以在所有<th>
中查找"type2"字符串,得到第一个出现的索引减1得到我们想要的索引:
library(dplyr)
library(rvest)
location <- test%>%
html_nodes('th') %>%
str_detect("type2")
index_want <- min(which(location == TRUE) - 1)
test%>%
html_nodes('th') %>%
.[[index_want]] %>%
html_text()
[1] "text_that_I_want"
相对于给定节点导航 xpath 的正式且更通用的方法是通过 ancestor
preceding-sibling
:
read_html(htmldoc) %>%
html_nodes(xpath = "//th[@class = 'string type2']/ancestor::td/preceding-sibling::th") %>%
html_text()
#> [1] "text_that_I_want"