HTML解析 - 获取最内层的HTML标记

时间:2009-05-05 14:13:36

标签: html parsing

当我解析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?

4 个答案:

答案 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;
    }
}