一尘不染

HTML Agility包-解析表

c#

我想使用HTML敏捷性包来解析复杂网页中的表,但是我迷失在对象模型中。

我看了链接示例,但没有以这种方式找到任何表数据。我可以使用XPath获取表吗?在加载有关如何获取表的数据之后,我基本上迷失了。我之前在Perl中完成过此操作,虽然有点笨拙,但可以。(HTML::TableParser)。

如果有人能阐明正确的对象顺序进行解析,我也很高兴。


阅读 234

收藏
2020-05-19

共1个答案

一尘不染

怎么样:使用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使其更漂亮:

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
            from row in table.SelectNodes("tr").Cast<HtmlNode>()
            from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
            select new {Table = table.Id, CellText = cell.InnerText};

foreach(var cell in query) {
    Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}
2020-05-19