首页 / C# / 正文

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

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

概述

HtmlAgilityPack是一个用于解析HTML文档的C#&.NET, .NET Core库。它提供了一种方便的方式来从HTML文档中提取数据和操作文档结构。

HtmlAgilityPack主页地址是:html-agility-pack.net

为什么要使用HtmlAgilityPack?

在处理HTML文档时,您可能需要从中提取数据或者修改文档的结构。如果您尝试手动解析HTML文档,您将需要编写大量的代码来解析文档,提取所需的数据,并执行任何必要的更改。HtmlAgilityPack可以大大简化这个过程,因为它提供了一个方便的API来解析和操作HTML文档。

HtmlAgilityPack的性能如何?

HtmlAgilityPack的性能比较好,因为它使用了一些高效的算法来解析HTML文档。它还提供了一些可配置的选项,可以帮助您优化性能,例如可以选择使用缓存或者禁用节点解析。

HtmlAgilityPack从URL加载文档并解析标签的示例

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

using HtmlAgilityPack;
using System;

class Program
{
    static void Main(string[] args)
    {
        // 从URL加载HTML文档
        var url = "https://www.example.com";
        var web = new HtmlWeb();
        var doc = web.Load(url);

        // 获取所有的a标签
        var aTags = doc.DocumentNode.Descendants("a");

        // 打印每个a标签的href属性值
        foreach (var aTag in aTags)
        {
            Console.WriteLine(aTag.Attributes["href"].Value);
        }
    }
}

这段代码首先使用HtmlWeb类从URL加载HTML文档。然后它使用DocumentNode属性来获取文档的根节点。最后,它使用Descendants方法来获取文档中所有的a标签,然后遍历每个a标签并打印href属性值。

HtmlAgilityPack修改文档指定标签属性值示例

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

using HtmlAgilityPack;
using System;

class Program
{
    static void Main(string[] args)
    {
        // 从HTML字符串中加载HTML文档
        var html = "<html><body><a href='https://www.example.com'>Example</a></body></html>";
        var doc = new HtmlDocument();
        doc.LoadHtml(html);

        // 获取要修改的a标签并修改href属性值
        var aTag = doc.DocumentNode.Descendants("a").FirstOrDefault();
        if (aTag != null)
        {
            aTag.Attributes["href"].Value = "https://www.google.com";
        }

        // 打印修改后的HTML文档
        Console.WriteLine(doc.DocumentNode.OuterHtml);
    }
}

这段代码使用HtmlDocument类从HTML字符串中加载HTML文档。然后它使用DocumentNode属性获取文档的根节点,并使用Descendants方法获取文档中所有的a标签。

接着,使用LINQ的FirstOrDefault方法获取第一个a标签,并使用Attributes属性来访问href属性,并修改其值。最后,使用DocumentNodeOuterHtml属性打印修改后的HTML文档。

HtmlAgilityPack详细示例

下面是一个更完整、详细的示例,演示如何使用HtmlAgilityPack从HTML文档中提取数据和修改文档的结构。

这个示例从一个本地HTML文件中加载HTML文档,并解析出其中的标题、段落和图片。然后,使用HtmlAgilityPack修改文档结构,删除一个段落,并添加一个新的段落并保存修改后的HTML文档。

using HtmlAgilityPack;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // 从本地文件加载HTML文档
        var path = "example.html";
        var doc = new HtmlDocument();
        doc.Load(path);

        // 获取标题、段落和图片
        var title = doc.DocumentNode.Descendants("title").FirstOrDefault()?.InnerText;
        var paragraphs = doc.DocumentNode.Descendants("p");
        var images = doc.DocumentNode.Descendants("img");

        // 打印标题、段落和图片
        Console.WriteLine("Title: " + title);
        Console.WriteLine("Paragraphs:");
        foreach (var paragraph in paragraphs)
        {
            Console.WriteLine(" - " + paragraph.InnerText);
        }
        Console.WriteLine("Images:");
        foreach (var image in images)
        {
            Console.WriteLine(" - " + image.Attributes["src"].Value);
        }

        // 删除第一个段落并添加新的段落
        var firstParagraph = paragraphs.FirstOrDefault();
        if (firstParagraph != null)
        {
            firstParagraph.Remove();
        }
        var newParagraph = doc.CreateElement("p");
        newParagraph.InnerHtml = "This is a new paragraph.";
        doc.DocumentNode.SelectSingleNode("//body").PrependChild(newParagraph);

        // 保存修改后的HTML文档
        var outputPath = "modified.html";
        doc.Save(outputPath);
    }
}

以上代码使用HtmlAgilityPack完成的HTML文档操作如下:

  • 使用HtmlDocument类的实例方法Load()从本地文件加载HTML文档。
  • 调用Descendants()方法获取文档中所有的标题、段落和图片。
  • 遍历每个标题、段落和图片,并打印其内容或属性值。
  • 调用LINQ的FirstOrDefault()方法获取第一个段落,并使用Remove()方法删除它。
  • 创建一个新的段落元素,并使用CreateElement()方法创建一个新的p标签。
  • 调用InnerHtml属性设置新的段落内容,并使用PrependChild()方法将其添加到body元素的开头。
  • 调用HtmlDocumentSave()方法将修改后的HTML文档保存到文件中。

在本文中,我们介绍了HtmlAgilityPack的概述,包括它的介绍、网址、使用场景以及性能。我们还提供了一些示例,演示了如何使用HtmlAgilityPack从URL加载HTML文档并解析其中所有的a标签,如何修改HTML文档中指定标签的某个属性值,以及如何从HTML文档中提取数据和修改文档结构。

总结

HtmlAgilityPack是一个强大的.NET(.NET Core)库,提供了一种方便的方式来解析和操作HTML文档。它的性能很好,可以快速处理大型HTML文档,并提供了许多有用的方法和属性来提取和修改HTML文档中的元素。

使用HtmlAgilityPack,您可以轻松地从HTML文档中提取数据,并进行必要的更改,而无需手动解析HTML标记和属性。

如果您需要处理HTML文档并提取或修改其中的元素,HtmlAgilityPack是一个非常有用的工具。它易于使用,灵活性高,并且可以处理各种大小和复杂度的HTML文档。

无论您是开发.NET, .NET Core Web应用程序、爬虫或数据分析工具,HtmlAgilityPack都是一种值得考虑的库。

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

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

下一篇: C#&.NET程序中使用Flurl的用法与问题汇总(非常详细)

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

分享扩散:

发表评论

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