2017-04-24 45 views
0

我想使用HTMLAgilityPack在評論中刮取表格。例如,在頁面 http://www.baseball-reference.com/register/team.cgi?id=f72457e4 有一個表id="team_pitching"。我能得到這個批評是對文本的一個塊:Scrape Table Inside HTMLAgilityPack評論

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

但是我更傾向於將喜歡的東西,選擇從表中的行:

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

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

但是這些都返回null。有沒有辦法做到這一點,所以我不必手動解析文本以獲取所有表格數據?

樣本HTML - 我想找找裏面<!-- ... -->節點:評論

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

代碼,數據和錯誤消息必須直接在帖子中可用。請閱讀[MCVE]指導和[編輯]文章,以提供簡明的HTML示例,它反映了您感興趣的原始文檔的某些部分,同時演示了您遇到的問題。 –

+0

<! -

...
- > –

回答

1

內容不會被解析爲DOM節點,所以你不能搜索之外的評論,並與單一的XPath內評論。

你可以得到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

這有效,但它沒有具體回答這個問題。 –