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");
...
}
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");
...
}
您可以使用 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");
请注意,这两种方法还将返回不是链接的锚点。
为什么不在单个查询中选择所有链接:
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>