【问题标题】:C# with HTML AGILITY PACK cannot get value of div class带有 HTML AGILITY PACK 的 C# 无法获取 div 类的值
【发布时间】:2021-11-12 21:10:53
【问题描述】:

我必须从网站下载一些数据,但我找不到正确的方法。 这是我感兴趣的课程:

<div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="wsgk@wsgk.com.pl">
        <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">
            email
        </a>
    </div>

这是我的循环:

    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);
            }
         

        }

    }

这是控制台的输出: 对象引用未设置为对象的实例。

看起来像这样: enter image description here 你能帮帮我吗?

// 更新

<div class="d-flex justify-content-between m-0 bottom-content">
    <div class="flex-item text-primary">
        <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=results&amp;type=clickphone&amp;sid=8f04e98ua6kmfmkr7fe1b26rth&amp;lstPersistentId=120898648_611&amp;page=4" data-tracking-id="120898648_611" data-type="p" data-original-title="601 155 493">
                   telefon
                </a>
    </div>
    <div class="flex-item text-primary">
        <a class="icon-website  text-secondary  addax addax-cs_hl_hit_homepagelink_click" disabled="disabled">
            www
        </a>
    </div>

    <div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="agawa.fiolek@gmail.com">
        <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=results&amp;type=clickemail&amp;sid=8f04e98ua6kmfmkr7fe1b26rth&amp;lstPersistentId=120898648_611&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">
            email
        </a>
    </div>
            <div class="flex-item text-primary">
            <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=results&amp;type=clickmap&amp;sid=8f04e98ua6kmfmkr7fe1b26rth&amp;lstPersistentId=120898648_611&amp;page=4">
                mapa
        </a>
        </div>
    </div>

我怎样才能跳过 2 个第一个 div,然后选择第三个?

【问题讨论】:

  • 你试过调试吗?我的猜测是,这个标记是在客户端使用 JS 生成的,因此当您尝试使用 HTMLAgilityPack 解析它时,它不会出现在标记中。什么是 HtmlWeb?
  • @HaukurHaf web = {HtmlAgilityPack.HtmlWeb} 我下载了整个网站,我可以通过“查看页面源代码”看到这个,所以我可以“进入这个”:) 我需要找到为什么这不是工作。
  • 网站的网址是什么?
  • 我发现了我的问题。有 4 个相同的课程,我的课程选择了第一个。无论如何谢谢:)
  • HtmlAgilityPack 返回 null 在 SelectNodes 中没有找到任何内容时,而不是空列表。这会导致 foreach 失败

标签: c# html .net html-agility-pack


【解决方案1】:

您无需循环,只需使用数组和单节点即可:

        var node = _html.DocumentNode.SelectSingleNode("//div[@class='flex-item text-primary'][3]");
        Console.WriteLine(node.Attributes["data-original-title"].Value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多