服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - ASP.NET教程 - .NET下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备

.NET下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备

2023-12-29 14:06架构师老卢 ASP.NET教程

本文介绍了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一个功能强大、易用性高的HTML解析库,可以方便地对HTML文本进行操作和分析。通过本文的介绍,读者可以了解HtmlAgilityPack的基本用法,并可以根据需要自行扩展。

.NET下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备

HtmlAgilityPack是一个.NET平台下的HTML解析库,它可以将HTML文本转换为DOM文档对象,方便我们对HTML文本进行操作和分析。HtmlAgilityPack支持XPath语法,可以通过XPath表达式来获取DOM节点,同时还提供了一些方便的API,可以实现HTML文本的解析、修改、生成等功能。本文将详细介绍HtmlAgilityPack的使用及使用方法。

一、HtmlAgilityPack的安装

HtmlAgilityPack是一个NuGet包,可以通过Visual Studio的NuGet包管理器来安装。具体步骤如下:

  • 打开Visual Studio,打开要安装HtmlAgilityPack的项目。
  • 在“解决方案资源管理器”中右键单击项目,选择“管理NuGet程序包”。
  • 在“NuGet程序包管理器”中搜索“HtmlAgilityPack”,选择“安装”。
  • 等待安装完成。

安装完成后,就可以在项目中使用HtmlAgilityPack了。

二、HtmlAgilityPack的使用

1、加载HTML文本

使用HtmlAgilityPack解析HTML文本的第一步是将HTML文本加载到一个HtmlDocument对象中。可以通过以下代码来实现:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);

其中,htmlText是要解析的HTML文本。LoadHtml方法会将HTML文本解析成一个DOM文档对象,并存储在doc对象中。

2、获取DOM节点

HtmlAgilityPack提供了一些方法来获取DOM节点,例如GetElementById、GetElementsByTagName、SelectSingleNode、SelectNodes等。这些方法都接受一个XPath表达式作为参数,用来指定要获取的节点。以下是一些示例代码:

  1. // 获取id为"content"的节点 
  2. HtmlNode contentNode = doc.GetElementById("content"); 
  3.  
  4. // 获取所有的a标签 
  5. HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a"); 
  6.  
  7. // 获取第一个p标签 
  8. HtmlNode pNode = doc.DocumentNode.SelectSingleNode("//p"); 

其中,XPath表达式的语法与XML的XPath语法相同。在这里不再详细介绍。

3、修改DOM节点

HtmlAgilityPack提供了一些方法来修改DOM节点,例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例代码:

  1. // 修改id为"content"的节点的class属性 
  2. contentNode.SetAttributeValue("class""new-class"); 
  3.  
  4. // 修改第一个p标签的内容 
  5. pNode.InnerHtml = "这是新的内容"
  6.  
  7. // 修改第一个a标签的href属性 
  8. HtmlNode aNode = aNodes[0]; 
  9. aNode.SetAttributeValue("href""http://www.example.com"); 

4、生成HTML文本

HtmlAgilityPack还可以将DOM文档对象转换为HTML文本。可以通过以下代码来实现:

  1. string newHtmlText = doc.DocumentNode.OuterHtml; 

其中,OuterHtml属性返回DOM文档对象的HTML文本表示。

三、HtmlAgilityPack的功能实例

下面将通过一些具体的实例来演示HtmlAgilityPack的使用方法。

1、获取页面标题

以下代码演示了如何获取页面标题:

  1. HtmlDocument doc = new HtmlDocument(); 
  2. doc.LoadHtml(htmlText); 
  3.  
  4. HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title"); 
  5. string title = titleNode.InnerHtml; 

其中,htmlText是要解析的HTML文本。首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//title”获取页面标题节点。最后,通过InnerHtml属性获取标题的内容。

2、获取页面中的所有图片

以下代码演示了如何获取页面中的所有图片:

  1. HtmlDocument doc = new HtmlDocument(); 
  2. doc.LoadHtml(htmlText); 
  3.   
  4. HtmlNodeCollection imgNodes = doc.DocumentNode.SelectNodes("//i mg"); 
  5. foreach (HtmlNode imgNode in imgNodes) 
  6.     string src = imgNode.GetAttributeValue("s rc"""); 
  7.     Console.WriteLine(src); 

首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//img”获取所有图片节点。最后,遍历所有图片节点,获取每个节点的src属性。

3、获取页面中的所有链接

以下代码演示了如何获取页面中的所有链接

  1. HtmlDocument doc = new HtmlDocument(); 
  2. doc.LoadHtml(htmlText); 
  3.  
  4. HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("// a"); 
  5. foreach (HtmlNode aNode in aNodes) 
  6.     string href = aNode.GetAttributeValue("h ref"""); 
  7.     Console.WriteLine(href); 

首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//a”获取所有链接节点。最后,遍历所有链接节点,获取每个节点的href属性。

4、修改页面中的所有链接

以下代码演示了如何将页面中的所有链接修改为指定的链接:

  1. HtmlDocument doc = new HtmlDocument(); 
  2. doc.LoadHtml(htmlText); 
  3.  
  4. HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a"); 
  5. foreach (HtmlNode aNode in aNodes) 
  6.     aNode.SetAttributeValue("href""http://www.example.com"); 
  7.  
  8. string newHtmlText = doc.DocumentNode.OuterHtml; 

首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//a”获取所有链接节点。最后,遍历所有链接节点,将它们的href属性修改为指定的链接。最后,通过OuterHtml属性将修改后的DOM文档对象转换为HTML文本。

本文介绍了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一个功能强大、易用性高的HTML解析库,可以方便地对HTML文本进行操作和分析。通过本文的介绍,读者可以了解HtmlAgilityPack的基本用法,并可以根据需要自行扩展。

原文地址:https://www.toutiao.com/article/7291435912494924322/

延伸 · 阅读

精彩推荐