Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SelectNodes未正确拉取所有子节点_C#_Html Agility Pack - Fatal编程技术网

C# SelectNodes未正确拉取所有子节点

C# SelectNodes未正确拉取所有子节点,c#,html-agility-pack,C#,Html Agility Pack,我正在尝试从网页上获取产品列表。我正在使用下面的url来测试我的应用程序,但它只提取了40个项目中的10个。我一直在调试器中搜索,查看子节点,它将前10个显示为li项,其余30个显示为div。当我查看显示为div的项目的内部文本时,它是完全空的。当查看网页的html时,所有40个项目都列为li项目。有人知道为什么会这样吗?我所需要做的就是正确显示所有40项,因为我现在只能看到前10项 //Create URL var url = "https://www.walmart.com/search/?

我正在尝试从网页上获取产品列表。我正在使用下面的url来测试我的应用程序,但它只提取了40个项目中的10个。我一直在调试器中搜索,查看子节点,它将前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();

我认为这可能是因为一些数据是使用浏览器端的Javascript加载的

如果查看
html
,所有产品都位于
json对象中

也许你应该像这样解析它们:

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

那很有魅力!它甚至把所有的东西都分开,让我更容易找到。谢谢,伙计,我真的很感激。你怎么知道这些参数应该输入什么?@Mr.Finch-这是个好问题,我也困惑了好一阵子。。。总之,一旦我在html中找到json,我就使用LinqPad来深入研究对象。您可能已经知道了,但是现在有一些方法可以将这些对象转换为强类型C#对象。。。这是一个很好的起点:事实上,我今天才开始使用json,这对我很有帮助。我不知道你可以在没有api的情况下使用它,或者这是一个api,我只是不知道。