C# (.NET) 中的 HTML 解析:库概述与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 中的 HTML 解析:从简单到复杂



HTML 解析是开发网页抓取器、内容分析器和自动化工具时的关键任务之一。在 C# (.NET) 生态系统中,有多个成熟的库可以高效地从 HTML 文档中提取数据,即使标记无效也能处理。在本文中,我们将介绍三种最流行的工具:HtmlAgilityPack、AngleSharp 和 CsQuery,并通过实际示例讲解它们的使用方法。



1. HtmlAgilityPack — 经典之选



HtmlAgilityPack (HAP) 是 C# 中最常用的 HTML 解析库。它支持 XPath 和 LINQ,非常适合处理层次结构。HAP 会自动修复无效的 HTML 标记,这在解析“原始”页面时尤其有用。



通过 NuGet 安装:

Install-Package HtmlAgilityPack


示例:从页面中提取所有链接

using HtmlAgilityPack;

string url = "https://example.com";var web = new HtmlWeb();var doc = web.Load(url);

var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); string text = link.InnerText.Trim(); Console.WriteLine($"{text}: {href}"); }}


示例:从表格中提取数据

var tableRows = doc.DocumentNode.SelectNodes("//table[@id='data-table']//tr");foreach (var row in tableRows){    var cells = row.SelectNodes("td");    if (cells != null)    {        var rowData = cells.Select(c => c.InnerText.Trim()).ToList();        Console.WriteLine(string.Join(" | ", rowData));    }}


2. AngleSharp — 现代替代方案



AngleSharp 是一个更现代的库,完全用 C# 编写,符合 W3C 规范。它支持 CSS 选择器,对于习惯 jQuery 风格语法的人来说非常方便。AngleSharp 还可以处理 DOM、SVG 和 MathML。



通过 NuGet 安装:

Install-Package AngleSharp


示例:使用 CSS 选择器进行解析

using AngleSharp;using AngleSharp.Dom;

var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");

// 获取所有 class 为 "product" 的元素var products = document.QuerySelectorAll(".product");foreach (var product in products){ var name = product.QuerySelector(".product-name")?.TextContent.Trim(); var price = product.QuerySelector(".product-price")?.TextContent.Trim(); Console.WriteLine($"{name}: {price}");}


示例:从脚本中提取 JSON

var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){    var json = script.TextContent;    // 接下来可以通过 System.Text.Json 反序列化 JSON    Console.WriteLine(json);}


3. CsQuery — jQuery 风格语法



CsQuery 是 jQuery 在 C# 中的移植版本,提供了熟悉的 DOM 操作 API。它特别适合从 JavaScript 迁移到 C# 的开发者。但需要注意的是,该项目的更新频率低于 AngleSharp,可能不支持最新的 .NET 版本。



通过 NuGet 安装:

Install-Package CsQuery


示例:从元素中提取文本

using CsQuery;

string html = "<div class='content'><p>你好,世界!</p></div>";var dom = CQ.Create(html);

var text = dom[".content

推荐