使用html agility pack

时间:2016-07-02 12:43:44

标签: c# regex html-agility-pack

我正在使用html agility pack从网站上获取一些数据,现在有点问题。我想从这个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有类container middledetails 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']");

这会返回错误的结果,尤其是:

<div class="container middle">
<h3 class="thick scoretime score-orange">
  0 - 0
</h3>

这是完整的source代码。

2 个答案:

答案 0 :(得分:2)

嗯,您可以针对此特定网页执行以下操作:

ng-pattern="/^[0-9,\.\-\+]+$/"

并通过 var matchDetails = infoDiv.SelectNodes(".//div[@class='container middle']"); Console.WriteLine(matchDetails[1].InnerHtml); HtmlNode合作。要检索其他数据,您可以使用类似的matchDetails[1]请求,例如:

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); } 和内容

答案 1 :(得分:1)

使用类div查询details clearfix应该返回目标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']");