用Anglesharp解析和操作HTML文檔

一、Anglesharp簡介

Anglesharp是一個純C#的HTML解析器,提供一個友好的API,幫助用戶在.NET平台中解析和操作HTML文檔。與其他.NET平台的HTML解析器相比,Anglesharp的語法更加簡單易懂,使用也更加方便,支持從根本上修改DOM。

如果你需要獲取一個HTML文件中某個DOM元素的內容或者屬性,或者需要在服務器端分析HTML文檔並做進一步處理,Anglesharp將是一個不錯的選擇。

二、在項目中引用Anglesharp

在使用Anglesharp之前,需要將其添加到項目中。你可以通過NuGet下載Anglesharp包,也可以通過官方GitHub下載源代碼並使用。這裡我們使用NuGet進行安裝。

Install-Package AngleSharp

三、從字符串解析HTML文檔

在解析HTML文檔之前,我們需要先創建一個Document對象,然後將HTML文件作為參數傳入,則會返回DOM樹的根節點HTMLHtmlElement。下面是一個解析HTML字符串並獲取頁面title的代碼示例。

using AngleSharp;

// 解析HTML字符串,並獲取title
var html = @"<!DOCTYPE html>
            <html>
                <head>
                    <title>Hello World</title>
                </head>
                <body>
                    <p>This is a sample paragraph.</p>
                </body>
            </html>";

var parser = new HtmlParser();
var doc = parser.ParseDocument(html);
var title = doc.Title;

在以上示例中,我們首先定義了一個HTML字符串,然後使用HtmlParser解析該字符串,並獲取Document對象。最後通過doc.Title獲取頁面的title,其值為”Hello World”。

四、從文件解析HTML文檔

除了從字符串解析HTML文檔,我們還可以從文件中解析HTML文檔。使用File.ReadAllText從文本文件中讀取HTML代碼,然後用HtmlParser進行解析。

using AngleSharp;
using System.IO;

// 從文件中解析HTML文檔,並獲取頁面title
var filePath = @"D:\html\test.html";
var html = File.ReadAllText(filePath);

var parser = new HtmlParser();
var doc = parser.ParseDocument(html);
var title = doc.Title;

在以上示例中,我們通過File.ReadAllText從D:\html\test.html路徑讀取HTML代碼,然後用HtmlParser進行解析,並獲取頁面title。

五、選擇器操作

選擇器是用於選擇DOM樹中特定元素的一種方法,可以幫助我們對HTML文檔進行更加靈活的操作。在Anglesharp中,內置了CSS選擇器,支持多種類型的選擇器。

1. 獲取所有p元素

using AngleSharp;
using AngleSharp.Dom;
using System.Linq;

// 獲取HTML文檔中所有的p元素
var html = @"<!DOCTYPE html>
            <html>
                <head>
                    <title>Hello World</title>
                </head>
                <body>
                    <p>This is a sample paragraph 1.</p>
                    <p>This is a sample paragraph 2.</p>
                    <p>This is a sample paragraph 3.</p>
                </body>
            </html>";

var parser = new HtmlParser();
var doc = parser.ParseDocument(html);
var pList = doc.QuerySelectorAll("p").ToArray();

在以上示例中,我們使用doc.QuerySelectorAll(“p”)獲取頁面中所有p元素,並通過ToArray()方法將其轉換為數組。

2. 獲取特定id元素

using AngleSharp;
using AngleSharp.Dom;
using System.Linq;

// 獲取HTML文檔中id為"test"的元素
var html = @"<!DOCTYPE html>
            <html>
                <head>
                    <title>Hello World</title>
                </head>
                <body>
                    <p id=""test"">This is a sample paragraph.</p>
                </body>
            </html>";

var parser = new HtmlParser();
var doc = parser.ParseDocument(html);
var element = doc.QuerySelector("#test");

在以上示例中,我們使用doc.QuerySelector(“#test”)查找頁面中id為”test”的元素,並將其返回給element對象。

六、DOM操作

1. 創建元素

在Anglesharp中,可以使用CreateElement方法創建DOM元素。

using AngleSharp;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;

// 創建一個新的p元素,並設置其內容和屬性
var parser = new HtmlParser();
var doc = parser.ParseDocument("<html></html>");

var p = doc.CreateElement("p");
p.TextContent = "This is a new paragraph.";
p.ClassName = "my-class";

在以上示例中,我們使用doc.CreateElement<IHtmlParagraphElement>(“p”)創建了一個新的p元素,並定義了其內容和類別。

2. 修改元素

在Anglesharp中,我們可以很方便地修改DOM元素,例如修改HTML標籤的屬性。

using AngleSharp;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;

// 創建一個包含img元素的文檔,並修改其屬性
var parser = new HtmlParser();
var doc = parser.ParseDocument(@"<html>
                                    <head>
                                        <title>Hello World</title>
                                    </head>
                                    <body>
                                        <img src=""test.jpg"" alt=""test image"" />
                                    </body>
                                </html>");
var img = doc.QuerySelector("img");
img.SetAttribute("src", "new-test.jpg");
img.SetAttribute("alt", "new test image");

在以上示例中,我們使用SetAttribute方法修改img元素的封裝屬性(src和alt)。

3. 刪除元素

在Anglesharp中,我們也可以刪除DOM元素。例如下面的示例演示了如何刪除文檔中所有的p元素。

using AngleSharp;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;
using System.Linq;

// 刪除所有p元素
var parser = new HtmlParser();
var doc = parser.ParseDocument(@"<html>
                                    <head>
                                        <title>Hello World</title>
                                    </head>
                                    <body>
                                        <p>This is a sample paragraph 1.</p>
                                        <p>This is a sample paragraph 2.</p>
                                        <p>This is a sample paragraph 3.</p>
                                    </body>
                                </html>");
var pList = doc.QuerySelectorAll("p").ToArray();
foreach (var p in pList)
{
    p.Remove();
}

在以上示例中,我們使用doc.QuerySelectorAll(“p”)獲取頁面中所有p元素,並通過循環遍歷每一個p元素,並使用Remove()方法刪除它們。

結語

本文介紹了如何使用Anglesharp解析和操作HTML文檔,包括從字符串和文件中解析HTML、選擇器操作以及DOM操作等。Anglesharp不僅提供了簡單易懂的語法和方便快捷的API,還能夠在.NET平台中提供高效且靈活的HTML解析支持。希望本文能夠對讀者理解和使用Anglesharp有所幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/196467.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 09:56
下一篇 2024-12-03 09:56

相關推薦

  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • 使用Spire.PDF進行PDF文檔處理

    Spire.PDF是一款C#的PDF庫,它可以幫助開發者快速、簡便地處理PDF文檔。本篇文章將會介紹Spire.PDF庫的一些基本用法和常見功能。 一、PDF文檔創建 創建PDF文…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python渲染HTML庫

    Python渲染HTML庫指的是能夠將Python中的數據自動轉換為HTML格式的Python庫。HTML(超文本標記語言)是用於創建網頁的標準標記語言。渲染HTML庫使得我們可以…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29
  • Python元祖操作用法介紹

    本文將從多個方面對Python元祖的操作進行詳細闡述。包括:元祖定義及初始化、元祖遍歷、元祖切片、元祖合併及比較、元祖解包等內容。 一、元祖定義及初始化 元祖在Python中屬於序…

    編程 2025-04-29
  • Python列表的讀寫操作

    本文將針對Python列表的讀取與寫入操作進行詳細的闡述,包括列表的基本操作、列表的增刪改查、列表切片、列表排序、列表反轉、列表拼接、列表複製等操作。 一、列表的基本操作 列表是P…

    編程 2025-04-29
  • 如何用Python對數據進行離散化操作

    數據離散化是指將連續的數據轉化為離散的數據,一般是用於數據挖掘和數據分析中,可以幫助我們更好的理解數據,從而更好地進行決策和分析。Python作為一種高效的編程語言,在數據處理和分…

    編程 2025-04-29

發表回復

登錄後才能評論