HtmlAgilityPack DocumentNode.ChildNodes返回空节点怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (172)

我在Java中为价格比较网站构建了一个网站爬虫,并希望在C#中重新实现它。 我在Java中使用了Jsoup,HtmlAgilityPack(HAP)是.NET的一个很好的对应物。 在抓取此站点的示例产品后,我注意到HAP返回空的html节点。 当我查看该网站时,它们不是原始html的一部分。 该节点仅包含格式化符号,如“\ n \ t \ 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>

为什么<script>直接子节点,却是一些空节点?

提问于
用户回答回答于

似乎你想要得到这个json

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


var jobj = JObject.Parse(json);

扫码关注云+社区

领取腾讯云代金券