2009-03-17 7 views
45

複雑なWebページのテーブルを解析するためにHTMLアジリティパックを使用したいが、私は何とかオブジェクトモデルで失われている。HTMLアジャイルパック - パーステーブル

私はリンクの例を見ましたが、このようなテーブルデータは見つかりませんでした。 XPathを使用してテーブルを取得できますか?私は基本的にどのようにテーブルを取得するためのデータを読み込んだ後に失われています。私は以前これをPerlでやっていましたが、少し不器用でしたが、うまくいったのです。 (HTML::TableParser)。

解析のために適切なオブジェクトの順序を明かすことができれば幸いです。

答えて

96

どのようなものについて:あなたがしたい場合、あなたはそれがきれいにLINQツーオブジェクトとすることができます

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); 
     } 
    } 
} 
を使用注:

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); 
} 
+1

Hi Mark、大きなファイルを解析する助言をお願いできますか? –

+0

@Marc - テーブルがページングをしている場合は、次のページに移動する方法 –

+0

@Dark_Knight元のページが使用されているAjaxルートを打つ必要があります –

31

私がきたもの、最も簡単な特定の要素のためのXPathを取得するために発見されたFirefoxのためのFireBugの拡張機能をインストールするにはサイト/ WebページのF12を押して火かき棒を持ち出す;右クリックし、クエリを実行するページ上の要素を右クリックし、 "Inspect Element"を選択します.FirebugはIDE内の要素を選択し、Firebugの要素を右クリックして "Copy XPath"を選択します。 HTMLアジャイルライブラリを使用して、必要な要素を取得する必要があります。答えは上から

+3

ブラウザがHTMLのDOMを若干変更する場合があります(を

に追加するなど)。 HTMLの解析時にデフォルトでHtml Agility Packにはと