2017-04-24 9 views
0

HTMLAgilityPackを使用してコメント内のテーブルをスクラップしたいと思います。たとえば、 http://www.baseball-reference.com/register/team.cgi?id=f72457e4 のページには、id="team_pitching"という表があります。HTMLAgilityPackを使ってスクラップテーブル内のコメント

var tags = doc.DocumentNode.SelectNodes("//comment()[contains(., 'team_pitching')]//table//tbody//tr"); 

または

var tags = doc.DocumentNode.SelectNodes("//comment()//table[@id = 'team_pitching']//tbody//tr"); 

:私の好みのようなものを使用してテーブルから行を選択するだろうしかし

var tags = doc.DocumentNode.SelectSingleNode("//comment()[contains(., 'team_pitching')]"); 

:私は、テキストのブロックとしてこのコメントを得ることができますどちらもnullを返します。これを行う方法はありますか?そうすれば、すべてのテーブルデータを取得するために手動でテキストを解析する必要はありませんか?

サンプルHTML - 私は<!-- ... -->内のノードを見つけるために探しています:あなたが外でコメントして単一のXPathと内部のコメントを検索することはできませんので、コメントの

<p>not interesting HTML here</p> 
<!-- <table id=team_pitching> 
    <tbody><tr>...</tr>...</tbody>...</table> --> 
+0

コード、データ、エラーメッセージは、ポストで直接入手できる必要があります。 [MCVE]ガイダンスと[編集]ポストを読んで、あなたが興味を持っているオリジナル文書の部分を反映すると同時に、問題があることを示すHTMLの簡潔な例を提供してください。 –

+0

<! -

...
- > –

答えて

1

コンテンツは、DOMノードとして解析されていません。

コメントノードのInnerHTMLを取得し、コメントタグをトリミングしてHtmlDocumentにロードしてクエリできます。このようなものはうまくいくはずです

var commentNode = doc.DocumentNode 
    .SelectSingleNode("//comment()[contains(., 'team_pitching')]"); 
var commentHtml = commentNode.InnerHtml.TrimStart('<', '!', '-').TrimEnd('-', '>'); 
var commentDoc = new HtmlDocument(); 
commentDoc.LoadHtml(commentHtml); 
var tags = commentDoc.DocumentNode.SelectNodes("//table//tbody//tr"); 
+0

これは機能しますが、特に質問には答えません。 –

関連する問題