导读:本期聚焦于小伙伴创作的《C#如何使用AngleSharp解析网页?解析网页的几种常见方法是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用AngleSharp解析网页?解析网页的几种常见方法是什么》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,使用AngleSharp解析网页可以高效处理HTML文档,实现数据提取、内容分析等需求,它支持标准的DOM操作,兼容大部分HTML规范,使用起来十分便捷。

C#如何使用AngleSharp解析网页?解析网页的几种常见方法是什么

环境准备

首先需要在项目中引入AngleSharp库,推荐使用NuGet包管理器进行安装,执行以下命令即可完成依赖添加:

Install-Package AngleSharp

加载网页文档

使用AngleSharp解析网页的第一步是加载目标HTML内容,既可以从本地字符串加载,也可以直接请求远程网页地址,以下是两种常见的加载方式:

从字符串加载HTML

using AngleSharp;
using AngleSharp.Dom;

class Program
{
    static void Main()
    {
        // 创建配置对象
        var config = Configuration.Default;
        // 创建上下文对象
        var context = BrowsingContext.New(config);
        // 待解析的HTML字符串
        string html = "<html><body><div class='content'>测试内容</div></body></html>";
        // 解析HTML得到文档对象
        IDocument document = context.OpenAsync(req => req.Content(html)).Result;
        // 输出文档标题
        Console.WriteLine(document.Title);
    }
}

请求远程网页加载

using AngleSharp;
using AngleSharp.Dom;

class Program
{
    static void Main()
    {
        var config = Configuration.Default.WithDefaultLoader();
        var context = BrowsingContext.New(config);
        // 请求远程网页,这里示例地址使用ipipp.com
        IDocument document = context.OpenAsync("https://ipipp.com").Result;
        Console.WriteLine(document.DocumentElement.OuterHtml);
    }
}

常见解析方法

通过CSS选择器查询节点

AngleSharp支持标准的CSS选择器语法,可以快速定位目标节点,这是最常用的解析方式之一:

using AngleSharp;
using AngleSharp.Dom;

class Program
{
    static void Main()
    {
        var config = Configuration.Default.WithDefaultLoader();
        var context = BrowsingContext.New(config);
        IDocument document = context.OpenAsync("https://ipipp.com").Result;
        // 选择所有class为item的div元素
        var items = document.QuerySelectorAll("div.item");
        foreach (var item in items)
        {
            Console.WriteLine(item.TextContent);
        }
        // 选择第一个a标签
        var firstLink = document.QuerySelector("a");
        if (firstLink != null)
        {
            Console.WriteLine("链接文本:" + firstLink.TextContent);
        }
    }
}

遍历DOM节点

当需要逐层处理文档结构时,可以通过遍历DOM节点的方式实现:

using AngleSharp;
using AngleSharp.Dom;

class Program
{
    static void Main()
    {
        var config = Configuration.Default;
        var context = BrowsingContext.New(config);
        string html = "<ul><li>选项1</li><li>选项2</li><li>选项3</li></ul>";
        IDocument document = context.OpenAsync(req => req.Content(html)).Result;
        // 获取ul元素
        var ulElement = document.QuerySelector("ul");
        if (ulElement != null)
        {
            // 遍历所有子节点
            foreach (var child in ulElement.Children)
            {
                Console.WriteLine("子节点内容:" + child.TextContent);
            }
        }
    }
}

提取节点属性与文本

获取节点的属性值和内部文本是解析网页的核心需求,以下是具体的实现方式:

using AngleSharp;
using AngleSharp.Dom;

class Program
{
    static void Main()
    {
        var config = Configuration.Default;
        var context = BrowsingContext.New(config);
        string html = "<div><a href='https://ipipp.com' title='示例链接'>点击跳转</a></div>";
        IDocument document = context.OpenAsync(req => req.Content(html)).Result;
        var link = document.QuerySelector("a");
        if (link != null)
        {
            // 获取href属性
            string href = link.GetAttribute("href");
            // 获取title属性
            string title = link.GetAttribute("title");
            // 获取节点内部文本
            string text = link.TextContent;
            Console.WriteLine($"链接地址:{href},标题:{title},文本:{text}");
        }
    }
}

注意事项

  • 解析远程网页时需要注意目标网站的robots协议,避免违规抓取数据
  • 如果网页内容是通过JavaScript动态加载的,AngleSharp默认无法解析动态内容,需要结合无头浏览器使用
  • 处理大量网页解析任务时,建议复用BrowsingContext对象,减少资源开销
  • 提取数据时要注意处理节点为空的情况,避免出现空引用异常

AngleSharpC#_网页解析HTML_DOM操作修改时间:2026-07-06 10:12:28

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。