Seleccione solo artículos en un DIV específico usando HtmlAgilityPack

c# html-agility-pack

Pregunta

Estoy tratando de usar el HtmlAgilityPack para extraer todos los enlaces de una página que está contenida en un div declarado como <div class='content'> Sin embargo, cuando uso el código a continuación, simplemente obtengo TODOS los enlaces en toda la página. . Esto realmente no tiene sentido para mí, ya que estoy llamando a SelectNodes desde el subnodo que seleccioné anteriormente (que cuando se ve en el depurador solo muestra el HTML de ese div específico). Entonces, es como si volviera al mismo nodo raíz cada vez que llamo a SelectNodes. El código que uso está abajo:

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

¿Es este el comportamiento esperado? Y si es así, ¿cómo hago para que haga lo que estoy esperando?

Respuesta aceptada

Esto funcionará:

node.SelectNodes("a[@href]")

Además, puedes hacerlo en un solo selector:

doc.DocumentNode.SelectSingleNode("//div[@class='content']//a[@href]")

Además, tenga en cuenta que link.Value no está definido para HtmlNode , por lo que su código no se compila.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow