使用 XML 库解析未转义的 HTML 并检索标记值
Posted
技术标签:
【中文标题】使用 XML 库解析未转义的 HTML 并检索标记值【英文标题】:Parsing unescaped HTML and retrieving tag values with the XML library 【发布时间】:2014-12-20 00:48:58 【问题描述】:我正在使用 R 包 XML 来加载和解析 html 页面。我可以使用 XPath 成功导航到我想要的 sn-ps。然而,有问题的 HTML 页面似乎没有使用转义字符。例如,考虑以下 HTML 代码:
<tr>
<td width=\"50%\"><font size=\"1\" face=\"Arial, Helvetica, sans-serif\">MnO</font></td>
<td width=\"50%\" align=\"right\"><font size=\"1\" face=\"Arial, Helvetica, sans-serif\">
<0.05 % <BR>
</font>
</td>
</tr>
请注意我们如何使用“"<0.05 %"。当我解析文档时,我得到的只是两个“\r\n”。我现在看到的唯一解决方案是搜索和替换此类子字符串。我试图以各种方式加载文件,看看我们是否可以“反向”转义文档,但没有成功。我还寻找了一些可以考虑此类未转义字符但没有找到的解析选项。
有谁知道以一般方式处理此问题的方法。如果不是,你将如何解决这个问题。
注意:我认为 XML 包使用的是 libxml C 库。
编辑:可以在此处找到示例:
http://rop.ineti.pt/rop/FormProduto.php?idProduto=166
(化学成分见右下表)
【问题讨论】:
能否提供你要解析的页面的URL? 查看我在新编辑中提供的链接。谢谢。 【参考方案1】:以下内容有帮助吗?我没有使用 gsub() 调用来清理列表,但您可能会发现它们很有帮助。此外,您的语言编码可能与我的不同(英语)。
table <- readHTMLTable("http://rop.ineti.pt/rop/FormProduto.php?idProduto=166", useInternal = TRUE)
# table # table
table[20]
> table[20]
$`NULL`
Al2O3 14.64 %
1 CaO 0.58 %
2 Fe2O3 (total) 1.44 %
3 H2O+ 0.78 %
4 H2O- 0.05 %
5 K2O 4.89 %
6 MgO 0.17 %
7 MnO
8 Na2O 3.45 %
9 P2O5 0.45 %
10 SiO2 73.23 %
11 TiO2 0.24 %
【讨论】:
如果您查看“MnO”的条目,您会发现它们没有价值。它的值是 ' 如果底层的 HTML 做得奇怪或不正确,那么也许没有“答案”。 Xpath 表达式则达不到要求。不管怎样,我试过了。以上是关于使用 XML 库解析未转义的 HTML 并检索标记值的主要内容,如果未能解决你的问题,请参考以下文章