60

HTML アジリティ パックを使用して、複雑な Web ページからテーブルを解析したいのですが、どうにかしてオブジェクト モデルに迷っています。

リンクの例を見ましたが、このようにテーブル データが見つかりませんでした。XPath を使用してテーブルを取得できますか? テーブルを取得する方法について、データをロードした後、私は基本的に迷っています。以前に Perl でこれを行ったことがあり、少し不器用でしたが、うまくいきました。( HTML::TableParser)。

また、解析のための正しいオブジェクトの順序に光を当てることができれば幸いです。

4

5 に答える 5

124

次のようなものはどうですか: 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);
}
于 2009-03-17T20:13:52.963 に答える
30

特定の要素の XPath を取得するために私が見つけた最も簡単な方法は、Firefox 用の FireBug 拡張機能をインストールすることです。サイト/Web ページに移動し、F12 キーを押して firebug を起動します。クエリを実行するページ上の要素を右選択して右クリックし、[要素の検査] を選択しますHTML Agility ライブラリを使用して、必要な要素を取得するために必要なクエリを実行します。

于 2010-06-23T17:33:23.323 に答える