HtmlAgilityPack DocumentNode.ChildNodes возвращает пустые узлы - PullRequest
0 голосов
/ 05 июня 2018

Я создал сканер веб-сайтов для сайта сравнения цен на Java и хотел бы переопределить его в C #.Я использовал Jsoup в Java, и 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 part:

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

Почему <script> не прямой дочерний элемент, а какой-то пустой узел?

1 Ответ

0 голосов
/ 05 июня 2018

Похоже, вы хотите получить этот JSON

var json = root.SelectSingleNode("//*[@class='pageContent-wrapper']/script").InnerText;
var jobj = JObject.Parse(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...