当我解析HTML我只希望获得最里面的标签为整个文档。我的意图是语义解析HTML文档的数据。
如果我有这样的一些html
<html>
<table>
<tr><td>X</td></tr>
<tr><td>Y</td></tr>
</table>
</html>
我希望< td > X < / td >和< td > < / td >。这是可能的使用Beautiful Soup或lxml吗?
当我解析HTML我只希望获得最里面的标签为整个文档。我的意图是语义解析HTML文档的数据。
如果我有这样的一些html
<html>
<table>
<tr><td>X</td></tr>
<tr><td>Y</td></tr>
</table>
</html>
我希望< td > X < / td >和< td > < / td >。这是可能的使用Beautiful Soup或lxml吗?
在。net我HtmlAgilityPack库用来做所有的html解析容易。它加载的DOM,您可以选择节点,在没有孩子的情况下选择节点。也许这可以帮助。
后你确定格式良好的文档(例如,通过使用lxml解析它),您可以使用XPath查询所有节点没有子元素。
//*[count(*) = 0]
那个年代为数不多的情况下,你可以使用正则表达式来解析HTML字符串。
<(w+)[^>]*>[^<]*</1s*>
如果你可以使用或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;
}
}