C#HtmlAgilityPack类库再回顾

简介: C#HtmlAgilityPack类库再回顾

HtmlAgilityPack是一个开放源代码的类库,用于从HTML文档中提取数据或操作HTML文档。它可以被用来分析HTML文档,它的底层技术和.NET Framework类似,用于将HTML文档转换为XML文档,这让开发者可以使用XML DOM API提取文档内容。HtmlAgilityPack支持HTML5和CSS3。

在C#中,HtmlAgilityPack是非常流行的一种HTML解析器,可以方便地从HTML文档中提取数据,例如从一个网站抓取文章、新闻、图片等信息。

下面介绍一下HtmlAgilityPack的基本用法和功能。

安装和引用

HtmlAgilityPack 可以在 Visual Studio 中添加 NuGet 引用,也可以从 Github 上下载源代码手动添加到项目中。添加NuGet引用的方法:

  1. 在 Visual Studio 中,打开 NuGet 包管理器。
  2. 搜索 HtmlAgilityPack
  3. 选择你需要的版本并安装。

加载 HTML 页面

HtmlAgilityPack 提供了一个名为 HtmlDocument 的类,它用于读取和操作 HTML 页面。可以使用以下的代码创建一个 HtmlDocument 对象:

var htmlDoc = new HtmlDocument();

要加载 HTML 页面,需要使用 Load 或者 LoadHtml 方法:

htmlDoc.Load("file.htm");
htmlDoc.LoadHtml("<html><head><title>My test page</title></head><body>Hello world!</body></html>");

选择器

选择器是 HtmlAgilityPack 的一个重要特性,它让你能够轻易地从 HTML 页面中选择元素。就像 CSS 选择器一样,HtmlAgilityPack 的选择器也用于定位特定元素或元素组。

以下是一些 HtmlAgilityPack 的选择器示例:

var htmlNode = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='header']");
var nodes = htmlDoc.DocumentNode.SelectNodes("//a[@href]");

第一行代码使用了 SelectSingleNode 方法选择一个具有 class 属性的 div 元素。如果你了解过XPath,那么你对上面的语法应该并不陌生。如果不了解,可以简单理解为 // 表示任何节点,[@class='header'] 表示某个属性具有 header 值的元素。

第二行代码用 SelectNodes 选择在 href 属性中包含链接的所有 a 元素。此方法返回 HtmlNodeCollection,其中包含匹配选择器表达式的所有元素。

选择器使用方法和css选择器类似。所以它们可以被分成以下几种类型:

  • 元素选择器

这种选择器使用元素名称作为选择器。例如,要选择一个 div 元素,使用以下代码行:

var node = htmlDoc.DocumentNode.SelectSingleNode("//div");
  • 类选择器

用于选择具有某个特定 class 属性的所有元素,如下所示:

var nodes = htmlDoc.DocumentNode.SelectNodes("//div[@class='section']");

以上代码行选择所有样式类为 section 的 div 元素。

  • ID 选择器

使用ID 选择器可以选择具有特定ID属性的元素。例如,要选择元素具有 ID 属性的名称为 “my-id” 的元素,使用以下代码:

var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='my-id']");
  • 属性选择器

如果您需要选择拥有特定属性的元素,您可以使用属性选择器。以下是一个示例,选择 a 元素的 href 属性具有值的链接:

var nodes = htmlDoc.DocumentNode.SelectNodes("//a[@href]");

根据条件查找元素

元素查找器的另一个重要方面是能够查找具有特定条件的元素。以下是一些示例:

  • 仅选择第一个元素:
var node = htmlDoc.DocumentNode.SelectSingleNode("//div");
  • 选择第二个元素:
var node = htmlDoc.DocumentNode.SelectNodes("//div")[1];
  • 选择以“test”开头的所有元素:
var nodes = htmlDoc.DocumentNode.SelectNodes("//*[starts-with(@id, 'test')]");
  • 筛选出所有至少有一个子元素的 div 元素:
var nodes = htmlDoc.DocumentNode.SelectNodes("//div[child::node()]");

获取元素属性和文本

一旦您获得了所需的元素,就可以使用 OuterHtmlInnerHtmlInnerText 关键字访问元素的 HTML 内容和文本内容。例如:

foreach (HtmlNode link in links)
{
    var href = link.Attributes["href"].Value;
    var text = link.InnerText;
    Console.WriteLine("Link URL: " + href);
    Console.WriteLine("Link Text: " + text);
}

以上代码行输出链接的 URL 和文本。

修改元素

使用 HtmlAgilityPack,您可以更改元素的文本内容或属性。例如,要更改元素的文本,可以使用以下代码:

var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='header']");
node.InnerHtml = "New header text.";

总结

HtmlAgilityPack 是一个非常有用的工具,它可以轻松地从 HTML 页面中提取数据或操作 HTML 页面,帮助我们快速开发出能够处理 HTML 页面的应用程序。掌握了本文介绍的基本用法和功能,相信您已经可以轻松地开始使用 HtmlAgilityPack了。


相关文章
|
2月前
|
C#
Delphi可不可以制作出像c#那样的dll类库?
在Delphi中,创建DLL项目(如dll.dpr)并定义一个类TMyCls后,在另一个项目(如test.dpr)中可以引入此DLL并直接实例化和调用类的方法。然而,Delphi目前主要支持两种DLL形式:动态链接库(需显式声明exports,仅支持函数调用)和ActiveX DLL(需定义IDL接口)。这两种方式都较为繁琐。相比之下,C# 的DLL类库更为便捷,编写并编译后即可在其他项目中直接使用。
|
6月前
|
算法 C#
C#开源实用的工具类库,集成超过1000多种扩展方法
C#开源实用的工具类库,集成超过1000多种扩展方法
|
7月前
|
数据采集 API C#
网页解析高手:C#和HtmlAgilityPack教你下载视频
使用C#和HtmlAgilityPack解析小红书网页,下载其视频内容。文章涵盖了解析网页、获取视频链接、C#实现、HtmlAgilityPack简化解析、代理IP确保下载稳定及多线程提高下载效率。提供的代码示例展示了如何设置代理和多线程下载视频。实验结果显示,该方法能有效、高效地下载小红书视频。
130 5
网页解析高手:C#和HtmlAgilityPack教你下载视频
|
7月前
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
222 0
|
数据采集 开发框架 前端开发
使用C#和HtmlAgilityPack打造强大的Snapchat视频爬虫
Snapchat作为一款备受欢迎的社交媒体应用,允许用户分享照片和视频。然而,由于其特有的内容自动消失特性,爬虫开发面临一些挑战。本文将详细介绍如何巧妙运用C#和HtmlAgilityPack库,构建一个高效的Snapchat视频爬虫。该爬虫能够从Snapchat网页版中提取视频链接,并将其下载保存到本地。为了提升爬虫的效率和可靠性,我们将使用代理IP技术和多线程技术,以规避Snapchat的反爬机制。
|
C#
56【WinForm】WinForm创建类库项目,并同时在项目中调用类库文件C#
【WinForm】WinForm创建类库项目,并同时在项目中调用类库文件C#
246 0
|
存储 安全 API
10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)
10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)
|
开发框架 移动开发 前端开发
如何使用C#和HTMLAgilityPack抓取网页
HTMLAgilityPack是一款备受欢迎的用于解析和操作HTML文档的库。在使用之前,开发者需要考虑一些优缺点。下面是一些值得注意的优点: 1. 强大的错误容忍性 2. 灵活的API 3. 广泛的应用场景 然而,也有一些缺点需要考虑: 1. 性能问题 2. 对最新HTML特性的支持限制 3. 可能存在依赖和冲突
130 0
|
C# 图形学 C++
Unity与 DLL文件 ☀️| 怎样使用 C# 类库 生成一个DLL文件 并 调用!
📢前言 🎬生成DLL文件 🎥使用 C#类库 将Unity中的脚本打包成 DLL文件 并调用 🏳️‍🌈第一步:打开Visual Studio之后,新建一个项目 🏳️‍🌈第二步:选择类库(.NET Framework),改个名字,选择一个位置路径 🏳️‍🌈第三步:然后在创建的脚本中简单写一点代码,如下所示 🏳️‍🌈第四步:然后在解决方案资源管理器右键这个脚本 -> 添加 -> 引用 🏳️‍🌈第五步:然后点击浏览,找到Unity安装路径 -> Editor -> Data -> Managed 下的这两个DLL 文件,点击添加!
Unity与 DLL文件 ☀️| 怎样使用 C# 类库 生成一个DLL文件 并 调用!
|
C# C++
C# 创建与引用dll类库项目实战
本文目录 1. 类的访问修饰符 2. 新建类库项目 3. 编辑类代码 4. 编译并生成dll文件 5. 调用该dll
373 0
C# 创建与引用dll类库项目实战