提问者:小点点

如何获取某个类之前的HTML元素?


我在抓取“th”标记的元素时遇到了麻烦,该标记位于另一个包含“type2”类的“th”元素之前。 我更愿意通过识别它是类“type2”的“th”之前的元素“th”来获得它,因为我的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>

共2个答案

匿名用户

我们可以在所有s中查找“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中实现这一点的正式且更通用的方法是通过preceding-sibling:

read_html(htmldoc) %>% 
  html_nodes(xpath = "//td[@class = 'array']/preceding-sibling::*") %>% 
  html_text()
#> [1] "text_that_I_want"

相关问题