使用 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");
我想使用 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");