User Tools

Site Tools

study:anglesharp:20250312-004:index

C#使用AngleSharp庫解析html文檔 (2025-03-12)

Local Backup

  • 這篇文章介紹了C#使用AngleSharp函式庫解析html文件的方法,文中透過範例程式碼介紹的非常詳細。對大家的學習或工作有一定的參考借鏡價值,需要的朋友可以參考下

一、簡介

  • AngleSharp是一個.NET函式庫,可讓您解析基於尖括號的超文本,例如HTML,SVG和MathML,該程式庫還支援未經驗證的XML,AngleSharp的一個重要方面是CSS也可以解析。
  • AngleSharp與類似的函式庫(例如HtmlAgilityPack)相比的優勢在於:
    • 公開的DOM使用的是W3C官方指定的API,即,甚至在AngleSharp中也可以使用querySelectorAll之類的東西。
    • 解析器也使用HTML 5.1規範,定義了錯誤處理和元素校正。
  • AngleSharp函式庫專注於標準合規性,互動性和可擴充性。因此,它為使用C#的網頁開發人員提供了從在任何現代瀏覽器中使用DOM所獲得的所有可能性。
  • 這個簡單的範例將使用Wikipedia的網站進行資料檢索。
  • var config = Configuration.Default.WithDefaultLoader();
    var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes";
    var context = BrowsingContext.New(config);
    var document = await context.OpenAsync(address);
    var cellSelector = "tr.vevent td:nth-child(3)";
    var cells = document.QuerySelectorAll(cellSelector);
    var titles = cells.Select(m => m.TextContent);

二、使用AngleSharp產生自動縮排格式化的html方法

  • 1、操作DOM範例
    //创建一个(可重用)解析器前端
    var parser = new HtmlParser();
    //html DOM节点
    var source = "
    <h1>Some example source</h1>
    <p>This is a paragraph element</p>
    ";
     
    //解析源文件
    var document = parser.Parse(source);
    //创建P标签
    var p = document.CreateElement("p");
    p.TextContent = "This is another paragraph.";
    //添加到DOM
    document.Body.AppendChild(p);
    //返回完整html
    var html = document.DocumentElement.OuterHtml;
    ViewData["html"] = html;
    • 效果展示
  • 2、更改標籤屬性
    • 為標籤新增自訂屬性
      var parser = new HtmlParser();
       //为以下源代码生成HTML DOM
      var document = parser.Parse("
      <ul>
      <li>First element</li>
      <li>Second element</li>
      <li>third</li>
      <li class='bla'>Last</li>
      </ul>
      ");
      //获取所有li元素并将test属性设置为值测试
      var elements = document.QuerySelectorAll("li").Attr("test", "test");
       //元素仍然包含所有li元素
      ViewData["html"] = document.DocumentElement.OuterHtml;
    • 效果展示

  • 3.使用AngleSharp產生html程式碼自動縮排格式化
    var parser = new HtmlParser();
    var document = parser.ParseDocument(text);
    using (var writer = new StringWriter())
    {
        document.ToHtml(writer, new PrettyMarkupFormatter
                                {
                                    Indentation = "\t",
                                    NewLine = "\n"
                                });
        var indentedText = writer.ToString();
    }
  • 4.使用AngleSharp下載取得html程式碼
    var requester = new DefaultHttpRequester("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");
    requester.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
    requester.Headers.Add("Referer", "");
    requester.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3");
    var context = BrowsingContext.New(Configuration.Default.WithLocaleBasedEncoding().WithDefaultLoader().WithDefaultCookies().With(requester));
    //根据虚拟请求/响应模式创建文档
    var document = context.OpenAsync(url).Result;
    using (var writer = new StringWriter())
    {
        document.ToHtml(writer, new PrettyMarkupFormatter
                                {
                                    Indentation = "\t",
                                    NewLine = "\n"
                                });
        var indentedText = writer.ToString();
    }
  • 5.爬取豆瓣美女圖片
    • 新建一個Belle類別用於保存所取得的圖片訊息
      /// 
      /// 解析html
      /// 
      public class Belle
      {
              /// 
              /// 标题
              /// 
              public string Title { get; set; }
              /// 
              /// 图片地址
              /// 
              public string ImageUrl { get; set; }
      }
    • 取得html並解析
      // 设置配置以支持文档加载
      var config = Configuration.Default.WithDefaultLoader();
      // 豆瓣地址
      var address = "https://www.dbmeinv.com/dbgroup/show.htm?cid=4";
      // 请求豆辨网
      var document =  BrowsingContext.New(config).OpenAsync(address);
      // 根据class获取html元素
      var cells = document.Result.QuerySelectorAll(".panel-body li");
      // We are only interested in the text - select it with LINQ
      List list = new List();
      foreach (var item in cells)
      {
           var belle = new Belle
           {
               Title= item.QuerySelector("img").GetAttribute("title"),
               ImageUrl= item.QuerySelector("img").GetAttribute("src")
           };
           list.Add(belle);
       }
      ViewData["html"] = list;
    • 到此這篇關於C#使用AngleSharp函式庫解析html文檔的文章就介紹到這裡了。希望對大家的學習有幫助,也希望大家多多支持腳本家。

您可能感興趣的文章:

Permalink study/anglesharp/20250312-004/index.txt · Last modified: 2025/03/12 16:29 by jethro

oeffentlich