SelectNodes неправильно вытягивает все дочерние узлы - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь получить список продуктов с веб-страницы. Я использую приведенный ниже URL для тестирования своего приложения, но оно вытягивает только 10 из 40 пунктов. Я копался в отладчике и смотрел на дочерние узлы, он показывает первые 10 как элементы li, а остальные 30 как div. Когда я смотрю на внутренний текст предметов, отображаемых в виде div, он полностью пуст. При просмотре html веб-страницы все 40 элементов перечислены как элементы li. Кто-нибудь знает, почему это происходит? Все, что мне нужно, это правильно показать все 40 пунктов, поскольку я могу видеть только первые 10 прямо сейчас.

//Create URL
var url = "https://www.walmart.com/search/?query=apples";
var itemTweak = itemTextBox.Text.Replace(" ", "%20");
url += itemTweak;
//Creates a client for the webpage
var httpClient = new HttpClient();
var html = await httpClient.GetStringAsync(url);

//Allow information to be parsed
var htmlDocument = new HtmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(html);

//Grabs everything inside the list
var ProductsHtml = htmlDocument.DocumentNode.SelectNodes("//ul[@class='search-result-gridview-items four-items']").ToList();

1 Ответ

0 голосов
/ 30 октября 2019

Я думаю, это может быть связано с тем, что некоторые данные загружаются с использованием Javascript на стороне браузера.

Если вы посмотрите на html, то все продукты находятся в объекте json в <script id="searchContent" type="application/json">

Возможно, вам следует проанализировать их оттуда так:

var json = htmlDocument.DocumentNode.SelectSingleNode("//script[@id='searchContent']");
//need Json.net for this to work...
JObject.Parse(json.InnerText)["searchContent"]["preso"]["items"];
...