[英]Parsing C# HtmlAgilityPack
我的代码:
public static (HtmlNodeCollection title, HtmlNodeCollection price) ParsingNodesTP()
{
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://rozetka.com.ua/ua/search/?text=Asus+Zenbook+14&producer=asus&page=1");
var titles = doc.DocumentNode.SelectNodes("//a[@class='goods-tile__heading ng-star-inserted']//span");
var price = doc.DocumentNode.SelectNodes("//div[@class='goods-tile__prices']//div[@class='goods-tile__price price--red ng-star-inserted']//p//span[@class='goods-tile__price-value']");
return (titles, price);
}
我得到的错误:
System.NullReferenceException:“对象引用未设置为 object 的实例。”
问题出在哪里?
F12 是您在任何浏览器中的朋友。 查看网络选项卡。 您感兴趣的数据属于“xhr”类型。 无需使用 HTMLAgilityPack。 您需要做的就是解析 url 返回的 Json。
编写代码从 URL 下载 json 字符串。 以下代码适用于我:
using System.Net; using (WebClient wc = new WebClient()) { wc.Headers.Add("accept", "application/json, text/plain, */*"); wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"); string downloadedJson = wc.DownloadString("https://search.rozetka.com.ua/ua/search/api/v6/?front-type=xl&country=UA&lang=ua&producer=asus&page=1&text=Asus+Zenbook+14"); }
将整个结果(downloadedJson 的值)复制到剪贴板上。
在 Visual Studio 中创建一个新的 class 文件
单击编辑 > 选择性粘贴 > 将 Json 粘贴为类。 在您的代码中,您将需要粘贴的第一个 class 的名称。 它是父 class 默认称为 Rootobject
安装 Newtonsoft.Json
using Newtonsoft.Json Rootobject obj = JsonConvert.DeserializeObject < Rootobject>(downloadedJson);
现在您可以遍历 Data 数组以提取您需要的所有作业信息。
Good[] goods= rootobject.data.goods;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.