Подтвердить что ты не робот

Выберите только элементы в определенном DIV, используя HtmlAgilityPack

Я пытаюсь использовать HtmlAgilityPack, чтобы вытащить все ссылки со страницы, которые содержатся в div, объявленном как <div class='content'> Однако, когда я использую приведенный ниже код, я просто получаю ВСЕ ссылки на всей странице. Это не имеет для меня никакого смысла, так как я вызываю SelectNodes из под node, который я выбрал ранее (который при просмотре в отладчике показывает только HTML из этого конкретного div). Таким образом, он как будто возвращается к самому корню node каждый раз, когда я вызываю SelectNodes. Код, который я использую, ниже:

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

Является ли это ожидаемым поведением? И если да, то как мне заставить его делать то, что я ожидаю?

4b9b3361

Ответ 1

Это будет работать:

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

Кроме того, вы можете сделать это в одном селекторе:

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

Также обратите внимание, что link.Value не определен для HtmlNode, поэтому ваш код не компилируется.