2017-04-24 46 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

这有效,但它没有具体回答这个问题。 –