我用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>
不是直接的子节点,而是一些空节点?
发布于 2018-06-06 03:41:38
看起来你想要得到这个json
var json = root.SelectSingleNode("//*[@class='pageContent-wrapper']/script").InnerText;
var jobj = JObject.Parse(json);
https://stackoverflow.com/questions/50707663
复制相似问题