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

环境准备
首先需要在项目中引入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