使用html agility pack獲取課堂鏈接

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

一般承認的答案

您可以使用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

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

請注意,這兩種方法也將返回非鏈接的錨點。


熱門答案

為什麼不在單個查詢中選擇所有鏈接:

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

它對html有效:

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因