13

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");
  ...
}
4

2 回答 2

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");

请注意,这两种方法还将返回不是链接的锚点。

于 2010-05-18T13:59:01.650 回答
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>
于 2010-05-26T04:33:07.307 回答