【问题标题】:Parse html/xml can't filter for text解析 html/xml 无法过滤文本
【发布时间】:2022-01-24 15:18:36
【问题描述】:

我正在尝试解析一些 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)

【问题讨论】:

  • 将xml_text() 更改为html_text()。您还需要进行更多深入研究。
  • 我应该向下钻取什么,没有更多的节点?

标签: html r xml xml-parsing


【解决方案1】:

这是一个组织得很糟糕的页面,但通过一些试验和错误,您可以确定您的数据在哪个表中。

从这里开始:

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

检索具有 class="MAINBODY" 的表列表

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

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

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

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

【讨论】:

  • @Chris,如果这回答了您的问题,请考虑接受答案以将其标记为已关闭。
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多