HTML Agility包 - 解析表

c# html html-agility-pack html-parsing

我想使用HTML敏捷包來解析複雜網頁中的表,但我在對像模型中丟失了。

我查看了鏈接示例,但沒有找到任何表格數據。我可以使用XPath來獲取表嗎?在加載了關於如何獲取表格的數據後,我基本上已經丟失了。我之前在Perl中做過這個,它有點笨拙,但很有效。 ( HTML::TableParser )。

如果能夠解釋正確的解析對象順序,我也很高興。

一般承認的答案

如下所示:使用HTML Agility Pack

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
    Console.WriteLine("Found: " + table.Id);
    foreach (HtmlNode row in table.SelectNodes("tr")) {
        Console.WriteLine("row");
        foreach (HtmlNode cell in row.SelectNodes("th|td")) {
            Console.WriteLine("cell: " + cell.InnerText);
        }
    }
}

請注意,如果您需要,可以使用LINQ-to-Objects使其更漂亮:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
    Console.WriteLine("Found: " + table.Id);
    foreach (HtmlNode row in table.SelectNodes("tr")) {
        Console.WriteLine("row");
        foreach (HtmlNode cell in row.SelectNodes("th|td")) {
            Console.WriteLine("cell: " + cell.InnerText);
        }
    }
}

熱門答案

我發現獲得特定元素的XPath最簡單的就是為Firefox安裝FireBug擴展程序,然後按F12的網站/網頁調出firebug;右鍵選擇並右鍵單擊要查詢的頁面上的元素,然後選擇“Inspect Element”Firebug將在其IDE中選擇元素,然後右鍵單擊Firebug中的Element並選擇“Copy XPath”,此函數將為您提供精確的XPath查詢您需要使用HTML Agility Library獲取所需的元素。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因