使用html agility pack获取课堂链接

时间:2010-05-18 13:55:44

标签: c# html-agility-pack

有一堆与课程alt的tr。我想得到所有链接(或者最后一个),但我无法弄清楚如何使用html敏捷包。

我尝试了a的变种,但我只获得所有链接或没有。它似乎只是在节点中得到一个没有意义的,因为我正在写n.SelectNodes

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']");
foreach (var n in nS)
{
  var aS = n.SelectNodes("a");
  ...
}

2 个答案:

答案 0 :(得分:15)

您可以使用LINQ:

var links = html.DocumentNode
           .Descendants("tr")
           .Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
           .SelectMany(tr => tr.Descendants("a"))
           .ToArray();

请注意,这也符合<tr class="Malto">;您可能希望将Contains调用替换为正则表达式。

您也可以使用Fizzler

html.DocumentNode.QuerySelectorAll("tr.alt a");

请注意,这两种方法也会返回非链接的锚点。

答案 1 :(得分:11)

为什么不在单个查询中选择所有链接:

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}

它对html有效:

<table>
<tr class = "alt">
<td><'a href="link.html">Some Link</a></td>
</tr>
</table>