使用 HTMLAgilityPack 抓取 Table 内部评论

Scrape Table Inside Comment With HTMLAgilityPack

我想使用 HTMLAgilityPack 在评论中抓取 table。例如,在页面上 http://www.baseball-reference.com/register/team.cgi?id=f72457e4 有一个 table 和 id="team_pitching"。我可以将此评论作为文本块获取:

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

但是我更喜欢 select 来自 table 的行,例如:

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

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

但是这些都return无效。有没有办法做到这一点,这样我就不必手动解析文本来获取所有 table 数据?

示例 HTML - 我正在寻找 <!-- ... -->:

中的节点
<p>not interesting HTML here</p>
<!-- <table id=team_pitching>
    <tbody><tr>...</tr>...</tbody>...</table> -->

评论内容未被解析为DOM个节点,因此您无法使用单个XPath搜索外部评论和内部评论。

可以获取InnerHTML评论节点,trim评论标签,加载到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");