當我解析HTML時,我只想獲取整個文檔的最內層標記。我的意圖是從HTML文檔語義解析數據。HTML解析 - 獲取最內層的HTML標記
所以,如果我有一些HTML這樣
<html>
<table>
<tr><td>X</td></tr>
<tr><td>Y</td></tr>
</table>
</html>
我想單獨和<td>X</td>
<td>Y</td>
。這可能使用美麗的湯或lxml?
當我解析HTML時,我只想獲取整個文檔的最內層標記。我的意圖是從HTML文檔語義解析數據。HTML解析 - 獲取最內層的HTML標記
所以,如果我有一些HTML這樣
<html>
<table>
<tr><td>X</td></tr>
<tr><td>Y</td></tr>
</table>
</html>
我想單獨和<td>X</td>
<td>Y</td>
。這可能使用美麗的湯或lxml?
確保文檔格式正確(例如,使用lxml解析它)後,可以使用XPath查詢沒有其他子元素的所有節點。
//*[count(*) = 0]
在.NET中,我使用HtmlAgilityPack庫來完成所有的html分析。它加載DOM,你可以選擇節點,在你的情況下選擇沒有孩子的節點。也許這有幫助。
這是您可以使用正則表達式解析HTML字符串的少數情況之一。
\<(\w+)[^>]*>[^\<]*\</\1\s*>
如果你可以使用或DOM操作(即在瀏覽器中),您可以用parentNode工作屬性對所有的標籤和遞歸計算總,並保持最大的一個。
在JavaScript的僞代碼(上的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;
}
}
HTML不是XHTML - 由於所以不會工作等沒有被很好地形成。 – 2009-05-05 14:20:36