Ich versuche, das HtmlAgilityPack zu verwenden, um alle Links von einer Seite zu ziehen, die in einem div enthalten sind, deklariert als <div class='content'>
Wenn ich jedoch den folgenden Code verwende, bekomme ich ALLE Links auf der ganzen Seite . Das macht für mich keinen Sinn, da ich SelectNodes von dem Unterknoten anrufe, den ich zuvor ausgewählt habe (der bei der Anzeige im Debugger nur den HTML-Code von diesem bestimmten div anzeigt). Es ist also so, als würde es jedes Mal, wenn ich SelectNodes anrufe, zum Wurzelknoten zurückkehren. Der Code, den ich verwende, ist unten:
HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(@"http://example.com");
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='content']");
foreach(HtmlNode link in node.SelectNodes("//a[@href]"))
{
Console.WriteLine(link.Value);
}
Ist das das erwartete Verhalten? Und wenn ja, wie bekomme ich es zu tun, was ich erwarte?
Das wird funktionieren:
node.SelectNodes("a[@href]")
Sie können dies auch in einem einzelnen Selektor tun:
doc.DocumentNode.SelectSingleNode("//div[@class='content']//a[@href]")
Beachten link.Value
auch, dass link.Value
nicht für HtmlNode
definiert HtmlNode
, sodass der Code nicht kompiliert wird.