我在Java中为price comparison site构建了一个网站爬虫,并希望在C#中重新实现它。我在Java中使用了Jsoup,HtmlAgilityPack(HAP)是.NET的一个很好的对应物。在抓取此site的示例产品后,我注意到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>
为什么<script>
不是直接子节点,而是一些空节点?
答案 0 :(得分:0)
好像你想得到这个json
var json = root.SelectSingleNode("//*[@class='pageContent-wrapper']/script").InnerText;
var jobj = JObject.Parse(json);