C# HtmlAlityPack DocumentNode.ChildNodes返回空节点

C# HtmlAlityPack DocumentNode.ChildNodes返回空节点,c#,web-crawler,html-agility-pack,C#,Web Crawler,Html Agility Pack,我用Java为a构建了一个网站爬虫程序,并想用C#重新实现它。我在Java中使用了Jsoup,HtmlAgilityPack(HAP)是.NET的一个很好的对应项。在对这个示例产品进行爬网之后,我注意到HAP返回空的html节点。当我查看该站点的源代码时,它们不是原始html的一部分。节点仅包含格式符号,如“\n\t\t\t\t”。Jsoup没有表现出这种行为,所以我很好奇HAP在那里做什么。如何检索节点的一个小代码示例: using Fizzler.Systems.HtmlAgilityPac

我用Java为a构建了一个网站爬虫程序,并想用C#重新实现它。我在Java中使用了Jsoup,HtmlAgilityPack(HAP)是.NET的一个很好的对应项。在对这个示例产品进行爬网之后,我注意到HAP返回空的html节点。当我查看该站点的源代码时,它们不是原始html的一部分。节点仅包含格式符号,如
“\n\t\t\t\t”
。Jsoup没有表现出这种行为,所以我很好奇HAP在那里做什么。如何检索节点的一个小代码示例:

using Fizzler.Systems.HtmlAgilityPack; // Without that I can't retrieve nodes 
                                      // by searching for a certain class
[...]
var client = new WebClient()
{
    Encoding = Encoding.UTF8
};
var doc = new HtmlDocument();
var html = client.DownloadString("https://www.idealo.de/preisvergleich/OffersOfProduct/5473234);
doc.LoadHtml(html);
var root = doc.DocumentNode;
var data = root.QuerySelector(".pageContent-wrapper").FirstChild;
此代码返回一个空节点,其中
“\n\t\t\t\t”
作为内容,而它应该返回一个包含javascript内容的脚本节点

关键html部分:

<main class="pageContent-wrapper">
<!-- Here is nothing!-->
            <script type="application/ld+json">{...json...}</script>

{…json…}

为什么
不是直接的子节点,而是某个空节点?

似乎您想要得到这个json

var json = root.SelectSingleNode("//*[@class='pageContent-wrapper']/script").InnerText;
var jobj = JObject.Parse(json);

我不明白为什么HAP在和部分之间添加一个空节点。。。应该是
FirstChild
而不是第二个。可以作为FirstChild使用我的代码?如果是问题,我不明白你在问什么。顺便说一句:在继续之前,为什么不试试上面的代码呢?在我的代码中,节点上面的代码可以作为变量
数据
。。。所以从逻辑上讲,节点的
第一个子节点应该是。。。但事实并非如此。第一个子节点是一个空节点,标记为
#text
,内容为
“\n\t\t\t”
。顺便说一句:我知道这是可行的,因为您可以通过查询直接访问脚本组件。。。我也在30年代前测试过,
#text
是第一个包含这些空字符的节点,而不是脚本。你的问题是什么?