#c# #html #.net #html-agility-pack
Вопрос:
мне нужно загрузить некоторые данные с сайта, но я не могу найти правильный способ. Это класс, в котором я заинтересован:
lt;div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="wsgk@wsgk.com.pl"gt; lt;a class="ajax-modal-link icon-envelope cursor-pointer addax addax-cs_hl_email_submit_click" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_email_click_submit" data-hover-class-add="addax addax-cs_hl_email_hover" data-ga="l-email-modal" data-type="p" data-tracking-click="" data-toggle="modal" data-target="#mail-modal" data-company-trade-id="3123" data-company-id="120863029" data-company-email="mail@mail.com" data-company-name="Name" data-ajax-modal-tracking-type="result"gt; email lt;/agt; lt;/divgt;
ЭТО МОЯ ПЕТЛЯ:
foreach(var site in website) { var html = site.Value; var web = new HtmlWeb(); var _html = web.Load(html); var node = _html.DocumentNode.SelectNodes("//div[@class='flex-item text-primary']"); foreach (var mail in node) { try { Console.WriteLine(mail.Attributes["data-original-title"].Value); } } }
Это вывод из консоли: Ссылка на объект не установлена на экземпляр объекта.
Это выглядит так: введите описание изображения здесь, не могли бы вы, пожалуйста, помочь мне?
// ОБНОВЛЕНИЕ
lt;div class="d-flex justify-content-between m-0 bottom-content"gt; lt;div class="flex-item text-primary"gt; lt;a class="icon-telephone addax addax-cs_hl_phonenumber_click" href="https://panoramafirm.pl/zachodniopomorskie,gryficki,trzebiatów,kwiatowa,3/pphu_agawa_inz_waldemar_fiolek-scinlt_aal.html" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_phonenumber_click" data-hover-class-add="addax addax-cs_hl_phone_hover" data-ga="l-phone" data-toggle="tooltip" title="" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickphoneamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4" data-tracking-id="120898648_611" data-type="p" data-original-title="601 155 493"gt; telefon lt;/agt; lt;/divgt; lt;div class="flex-item text-primary"gt; lt;a class="icon-website text-secondary addax addax-cs_hl_hit_homepagelink_click" disabled="disabled"gt; www lt;/agt; lt;/divgt; lt;div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="agawa.fiolek@gmail.com"gt; lt;a class="ajax-modal-link icon-envelope cursor-pointer addax addax-cs_hl_email_submit_click" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_email_click_submit" data-hover-class-add="addax addax-cs_hl_email_hover" data-ga="l-email-modal" data-type="p" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickemailamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4" data-toggle="modal" data-target="#mail-modal" data-company-trade-id="611" data-company-id="120898648" data-company-email="agawa.fiolek@gmail.com" data-company-name="Pphu Agawa Inż Waldemar Fiołek" data-ajax-modal-tracking-type="result"gt; email lt;/agt; lt;/divgt; lt;div class="flex-item text-primary"gt; lt;a class="icon-check-point show-on-map cursor-pointer addax addax-cs_hl_hit_company_footer_map" data-lat="54.05219" data-lon="15.28209" data-tradeid="611" data-companyid="120898648" data-ga="l-map" data-type="p" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickmapamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4"gt; mapa lt;/agt; lt;/divgt; lt;/divgt;
Как я могу пропустить 2 первых раздела, а затем выбрать третий?
Комментарии:
1. Вы пробовали отладку? Я предполагаю, что эта разметка создается на клиенте с помощью JS и как таковая отсутствует в разметке при попытке ее анализа с помощью HtmlAgilityPack. Что такое HtmlWeb?
2. @HaukurHaf web = {HtmlAgilityPack. HtmlWeb} Я загрузил весь сайт, и я могу видеть это с помощью «просмотр источника страницы», чтобы я мог «разобраться в этом» 🙂 мне нужно найти способ, почему это не работает.
3. Каков URL-адрес сайта?
4. Я нашел свою проблему. Было 4 одинаковых занятия, и моя программа выбрала первое. в любом случае спасибо 🙂
5. HtmlAgilityPack возвращает
null
, когда в узлах выбора ничего не найдено, а не пустой список. Это приводит к сбою foreach
Ответ №1:
вам не нужно делать цикл, просто используйте массив и одномодовый:
var node = _html.DocumentNode.SelectSingleNode("//div[@class='flex-item text-primary'][3]"); Console.WriteLine(node.Attributes["data-original-title"].Value);