R 考虑到另一个标记的后续内容而不是类,如何获取HTML元素?

R 考虑到另一个标记的后续内容而不是类,如何获取HTML元素?,r,web-scraping,rvest,xml2,R,Web Scraping,Rvest,Xml2,我正在将HTML转换成一个漂亮整洁的CSV。我有一个满是表格的文件,只有几个类。我有三种类型的表,它们的结构是相同的。唯一的区别是“th”元素中的内容,它位于我感兴趣的元素之后。如何仅获取在“th”中包含特定文本的表的内容(“我想要获取的文本”)?有没有办法在每种类型的表中插入一个带有R的类 表的类型1 <tr> <th class="array">text_that_I_want_to_get</th> <td class="arra

我正在将HTML转换成一个漂亮整洁的CSV。我有一个满是表格的文件,只有几个类。我有三种类型的表,它们的结构是相同的。唯一的区别是“th”元素中的内容,它位于我感兴趣的元素之后。如何仅获取在“th”中包含特定文本的表的内容(“我想要获取的文本”)?有没有办法在每种类型的表中插入一个带有R的类

表的类型1

 <tr>
    <th class="array">text_that_I_want_to_get</th>
    <td class="array">
        <table>
            <thead>
                <tr>
                    <th class="string">name</th>
                    <th class="string">mean</th>
                    <th class="string">stdev</th>
                </tr>
            </thead>
            <tbody>

我想给你发短信
名称
意思是
科技发展署
表的类型2

<tr>
    <th class="array">text_that_I_want_to_get</th>
    <td class="array">
        <table>
            <thead>
                <tr>
                    <th class="string">name</th>
                    <th class="array">answers</th>
                </tr>
            </thead>
            <tbody>

我想给你发短信
名称
答案
表的类型3

<tr>
    <th class="array">text_that_I_want_to_get</th>
    <td class="array">
        <table>
            <thead>
                <tr>
                    <th class="string">Reference</th>
                </tr>
            </thead>
            <tbody>

我想给你发短信
参考文献

您需要以下三个XPath:

xpath1 <- "//td[table[./thead/tr/th/text() = 'stdev']]/preceding-sibling::th"
xpath2 <- "//td[table[./thead/tr/th/text() = 'answers']]/preceding-sibling::th"
xpath3 <- "//td[table[./thead/tr/th/text() = 'Reference']]/preceding-sibling::th"

您也可以使用
xpath2
xpath3
从表类型2和表类型3中获取文本?如果是这样,您可以尝试
sub(“.*(....*”,“\\1”,我的HTML\U字符串)
我认为它不能正常工作。我不仅对“th”(我想要得到的文本)里面的内容感兴趣,而且对tbody后面的内容也感兴趣(它很大,这就是为什么我没有发布它的原因)。。。有很多这样的表格,我没有它们在HTMLYou中的位置,你应该发布你想要的输出。现在还不清楚您试图提取什么。我的目标实际上是将文本放在“th”(我希望得到的文本)中,因此我无法将其写在xpath1中。除此之外,每种类型的表都需要分开。例如,在第一次,我只会得到所有类型1表。@polo在这种情况下,除了在xpath中使用
@class='string'
之外,这与我回答的你的另一个问题有什么不同?这是不同的,因为当时我必须手动将类“type1”、“type2”和“type3”添加到我的HTML中。我可以添加这些类,因为“th”中的内容在每种类型中都是不同的(类型1的名称、平均值、stdev;类型2的名称、答案;类型3的参考)。我的目标不是手动打开HTML并更正中的所有内容R@polo那么,您是否需要代码来标识您正在处理的表类型,并在表标记中插入
class=“type1”
class=“type2”
等?是的,考虑到“th”,它可以插入类“type1”或“type2”或“type3”(名称,平均值,类型1的stdev;名称,类型2的答案;类型3的参考)。或者,考虑到以下“th”(名称,平均值,类型1的stdev;名称,类型2的答案;类型3的参考),它可以得到“th”(我希望得到的文本)
read_html(url) %>% html_nodes(xpath = xpath1) %>% html_text()
#> [1] "text_that_I_want_to_get"