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

来源:https://www.cnblogs.com/hanbing81868164/archive/2023/11/27/17856515.html
-Advertisement-
Play Games

HtmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文本轉換為DOM文檔對象,方便我們對HTML文本進行操作和分析。HtmlAgilityPack支持XPath語法,可以通過XPath表達式來獲取DOM節點,同時還提供了一些方便的API,可以實現HTML文本的解析、修 ...


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的基本用法,並可以根據需要自行擴展。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 簡介 谷歌文檔是一種協作文檔編輯服務。 協作文檔編輯服務可以通過兩種方式設計: 設計為C/S架構的集中式設施,為所有用戶提供文檔編輯服務 使用點對點技術設計,以便在單個文檔上協作 大多數商業解決方案側重於客戶端服務體繫結構,以實現更精細的控制。因此,我們將關註使用客戶端服務體繫結構設計服務。讓我 ...
  • Jinja2,由Flask框架的創作者開發,是一款功能豐富的模板引擎,以其完整的Unicode支持、靈活性、高效性和安全性而備受推崇。最初受Django模板引擎啟發,Jinja2為Flask提供了強大的模板支持,後來也成為其他項目的首選。在本文中,我們將深入探討Jinja2的特性、語法以及如何在Fl... ...
  • 類應該是被封裝的,類的用戶通過介面使用類提供的功能,而不必關心類的內部如何實現。然而,C++標準庫容器 std::vector 的實現滲透到了介面中來。對於以下代碼: const int pushNum = 10; std::vector<int> v = { 1,2,3 }; int* p = & ...
  • Bug1 自定義被限流的後續操作@SentinelResource(blockHandler = "blockHandler"),其中blockHandler處理函數不執行 前置條件 //定義的資源 @GetMapping("/resource") @SentinelResource(value = ...
  • 電腦安全和數據隱私是現代應用程式設計中至關重要的方面。為了確保數據的機密性和完整性,常常需要使用加密和解密演算法。C++是一種廣泛使用的編程語言,提供了許多加密和解密演算法的實現。本文將介紹一些在C++中常用的加密與解密演算法,這其中包括Xor異或、BASE64、AES、MD5、SHA256、RSA等。 ...
  • 位運算 題目背景 題目由 daiyulong20120222 創作(me) 並由 QBW1117完善以及數據 。 題目描述 給定兩個數\(x,y\) ,在給定一個位運算符號 \(c\)。 請你列出 \(x,y\) 進行 \(c\) 位運算是的算數豎式式。 註: 豎式這麼列: 顯示出兩個數的完整二進位 ...
  • 主要介紹了第一個Spring MVC程式的環境搭建、父子項目結構、Tomcat配置、配置文件。對DispatcherServlet的講解,2個核心類型:1.RequestMappingHandlerMapping 2.RequestMappingHandlerAdapter,視圖解析器ViewRes... ...
  • matplotlib是基於python生態開發的一個可視化繪圖庫,它的出現讓python在數據分析及機器學習方面占了重要的一部分,目前很多數據分析及機器學習相關方面的工程都有使用到這個庫,並且由於其簡單易用,安裝簡單等方面的優勢深得廣大開發者的喜愛。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...