首页 / C# / 正文

C#&.NET Core好用的HTML解析器推荐之AngleSharp篇

1648 发布于: 2023-02-18 读完约需13分钟

概述

AngleSharp是一个开源的.NET标准库,用于解析HTML和 XML 文档。它由Daniel Cazzulino创建,并由其维护。AngleSharp具有丰富的功能,支持DOM操作CSS选择器、XPath表达式、HTML5等级和文档类型声明,以及其他功能。AngleSharp的目标是提供一个跨浏览器的解决方案,以帮助.NET开发人员轻松处理复杂的HTML和XML文档。

AngleSharp的托管地址是:https://anglesharp.github.io

为什么要使用AngleSharp?

使用AngleSharp可以简化HTML和XML文档的解析和处理过程。它提供了一种方便的方式来查询和操作文档对象模型(DOM)并使用 CSS选择器或XPath表达式来选择元素。

使用AngleSharp还可以消除浏览器之间的差异,使解析和处理文档的过程更加一致和可靠。AngleSharp还支持异步加载文档,因此可以在解析大型文档时提高性能。

AngleSharp的性能如何?

AngleSharp的性能取决于解析的文档的大小和复杂性。对于小型文档和简单的查询操作AngleSharp的性能非常好。对于大型文档和复杂的查询操作,AngleSharp的性能可能会有所下降。但是,AngleSharp提供了一些优化选项,如异步加载和缓存,可以帮助提高性能。

AngleSharp从URL加载HTML文档并解析

以下是一个使用AngleSharp从URL加载HTML文档并解析其中所有a标签的示例代码:

using System;
using AngleSharp;
using AngleSharp.Dom;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var config = Configuration.Default.WithDefaultLoader();
        var address = "https://www.example.com";
        var document = await BrowsingContext.New(config).OpenAsync(address);
        var links = document.QuerySelectorAll("a");
        foreach (var link in links)
        {
            Console.WriteLine(link.GetAttribute("href"));
        }
    }
}

这个示例首先创建一个AngleSharp的配置,然后使用默认加载器创建一个浏览上下文。然后,它使用浏览上下文的OpenAsync方法异步加载指定地址的HTML文档。最后,它使用文档的QuerySelectorAll方法选择所有的a标签,并使用GetAttribute方法获取每个标签的href属性并输出到控制台。

AngleSharp操作标签属性示例

以下是一个使用AngleSharp修改HTML文档中指定标签的某个属性值的示例代码:

using System;
using AngleSharp;
using AngleSharp.Dom;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var config = Configuration.Default.WithDefaultLoader();
        var address = "https://www.example.com";
        var document = await BrowsingContext.New(config).OpenAsync(address);
        var image = document.QuerySelector("img");
        image.SetAttribute("src", "https://www.example.com/new-image.jpg");
        Console.WriteLine(document.DocumentElement.OuterHtml);
    }
}

这个示例首先创建一个AngleSharp的配置,然后使用默认加载器创建一个浏览上下文。它使用浏览上下文的OpenAsync方法异步加载指定地址的HTML文档。接着调用文档的QuerySelector方法选择第一个img标签,并使用SetAttribute方法将其src属性设置为新的URL。最后,它输出修改后的文档的HTML代码到控制台。

AngleSharp详细示例

以下是一个更详细的AngleSharp示例,它演示了如何从HTML加载HTML文档、查询DOM中的元素、修改元素属性、添加新元素和删除元素。

using System;
using System.Linq;
using AngleSharp;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;
using AngleSharp.Html.Parser;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // 从URL加载文档
        var config = Configuration.Default.WithDefaultLoader();
        var address = "https://www.example.com";
        var document = await BrowsingContext.New(config).OpenAsync(address);
        // Select an element by ID
        var title = document.QuerySelector("#title");
        Console.WriteLine(title.TextContent);

        // 通过css的class类名选择所有匹配的元素
        var paragraphs = document.QuerySelectorAll(".paragraph");
        foreach (var paragraph in paragraphs)
        {
            Console.WriteLine(paragraph.TextContent);
        }

        // 获取指定元素(img)
        var logo = document.QuerySelector("img");
        logo.SetAttribute("src", "https://www.example.com/new-logo.png");

        // 向文档添加HTML元素
        var parser = new HtmlParser();
        var newElementHtml = "<div class=\"new-div\"><p>New content</p></div>";
        var newElement = parser.ParseFragment(newElementHtml).First();
        document.Body.AppendChild(newElement);

        // 从HTML文档删除元素
        var unwantedElement = document.QuerySelector(".unwanted-div");
        if (unwantedElement != null)
        {
            unwantedElement.Remove();
        }

        // 输出修改后的HTML文档到控制台
        Console.WriteLine(document.DocumentElement.OuterHtml);
    }
}

这个示例首先创建一个AngleSharp的配置,然后使用默认加载器创建一个浏览上下文。它使用浏览上下文的OpenAsync方法异步加载指定地址的HTML文档。示例中使用AngleSharp完成了如下的HTML文档操作:

  • 使用QuerySelector方法选择IDtitle的元素,并输出它的文本内容。
  • 使用QuerySelectorAll方法选择所有类名为paragraph的元素,并输出它们的文本内容。
  • 使用QuerySelector方法选择第一个img标签,并使用SetAttribute方法将其src属性设置为新的URL。
  • 创建一个HtmlParser对象,并使用ParseFragment方法将HTML代码转换为DOM元素,并将新元素添加到文档的主体中。
  • 最后,使用QuerySelector方法选择类名为unwanted-div的元素,如果存在则将其删除。

结论

AngleSharp是一个功能强大的HTML解析器和 DOM 操作库,它提供了简单易用的 API 和丰富的功能,使得解析和操作HTML文档变得轻松愉悦。它支持各种HTML版本、浏览器兼容模式和特殊用途的HTML标记,可以轻松处理各种情况下的HTML文档。

此外,AngleSharp还具有优秀的性能,可以在短时间内处理大量的HTML文档。通过使用 AngleSharp,您可以轻松解析和操作HTML文档,从而使您的项目变得更加高效和灵活。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: C#&.NET Core(.NET 7)应用程序开发中如何解析html元素,有哪些类库或组件呢?

下一篇: C#&.NET Core好用的HTML解析器推荐之HtmlAgilityPack篇

本文永久链接码友网 » C#&.NET Core好用的HTML解析器推荐之AngleSharp篇

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册