You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C# HtmlAgilityPack提取网页指定结构中的‘223M’文本

使用C#的HtmlAgilityPack提取指定文本的实现方法

准备工作

先通过NuGet安装HtmlAgilityPack包:

  • 打开NuGet包管理器控制台,执行命令:Install-Package HtmlAgilityPack
  • 或者在Visual Studio的NuGet包管理器中搜索“HtmlAgilityPack”完成安装

实现思路

目标文本“223M”位于data-id="net_premium"的<div>容器内的<h3>标签中。如果直接通过data-app="summary-value"定位,会拿到第一个<h3>的“Bullish”,所以更准确的方式是先定位到data-id="net_premium"的容器,再提取其中的<h3>文本。

代码实现

方式1:使用XPath定位

using HtmlAgilityPack;
using System;

class Program
{
    static void Main()
    {
        // 待解析的HTML内容
        string html = @"<div data-widget=""quote-options-flow-summary"" data-mode=""desktop"" data-symbol=""AAPL"">
    <div class=""options-flow-summary"">
        <div data-app=""summary-element"" data-id=""overall_flow"">
            <h2 class=""summary-type"">
                Overall Flow
                <i class=""fas fa-info-circle"" title=""Determined based on positive or negative net premiums."">
                </i>
            </h2>
            <h3 data-app=""summary-value"" style=""color:#009c3d"">
                Bullish
            </h3>
        </div>
        <div data-app=""summary-element"" data-id=""net_premium"">
            <h2 class=""summary-type"">
                Net Premium
                <i class=""fas fa-info-circle"" title=""Calculated value of calls premium minus put premium in the filtered Flow."">
                </i>
            </h2>
            <h3 data-app=""summary-value"" style=""color:#009c3d"">
                223M
            </h3>
        </div>
    </div>
</div>";

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);

        // 用XPath定位目标h3标签
        HtmlNode targetNode = doc.DocumentNode.SelectSingleNode("//div[@data-id='net_premium']//h3[@data-app='summary-value']");
        
        if (targetNode != null)
        {
            // 去除文本中的换行和多余空格
            string result = targetNode.InnerText.Trim();
            Console.WriteLine(result); // 输出:223M
        }
        else
        {
            Console.WriteLine("未找到目标元素");
        }
    }
}

方式2:使用LINQ查询

using HtmlAgilityPack;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string html = @"[此处粘贴上述HTML内容]";

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);

        // 先定位到data-id为net_premium的div,再查找内部的h3标签
        var targetNode = doc.DocumentNode
            .Descendants("div")
            .FirstOrDefault(d => d.GetAttributeValue("data-id", "") == "net_premium")?
            .Descendants("h3")
            .FirstOrDefault(h => h.GetAttributeValue("data-app", "") == "summary-value");
        
        if (targetNode != null)
        {
            string result = targetNode.InnerText.Trim();
            Console.WriteLine(result); // 输出:223M
        }
        else
        {
            Console.WriteLine("未找到目标元素");
        }
    }
}

关键说明

  • 优先通过data-id="net_premium"定位容器,是因为这个属性唯一对应“Net Premium”模块,避免和其他模块的同属性标签混淆
  • 使用Trim()方法是为了去除HTML中换行、缩进带来的多余空白字符
  • 两种方式都做了空值判断,防止找不到元素时出现空引用异常

内容的提问来源于stack exchange,提问作者Yu Deng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:21:07