c# - SelectNodes 未正确拉出所有子节点
问题描述
我正在尝试从网页获取产品列表。我正在使用下面的 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 对象中<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"];
推荐阅读
- c# - 场景之间的画面淡入淡出,但返回上一场景时仍然黑屏
- mysql - 如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集
- mongodb - 在一个 mongodb 查询中使用两个 group by 来匹配预期结果
- c# - EF Core 规范模式添加所有列以使用自定义规范对数据进行排序
- python - 如何将完整的 HTML 页面 [HTML+CSS+JS] 嵌入到 tkinter 应用程序中
- c# - 在列表中显示 int[] 值
- r - 给定 R 中的输入,创建一个带有零的数据框
- regex - 如何结合 RegEx 条件?
- arduino - 从串行端口读取数据来自 HC-08 模块的数据出现问题
- python - SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xfc in position 38: invalid start byte