提问人:Swyler 提问时间:1/24/2022 最后编辑:Swyler 更新时间:1/26/2022 访问量:44
解析 html/xml 无法过滤文本
Parse html/xml can't filter for text
问:
我正在尝试解析一些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> 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> 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> 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> 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> 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> German</TD>
<TD CLASS=BORDERLRB>Seiten</TD>
</TR>
<TR>
<TD CLASS=BORDERLRB><IMG ALIGN=MIDDLE SRC=file:///C:\Program Files \Language.bmp> 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)
答:
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,如果这回答了您的问题,请考虑接受该答案以将其标记为关闭。
上一个:如何根据其他解析条件解析XML?
下一个:获取可迭代节点之间的所有文本节点
评论
xml_text()
html_text()