欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

AngleSharp:強大的 C# HTML 解析庫

admin
2024年10月30日 7:47 本文熱度 603

AngleSharp 是一個功能強大的 .NET 庫,用于解析 HTML、XML 和 CSS。它提供了一個直觀的 API,使得在 C# 中處理 Web 文檔變得簡單高效。本文將詳細介紹 AngleSharp 的使用方法,并提供多個實用的例子。

1. 安裝

首先,通過 NuGet 包管理器安裝 AngleSharp:

Install-Package AngleSharp

2. 基本用法

2.1 解析 HTML 文檔

using AngleSharp;using AngleSharp.Dom;using System;
class Program{    static async Task Main(string[] args)    {        // 配置 AngleSharp        var config = Configuration.Default;        // 創建一個新的上下文        var context = BrowsingContext.New(config);
       // 解析 HTML 字符串        var html = "<html><body><h1>Hello, AngleSharp!</h1></body></html>";        var document = await context.OpenAsync(req => req.Content(html));
       // 獲取并打印 h1 元素的文本        var h1 = document.QuerySelector("h1");        Console.WriteLine(h1.TextContent); // 輸出: Hello, AngleSharp!    }}

2.2 從 URL 加載文檔

static async Task Main(string[] args){    var config = Configuration.Default.WithDefaultLoader();    var context = BrowsingContext.New(config);
   var document = await context.OpenAsync("https://www.163.com");
   var title = document.QuerySelector("title");    Console.WriteLine($"Page title: {title.TextContent}");}

3. 高級用法

3.1 選擇元素

AngleSharp 支持多種選擇元素的方法:

static async Task Main(string[] args){    var config = Configuration.Default.WithDefaultLoader();    var context = BrowsingContext.New(config);
   var document = await context.OpenAsync("https://www.cnblogs.com/");
   // 通過 ID 選擇    var elementById = document.GetElementById("myId");
   // 通過類名選擇    var elementsByClass = document.GetElementsByClassName("post-item-title");    foreach (var element in elementsByClass)    {        Console.WriteLine(element.TextContent);    }
   // 通過標簽名選擇    var elementsByTag = document.GetElementsByTagName("div");
   // 使用 CSS 選擇器    var elementBySelector = document.QuerySelectorAll(".post-item-text > p");    foreach (var element in elementBySelector)    {        Console.WriteLine(element.TextContent);    }
   var elementsBySelector = document.QuerySelectorAll("div.myClass");
   foreach (var element in elementsBySelector)    {        Console.WriteLine(element.TextContent);    }}

3.2 修改文檔

AngleSharp 允許你動態修改文檔:

static async Task Main(string[] args){    var config = Configuration.Default.WithDefaultLoader();    var context = BrowsingContext.New(config);
   var document = await context.OpenAsync(req => req.Content("<html><body></body></html>"));
   var body = document.Body;
   // 創建新元素    var newDiv = document.CreateElement("div");    newDiv.ClassName = "newClass";    newDiv.TextContent = "This is a new div";
   // 添加到文檔    body.AppendChild(newDiv);
   // 修改現有元素    var existingDiv = document.QuerySelector("div");    existingDiv.SetAttribute("data-custom", "value");
   // 刪除元素    var elementToRemove = document.QuerySelector(".removeMe");    elementToRemove?.Remove();
   Console.WriteLine(document.DocumentElement.OuterHtml);}

3.3 處理表單

AngleSharp 可以用來處理 HTML 表單:

static async Task Main(string[] args){    var config = Configuration.Default.WithDefaultLoader();    var context = BrowsingContext.New(config);
   var html = @"    <form id='loginForm'>        <input type='text' name='username' />        <input type='password' name='password' />        <input type='submit' value='Login' />    </form>";
   var document = await context.OpenAsync(req => req.Content(html));
   var form = document.QuerySelector("#loginForm") as IHtmlFormElement;    var usernameInput = form["username"] as IHtmlInputElement;    var passwordInput = form["password"] as IHtmlInputElement;
   usernameInput.Value = "myUsername";    passwordInput.Value = "myPassword";
   // 模擬表單提交    await form.SubmitAsync();}

3.4 使用 CSS 選擇器

AngleSharp 支持復雜的 CSS 選擇器:

var html = @"<div>    <p>First paragraph</p>    <p>Second paragraph</p>    <p>Third paragraph</p></div>";
var document = await context.OpenAsync(req => req.Content(html));
// 選擇第二個段落var secondP = document.QuerySelector("p:nth-child(2)");Console.WriteLine(secondP.TextContent); // 輸出: Second paragraph
// 選擇帶有特定類的段落var highlightedP = document.QuerySelector("p.highlight");Console.WriteLine(highlightedP.TextContent); // 輸出: Second paragraph
// 選擇所有段落var allParagraphs = document.QuerySelectorAll("p");foreach (var p in allParagraphs){    Console.WriteLine(p.TextContent);}

3.5 解析和操作 CSS

AngleSharp 也可以用來解析和操作 CSS:

static async Task Main(string[] args){    var config = Configuration.Default.WithDefaultLoader();    var context = BrowsingContext.New(config);
   var css = @"    body {        font-family: Arial, sans-serif;        background-color: #f0f0f0;    }    .highlight {        color: red;        font-weight: bold;    }";
   var parser = new CssParser();    var stylesheet = parser.ParseStyleSheet(css);
   foreach (var rule in stylesheet.Rules)    {        if (rule is ICssStyleRule styleRule)        {            Console.WriteLine($"Selector: {styleRule.SelectorText}");            foreach (var declaration in styleRule.Style)            {                Console.WriteLine($"  {declaration.Name}: {declaration.Value}");            }        }    }}

3.6 執行 JavaScript

雖然 AngleSharp 主要用于 HTML 和 CSS 解析,但它也提供了一個基本的 JavaScript 執行環境:

static async Task Main(string[] args)  {    var config = Configuration.Default.WithJs();    var context = BrowsingContext.New(config);
   var document = await context.OpenAsync(req => req.Content("<div id='result'></div>"));
   var script = @"    document.getElementById('result').textContent = 'Hello from JavaScript!';    ";
   var engine = context.GetService<JsScriptingService>();    var jsValue = engine.EvaluateScript(document, script);
   var result = document.GetElementById("result");    Console.WriteLine(result.TextContent); // 輸出: Hello from JavaScript!}  

3.7 處理表格數據

AngleSharp 可以很方便地處理 HTML 表格:

static async Task Main(string[] args){    var config = Configuration.Default;    var context = BrowsingContext.New(config);    var html = @"    <table id='dataTable'>        <tr><th>Name</th><th>Age</th></tr>        <tr><td>John</td><td>30</td></tr>        <tr><td>Jane</td><td>25</td></tr>    </table>";
   var document = await context.OpenAsync(req => req.Content(html));
   var table = document.GetElementById("dataTable") as IHtmlTableElement;
   foreach (var row in table.Rows)    {        var cells = row.Cells;        if (cells.Length == 2)        {            Console.WriteLine($"Name: {cells[0].TextContent}, Age: {cells[1].TextContent}");        }    }}  

3.8 解析 XML

AngleSharp 不僅可以解析 HTML,還可以解析 XML:

static async Task Main(string[] args){    var xml = @"    <root>        <element attribute='value'>            <child>Content</child>        </element>    </root>"    ;
   var parser = new XmlParser();    var document = await parser.ParseDocumentAsync(xml);
   var root = document.DocumentElement;    var element = root.FirstElementChild;    var attribute = element.GetAttribute("attribute");    var childContent = element.FirstElementChild.TextContent;
   Console.WriteLine($"Attribute: {attribute}");    Console.WriteLine($"Child content: {childContent}");}  

4. 錯誤處理和最佳實踐

4.1 使用 try-catch 塊

始終使用 try-catch 塊來處理可能出現的異常:

try{    var document = await context.OpenAsync("https://example.com");    // 處理文檔...}catch (AngleSharp.Io.NetworkException ex){    Console.WriteLine($"Network error: {ex.Message}");}catch (Exception ex){    Console.WriteLine($"An unexpected error occurred: {ex.Message}");}

4.2 檢查元素是否存在

在訪問元素之前,始終檢查元素是否存在:

var element = document.QuerySelector(".myClass");if (element != null){    Console.WriteLine(element.TextContent);}else{    Console.WriteLine("Element not found");}

4.3 使用 Linq 與 AngleSharp

AngleSharp 的查詢結果可以很好地與 Linq 結合使用:

var paragraphs = document.QuerySelectorAll("p")    .Where(p => p.ClassList.Contains("important"))    .Select(p => p.TextContent);
foreach (var text in paragraphs){    Console.WriteLine(text);}

5. 結論

AngleSharp 是一個強大而靈活的庫,它為 C# 開發者提供了豐富的 HTML、CSS 和 XML 處理功能。從簡單的文檔解析到復雜的 DOM 操作,AngleSharp 都能勝任。

通過本文提供的示例,你應該能夠處理大多數與 Web 文檔解析和操作相關的任務。AngleSharp 的 API 設計直觀,使得即使是復雜的操作也能夠簡單地實現。

在使用 AngleSharp 時,請記住正確處理異常,并考慮性能影響。對于需要處理大量文檔或執行頻繁操作的情況,可能需要考慮使用緩存或其他優化技術。


該文章在 2024/10/30 14:56:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved