.net下功能強大的HTML解析庫HtmlAgilityPack,資料抓取必備

寒冰2023發表於2023-11-27

HtmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文字轉換為DOM文件物件,方便我們對HTML文字進行操作和分析。HtmlAgilityPack支援XPath語法,可以透過XPath表示式來獲取DOM節點,同時還提供了一些方便的API,可以實現HTML文字的解析、修改、生成等功能。本文將詳細介紹HtmlAgilityPack的使用及使用方法。

一、HtmlAgilityPack的安裝

HtmlAgilityPack是一個NuGet包,可以透過Visual Studio的NuGet包管理器來安裝。具體步驟如下:

  1. 開啟Visual Studio,開啟要安裝HtmlAgilityPack的專案。
  2. 在“解決方案資源管理器”中右鍵單擊專案,選擇“管理NuGet程式包”。
  3. 在“NuGet程式包管理器”中搜尋“HtmlAgilityPack”,選擇“安裝”。
  4. 等待安裝完成。

安裝完成後,就可以在專案中使用HtmlAgilityPack了。

二、HtmlAgilityPack的使用

  1. 載入HTML文字

使用HtmlAgilityPack解析HTML文字的第一步是將HTML文字載入到一個HtmlDocument物件中。可以透過以下程式碼來實現:

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

其中,htmlText是要解析的HTML文字。LoadHtml方法會將HTML文字解析成一個DOM文件物件,並儲存在doc物件中。

  1. 獲取DOM節點

HtmlAgilityPack提供了一些方法來獲取DOM節點,例如GetElementById、GetElementsByTagName、SelectSingleNode、SelectNodes等。這些方法都接受一個XPath表示式作為引數,用來指定要獲取的節點。以下是一些示例程式碼:

// 獲取id為"content"的節點
HtmlNode contentNode = doc.GetElementById("content");

// 獲取所有的a標籤
HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");

// 獲取第一個p標籤
HtmlNode pNode = doc.DocumentNode.SelectSingleNode("//p");

其中,XPath表示式的語法與XML的XPath語法相同。在這裡不再詳細介紹。

  1. 修改DOM節點

HtmlAgilityPack提供了一些方法來修改DOM節點,例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例程式碼:

// 修改id為"content"的節點的class屬性
contentNode.SetAttributeValue("class", "new-class");

// 修改第一個p標籤的內容
pNode.InnerHtml = "這是新的內容";

// 修改第一個a標籤的href屬性
HtmlNode aNode = aNodes[0];
aNode.SetAttributeValue("href", "http://www.example.com");
  1. 生成HTML文字

HtmlAgilityPack還可以將DOM文件物件轉換為HTML文字。可以透過以下程式碼來實現:

string newHtmlText = doc.DocumentNode.OuterHtml;

其中,OuterHtml屬性返回DOM文件物件的HTML文字表示。

三、HtmlAgilityPack的功能例項

下面將透過一些具體的例項來演示HtmlAgilityPack的使用方法。

  1. 獲取頁面標題

以下程式碼演示瞭如何獲取頁面標題:

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

HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
string title = titleNode.InnerHtml;

其中,htmlText是要解析的HTML文字。首先,將HTML文字載入到一個HtmlDocument物件中。然後,透過XPath表示式“//title”獲取頁面標題節點。最後,透過InnerHtml屬性獲取標題的內容。

  1. 獲取頁面中的所有圖片

以下程式碼演示瞭如何獲取頁面中的所有圖片:

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

HtmlNodeCollection imgNodes = doc.DocumentNode.SelectNodes("//img");
foreach (HtmlNode imgNode in imgNodes)
{
    string src = imgNode.GetAttributeValue("src", "");
    Console.WriteLine(src);
}

首先,將HTML文字載入到一個HtmlDocument物件中。然後,透過XPath表示式“//img”獲取所有圖片節點。最後,遍歷所有圖片節點,獲取每個節點的src屬性。

  1. 獲取頁面中的所有連結

以下程式碼演示瞭如何獲取頁面中的所有連結:

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

HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");
foreach (HtmlNode aNode in aNodes)
{
    string href = aNode.GetAttributeValue("href", "");
    Console.WriteLine(href);
}

首先,將HTML文字載入到一個HtmlDocument物件中。然後,透過XPath表示式“//a”獲取所有連結節點。最後,遍歷所有連結節點,獲取每個節點的href屬性。

  1. 修改頁面中的所有連結

以下程式碼演示瞭如何將頁面中的所有連結修改為指定的連結:

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

HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");
foreach (HtmlNode aNode in aNodes)
{
    aNode.SetAttributeValue("href", "http://www.example.com");
}

string newHtmlText = doc.DocumentNode.OuterHtml;

首先,將HTML文字載入到一個HtmlDocument物件中。然後,透過XPath表示式“//a”獲取所有連結節點。最後,遍歷所有連結節點,將它們的href屬性修改為指定的連結。最後,透過OuterHtml屬性將修改後的DOM文件物件轉換為HTML文字。

本文介紹了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一個功能強大、易用性高的HTML解析庫,可以方便地對HTML文字進行操作和分析。透過本文的介紹,讀者可以瞭解HtmlAgilityPack的基本用法,並可以根據需要自行擴充套件。

 

相關文章