繁体   English   中英

解析 C# HtmlAgilityPack

[英]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。

  1. 编写代码从 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"); }
  2. 将整个结果(downloadedJson 的值)复制到剪贴板上。

  3. 在 Visual Studio 中创建一个新的 class 文件

  4. 单击编辑 > 选择性粘贴 > 将 Json 粘贴为类。 在您的代码中,您将需要粘贴的第一个 class 的名称。 它是父 class 默认称为 Rootobject

  5. 安装 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM