无法使用 html 敏捷包获取特定 div 的内容
Cannot get content of specific div with html agility pack
我正在使用 html 敏捷包从网站获取一些数据,现在有点问题。我想从这个 div:
中获取一些数据
<div class="container middle">
<div class="details clearfix">
<dl>
<dt>Gara</dt>
<dd><a href="/national/china-pr/csl/2016/regular-season/r34227/">Super League</a></dd>
<dt>Data</dt>
<dd><a href="/matches/2016/07/02/"><span class='timestamp' data-value='1467459300' data-format='d mmmm yyyy'>2 luglio 2016</span></a></dd>
<dt>Game week</dt>
<dd>15</dd>
<dt>calcio di inizio</dt>
<dd>
<span class='timestamp' data-value='1467459300' data-format='HH:MM'>13:35</span>
(<span class="game-minute">FP'</span>)
</dd>
</dl>
</div>
问题是有两个 div 和 class container middle
和 details clearfix
,我只想粘贴特定 div 的内容多于。 div 每个标签都有一个 dl 标签。
这是我的代码:
var url = "http://it.soccerway.com/matches/2016/07/02/china-pr/csl/henan-jianye/beijing-guoan-football-club/2207361/";
var doc = new HtmlDocument();
doc.LoadHtml(new WebClient().DownloadString(url));
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectSingleNode("//div[@class='container middle']");
而这个 return 是一个错误的结果,特别是这个:
<div class="container middle">
<h3 class="thick scoretime score-orange">
0 - 0
</h3>
这是完整的 source 代码。
那么,对于这个特定的网页,您可以执行以下操作:
var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
Console.WriteLine(matchDetails[1].InnerHtml);
并通过 matchDetails[1]
与 HtmlNode
合作。要检索其他数据,您可以使用类似的 xpath
请求,例如:
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
var dl = matchDetails[1].SelectSingleNode(".//dl");
var dt = dl.SelectNodes(".//dt");
var dd = dl.SelectNodes(".//dd");
for (int i = 0; i < dt.Count; i++) {
var name = dt[i].InnerHtml;
var value = dd[i].InnerHtml;
Console.WriteLine(name + ": " + value);
}
当然,您需要检查 NullReference
和东西
使用 class details clearfix
查询 div
应该 return 目标 div
元素。不过,您需要注意一个关键细节,
/
之前的 .
需要使 XPath 相对于 infoDiv
引用的上下文元素,否则将在根文档上下文上评估 XPath(就好像它是在doc.DocumentNode
而不是 infoDiv
) :
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectSingleNode(".//div[@class='details clearfix']");
我正在使用 html 敏捷包从网站获取一些数据,现在有点问题。我想从这个 div:
中获取一些数据<div class="container middle">
<div class="details clearfix">
<dl>
<dt>Gara</dt>
<dd><a href="/national/china-pr/csl/2016/regular-season/r34227/">Super League</a></dd>
<dt>Data</dt>
<dd><a href="/matches/2016/07/02/"><span class='timestamp' data-value='1467459300' data-format='d mmmm yyyy'>2 luglio 2016</span></a></dd>
<dt>Game week</dt>
<dd>15</dd>
<dt>calcio di inizio</dt>
<dd>
<span class='timestamp' data-value='1467459300' data-format='HH:MM'>13:35</span>
(<span class="game-minute">FP'</span>)
</dd>
</dl>
</div>
问题是有两个 div 和 class container middle
和 details clearfix
,我只想粘贴特定 div 的内容多于。 div 每个标签都有一个 dl 标签。
这是我的代码:
var url = "http://it.soccerway.com/matches/2016/07/02/china-pr/csl/henan-jianye/beijing-guoan-football-club/2207361/";
var doc = new HtmlDocument();
doc.LoadHtml(new WebClient().DownloadString(url));
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectSingleNode("//div[@class='container middle']");
而这个 return 是一个错误的结果,特别是这个:
<div class="container middle">
<h3 class="thick scoretime score-orange">
0 - 0
</h3>
这是完整的 source 代码。
那么,对于这个特定的网页,您可以执行以下操作:
var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
Console.WriteLine(matchDetails[1].InnerHtml);
并通过 matchDetails[1]
与 HtmlNode
合作。要检索其他数据,您可以使用类似的 xpath
请求,例如:
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']");
var dl = matchDetails[1].SelectSingleNode(".//dl");
var dt = dl.SelectNodes(".//dt");
var dd = dl.SelectNodes(".//dd");
for (int i = 0; i < dt.Count; i++) {
var name = dt[i].InnerHtml;
var value = dd[i].InnerHtml;
Console.WriteLine(name + ": " + value);
}
当然,您需要检查 NullReference
和东西
使用 class details clearfix
查询 div
应该 return 目标 div
元素。不过,您需要注意一个关键细节,
/
之前的 .
需要使 XPath 相对于 infoDiv
引用的上下文元素,否则将在根文档上下文上评估 XPath(就好像它是在doc.DocumentNode
而不是 infoDiv
) :
var infoDiv = doc.DocumentNode.SelectSingleNode("//div[@class='block_match_info real-content clearfix ']");
var matchDetails = infoDiv.SelectSingleNode(".//div[@class='details clearfix']");