zoukankan      html  css  js  c++  java
  • C#爬虫(05):AngleSharp解析html文档

    一、简介

    AngleSharp:https://github.com/AngleSharp/AngleSharp

    AngleSharp中文官方文档

    AngleSharp是一个.NET库,使您能够解析基于尖括号的超文本,例如HTML,SVG和MathML。该库还支持未经验证的XML。

    AngleSharp的一个重要方面是CSS也可以解析。
    与类似的库(例如HtmlAgilityPack)相比的优势在于,公开的DOM使用的是W3C官方指定的API,即,甚至在AngleSharp中也可以使用querySelectorAll之类的东西。解析器还使用HTML 5.1规范,该规范定义了错误处理和元素校正。
    AngleSharp库专注于标准合规性,交互性和可扩展性。因此,它为使用C#的Web开发人员提供了从在任何现代浏览器中使用DOM所获得的所有可能性。

    image

    官方实例:https://github.com/AngleSharp/AngleSharp.Samples
    这个简单的示例将使用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 = "

    Some example source

    This is a paragraph element"; //解析源文件 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("
    • First element
    • Second element
    • third
    • Last"); //获取所有li元素并将test属性设置为值测试 var elements = document.QuerySelectorAll("li").Attr("test", "test"); //元素仍然包含所有li元素 ViewData["html"] = document.DocumentElement.OuterHtml;

    效果展示

    3、爬取豆瓣美女图片

    新建个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;

    效果如下

    4、使用AngleSharp生成html代码自动缩进格式化

    var parser = new HtmlParser();
    var document = parser.ParseDocument(text);
    using (var writer = new StringWriter())
    {
        document.ToHtml(writer, new PrettyMarkupFormatter
                                {
                                    Indentation = "	",
                                    NewLine = "
    "
                                });
        var indentedText = writer.ToString();
    }

    5、使用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");
               //https://www.cjavapy.com/article/696/
                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));
                //根据虚拟请求/响应模式创建文档
                //https://www.cjavapy.com/article/696/
                var document = context.OpenAsync(url).Result;
    using (var writer = new StringWriter())
    {
        document.ToHtml(writer, new PrettyMarkupFormatter
                                {
                                    Indentation = "	",
                                    NewLine = "
    "
                                });
        var indentedText = writer.ToString();
    }
查看全文
  • 相关阅读:
    BigPipe学习研究
    JavaSript模块规范
    WebSocket
    图片链接转成base64
    3000多台式机组装经验分享
    android textview 自动换行 整齐排版
    android 获取所有SD卡目录
    android获取系统信息
    在电脑上用chrome浏览器调试android手机里的网页代码时,无法看到本地加载的js文件
    android 根据坐标返回触摸到的View
  • 原文地址:https://www.cnblogs.com/springsnow/p/13278134.html
  • Copyright © 2011-2022 走看看