当我解析HTML时,我希望只获得整个文档的最里面的标签。我的目的是从HTML文档中语义解析数据。
所以,如果我有一些像这样的HTML
<html>
<table>
<tr><td>X</td></tr>
<tr><td>Y</td></tr>
</table>
</html>
我想单独<td>X</td>
和<td>Y</td>
。这可能是使用Beautiful Soup还是lxml?
答案 0 :(得分:3)
在.NET中,我使用HtmlAgilityPack库轻松完成所有html解析。它加载DOM,您可以按节点选择,在您的情况下选择没有子节点的节点。也许这有帮助。
答案 1 :(得分:2)
确保文档格式正确(例如,通过使用lxml解析)后,可以使用XPath查询没有其他子元素的所有节点。
//*[count(*) = 0]
答案 2 :(得分:0)
这是您可以实际使用正则表达式来解析HTML字符串的少数情况之一。
\<(\w+)[^>]*>[^\<]*\</\1\s*>
答案 3 :(得分:0)
如果您可以使用或DOM处理(即在浏览器中),您可以使用所有标记的 parentNode 属性并递归计算总数,并保留最大值。
在javascript-pseudocode中(在FireFox上测试):
var allElements = document.getElementsByTagName("*");
var maxElementReference, maxParentNodeCount = 0;
var i;
for (i = 0; i < allElements.length; i++) {
var count = recursiveCountParentNodeOn(allElements[i]);
if (maxParentNodeCount < count) {
maxElementReference = allElements[i];
maxParentNodeCount = count;
}
}