解析 html/xml 无法过滤文本

Parse html/xml can't filter for text

提问人:Swyler 提问时间:1/24/2022 最后编辑:Swyler 更新时间:1/26/2022 访问量:44

问:

我正在尝试解析一些html / xml数据,并希望获取ID。 有多个剪裁看起来像下面的剪裁,它们写在一个文件中。 现在我无法选择所有 ID,因为它们不在特定节点或类中。

目前我的代码是这样的,但缺少 ID 的过滤器:

file %>% html_nodes(".MAINBODY") %>% html_nodes("tr") %>% xml_text()
<TR><TD HEIGHT=25></TD></TR>
<TR>
  <TD VALIGN=TOP COLSPAN=3>
   <A NAME="76ED699E406E3FA20568F4ABFE2CB24C"></A>
   <TABLE CLASS=MAINBODY WIDTH=100% CELLSPACING=0 CELLPADDING=4 BORDER=1 BORDERCOLOR=#000000><TR><TD>
    <TABLE CLASS=OBJECTNAME WIDTH=100% CELLSPACING=0 CELLPADDING=1><TR><TD WIDTH=44><IMG SRC=file:///C:\Program Files\FolderL.bmp></TD><TD>Seiten</TD></TR></TABLE>
    <!--========== SECTION: BASIC PROPERTIES ==========-->
    <TABLE CLASS=MAINBODY HEIGHT=25><TR><TD></TD></TD></TABLE>
    <TABLE CLASS=SECTIONHEADER WIDTH=100% CELLSPACING=0 CELLPADDING=1><TR><TD>BASIC PROPERTIES</TD></TR></TABLE>
    <TABLE CLASS=MAINBODY WIDTH=100% CELLSPACING=0 CELLPADDING=1><COL WIDTH=120>
     <TR VALIGN=TOP><TD>Location:</TD><TD>\ Report</TD></TR>
     <TR VALIGN=TOP><TD>Description:</TD><TD></TD></TR>
     <TR VALIGN=TOP><TD>Long Description:</TD><TD></TD></TR>
     <TR VALIGN=TOP><TD>Creation Time:</TD><TD>13.11.2020 11:06:22</TD></TR>
     <TR VALIGN=TOP><TD>Modification Time:</TD><TD>10.01.2022 11:40:55</TD></TR>
     <TR VALIGN=TOP><TD>Owner:</TD><TD><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\User.bmp>&nbsp;Administrator</TD></TR>
     <TR VALIGN=TOP><TD>Hidden:</TD><TD>No</TD></TR>
     <TR VALIGN=TOP><TD>ID:</TD><TD>76ED699E406E3FA20568F4ABFE2CB24C</TD></TR>
     <TR VALIGN=TOP><TD>Version ID:</TD><TD>C75E81DC49C748800AD242B04B486C5C</TD></TR>
     <TR VALIGN=TOP>
      <TD>Access Control:</TD>
      <TD>
       <TABLE CLASS=MAINBODY WIDTH=100% CELLSPACING=0 CELLPADDING=1>
        <COL WIDTH=33%><COL WIDTH=34%><COL WIDTH=33%>
        <TR ALIGN=CENTER>
         <TD CLASS=BORDERLRTB BGCOLOR=#DDDDDD WIDTH=33%>USER</TD>
         <TD CLASS=BORDERRTB BGCOLOR=#DDDDDD WIDTH=34%>OBJECT</TD>
         <TD CLASS=BORDERRTB BGCOLOR=#DDDDDD WIDTH=33%>CHILDREN</TD>
        </TR>
        <TR VALIGN=TOP>
         <TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\Group.bmp>&nbsp;A_Administrator</TD>
         <TD CLASS=BORDERRB>Full Control</TD>
         <TD CLASS=BORDERRB>Full Control</TD>
        </TR>
        <TR VALIGN=TOP>
         <TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\Group.bmp>&nbsp;A_Administrator</TD>
         <TD CLASS=BORDERRB>Modify</TD>
         <TD CLASS=BORDERRB>Modify</TD>
        </TR>
        <TR VALIGN=TOP>
         <TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\Group.bmp>&nbsp;User</TD>
         <TD CLASS=BORDERRB>View</TD>
         <TD CLASS=BORDERRB>View</TD>
        </TR>
       </TABLE>
      </TD>
     </TR>
    </TABLE>
    <!--========== SECTION: INTERNATIONAL PROPERTIES ==========-->
    <TABLE CLASS=MAINBODY HEIGHT=25><TR><TD></TD></TD></TABLE>
    <TABLE CLASS=SECTIONHEADER WIDTH=100% CELLSPACING=0 CELLPADDING=1><TR><TD>INTERNATIONAL PROPERTIES</TD></TR></TABLE>
    <TABLE CLASS=MAINBODY WIDTH=100% CELLSPACING=0 CELLPADDING=1><COL WIDTH=120>
     <TR VALIGN=TOP><TD>Default Language:</TD><TD><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\Language.bmp>&nbsp;German</TD></TR>
     <TR VALIGN=TOP><TD>Translations:</TD><TD>       <TABLE CLASS=MAINBODY WIDTH=70% CELLSPACING=0 CELLPADDING=1>
        <COL WIDTH=50%><COL WIDTH=50%>
        <TR ALIGN=CENTER>
         <TD CLASS=BORDERLRTB BGCOLOR=#DDDDDD WIDTH=50%>LANGUAGE</TD>
         <TD CLASS=BORDERRTB BGCOLOR=#DDDDDD WIDTH=50%>TRANSLATION</TD>
        </TR>
     <TR>
      <TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files\Language.bmp>&nbsp;German</TD>
      <TD CLASS=BORDERLRB>Seiten</TD>
     </TR>
     <TR>
      <TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files \Language.bmp>&nbsp;German</TD>
      <TD CLASS=BORDERLRB>Seiten</TD>
     </TR>
    </TABLE>
                                                                                                                                             </TD></TR>
    </TABLE>
   </TD></TR></TABLE>
  </TD>
</TR>
<TR><TD ALIGN=RIGHT><A CLASS=TOPLINK HREF="#TOP">Top<A/></TD></TR>

在这种情况下,回报应为: 76ED699E406E3FA20568F4ABFE2CB24C

如果有人入,我自己想出了一个解决方案:

ID <- file %>% html_nodes(".MAINBODY tr td") %>% xml_text %>% as_tibble() %>% mutate(value = str_trim(value)) %>% slice(value, which(value == "ID") + 1)
html r xml xml 解析

评论

0赞 stefan_aus_hannover 1/24/2022
更改为 .您还需要做更多的深入研究。xml_text()html_text()
0赞 Swyler 1/24/2022
我应该向下钻取什么,没有更多节点?

答:

1赞 Dave2e 1/25/2022 #1

这是一个组织不良的页面,但通过一些反复试验,您可以确定您的数据位于哪个表中。

从这个开始:

tables <- page %>% html_elements("table.MAINBODY") 

检索具有 class=“MAINBODY” 的表列表

如果逐个浏览这些表,可以看到感兴趣的数据在表 3 中。此表还包含一个嵌入表。

df<- tables[3] %>% html_table() %>% .[[1]]
df

answer <- df$X2[df$X1=="ID:"]

不是很优雅,但可以完成工作

评论

0赞 Dave2e 2/5/2022
@Chris,如果这回答了您的问题,请考虑接受该答案以将其标记为关闭。