正在分析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:"对象引用未设置为对象的实例。">

问题出在哪里?

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中创建一个新的类文件

  4. 单击"编辑">粘贴特殊>将Json粘贴为类。在代码中,您需要粘贴的第一个类的名称。默认情况下,它是名为Rootobject的父类

  5. 安装Newtonsoft.Json

using Newtonsoft.Json
Rootobject obj = JsonConvert.DeserializeObject < Rootobject>(downloadedJson);

现在您可以循环数据数组来提取所需的所有作业信息。

Good[] goods= rootobject.data.goods;

最新更新