看到了AngleSharp,感觉这个非常好用,比HtmlAgilityPack感觉好用点

AngleSharp 地址:https://github.com/AngleSharp/AngleSharp

在Nuget中要安装这两个包,一个是主包,另一个是js的扩展包

首先看第一个例子

  1. static void FirstExample ()
  2. {
  3. //创建一个html的解析器
  4. var parser = new HtmlParser ();
  5. //使用解析器解析文档
  6. var document = parser.Parse ("<h1>Some example source</h1><p>This is a paragraph element");
  7.  
  8. Console.WriteLine ("输出整个文档的html:");
  9. Console.WriteLine (document.DocumentElement.OuterHtml);
  10.  
  11. //创建一个p元素
  12. var p = document.CreateElement ("p");
  13. //给p元素添加文本
  14. p.TextContent = "This is another paragraph.";
  15.  
  16. Console.WriteLine ("在body中插入一个P元素");
  17. document.Body.AppendChild (p);
  18.  
  19. Console.WriteLine ("输出整个文档的html:");
  20. Console.WriteLine (document.DocumentElement.OuterHtml);
  21. }

  这个例子是向html本地文档中追加的

第二个例子,获取指定的元素

  1. static void UsingLinq ()
  2. {
  3. //创建解析器
  4. var parser = new HtmlParser ();
  5. //创建本地文档
  6. var document = parser.Parse ("<ul><li>First item<li>Second item<li class='blue'>Third item!<li class='blue red'>Last item!</ul>");
  7.  
  8. //选取class='blue'的li集合,使用linq
  9. var blueListItemsLinq = document.All.Where (m => m.LocalName == "li" && m.ClassList.Contains ("blue"));
  10.  
  11. //选取class='blue'的li集合,使用css选择器
  12. var blueListItemsCssSelector = document.QuerySelectorAll ("li.blue");
  13.  
  14. Console.WriteLine ("两种选择结果 ...");
  15.  
  16. Console.WriteLine ();
  17. Console.WriteLine ("LINQ:");
  18.  
  19. foreach ( var item in blueListItemsLinq )
  20.  
  21. Console.WriteLine (item.Text ());
  22.  
  23. Console.WriteLine ();
  24. Console.WriteLine ("CSS:");
  25.  
  26. foreach ( var item in blueListItemsCssSelector )
  27. Console.WriteLine (item.Text ());
  28. }

  

单选元素

  1. static void SingleElements ()
  2. {
  3. var parser = new HtmlParser ();
  4. var document = parser.Parse ("<b><i>This is some <em> bold <u>and</u> italic </em> text!</i></b>");
  5. var emphasize = document.QuerySelector ("em");
  6.  
  7. Console.WriteLine ("Difference between several ways of getting text:");
  8. Console.WriteLine ();
  9. Console.WriteLine ("Only from C# / AngleSharp:");
  10. Console.WriteLine ();
  11. //使用C#的方式输出
  12. Console.WriteLine (emphasize.ToHtml ()); //<em> bold <u>and</u> italic </em>
  13. Console.WriteLine (emphasize.Text ()); //bold and italic
  14.  
  15. Console.WriteLine ();
  16. Console.WriteLine ("From the DOM:");
  17. Console.WriteLine ();
  18. //使用dom的方式输出
  19. Console.WriteLine (emphasize.InnerHtml); // bold <u>and</u> italic
  20. Console.WriteLine (emphasize.OuterHtml); //<em> bold <u>and</u> italic </em>
  21. Console.WriteLine (emphasize.TextContent);// bold and italic
  22. }

  

下面这个示例是执行其中的js代码

  1. static void SimpleScriptingSample ()
  2. {
  3. //创建一个自定义的配置文件,使用javascript
  4. var config = Configuration.Default.WithJavaScript ();
  5. //使用自定义的配置创建一个解析器
  6. var parser = new HtmlParser (config);
  7.  
  8. //将要被处理的文本
  9. var source = @"<!doctype html>
  10. <html>
  11. <head><title>Sample</title></head>
  12. <body>
  13. <script>
  14. document.title = 'Simple manipulation...';
  15. document.write('<span class=greeting>Hello World!</span>');
  16. </script>
  17. </body>";
  18. //使用解析器解析文档
  19. var document = parser.Parse (source);
  20.  
  21. //获取输出
  22. //因为我们使用的是javascript的配置
  23. ///所以在此文档 source 中会将其中的js代码执行
  24. Console.WriteLine (document.DocumentElement.OuterHtml);
  25. }

  

  1. static void ExtendedScriptingSample ()
  2. {
  3. //创建一个自定义的配置器,使用js和css
  4. var config = Configuration.Default.WithJavaScript ().WithCss ();
  5. //使用自定义的配置器创建解析器
  6. var parser = new HtmlParser (config);
  7.  
  8. //创建一些html文档
  9. var source = @"<!doctype html>
  10. <html>
  11. <head><title>Sample</title></head>
  12. <style>
  13. .bold {
  14. font-weight: bold;
  15. }
  16. .italic {
  17. font-style: italic;
  18. }
  19. span {
  20. font-size: 12pt;
  21. }
  22. div {
  23. background: #777;
  24. color: #f3f3f3;
  25. }
  26. </style>
  27. <body>
  28. <div id=content></div>
  29. <script>
  30. (function() {
  31. var doc = document;
  32. var content = doc.querySelector('#content');
  33. var span = doc.createElement('span');
  34. span.id = 'myspan';
  35. span.classList.add('bold', 'italic');
  36. span.textContent = 'Some sample text';
  37. content.appendChild(span);
  38. var script = doc.querySelector('script');
  39. script.parentNode.removeChild(script);
  40. })();
  41. </script>
  42. </body>";
  43. //解析文档
  44. var document = parser.Parse (source);
  45.  
  46. ///输出文档
  47. ///文档输出后会发现,js代码被执行了 css类也如js代码中写的那样被加入到元素上
  48. Console.WriteLine (document.DocumentElement.OuterHtml);
  49. }

  下面示例是向注册html文档中的事件js事件,在C#输出

  1. public static void EventScriptingExample ()
  2. {
  3. //We require a custom configuration
  4. var config = Configuration.Default.WithJavaScript ();
  5. //Let's create a new parser using this configuration
  6. var parser = new HtmlParser (config);
  7.  
  8. //This is our sample source, we will trigger the load event
  9. var source = @"<!doctype html>
  10. <html>
  11. <head><title>Event sample</title></head>
  12. <body>
  13. <script>
  14. console.log('Before setting the handler!');
  15.  
  16. document.addEventListener('load', function() {
  17. console.log('Document loaded!');
  18. });
  19.  
  20. document.addEventListener('hello', function() {
  21. console.log('hello world from JavaScript!');
  22. });
  23.  
  24. console.log('After setting the handler!');
  25. </script>
  26. </body>";
  27. var document = parser.Parse (source);
  28.  
  29. //输出html
  30. Console.WriteLine (document.DocumentElement.OuterHtml);
  31.  
  32. //注册html中的js事件
  33. document.AddEventListener ("hello" , (s , ev) =>
  34. {
  35. Console.WriteLine ("hello world from C#!");
  36. });
  37.  
  38. //创建一个js事件
  39. var e = document.CreateEvent ("event");
  40. //初始化事件
  41. e.Init ("hello" , false , false);
  42. //调用事件
  43. document.Dispatch (e);
  44. }

  

这是git上的一些示例,我只是翻译了下,

用了下,的确比CsQuery和HtmlAgilityPack要好用得多

特别是熟悉Css选择器语法的

另外上一张图和一张表的对比,该图表是AngleSharp自己的测试

  1. RUNNING TESTS (v0.9.1)
  2. ============================================================================
  3. AngleSharp CsQuery HTMLAgilityPack
  4. ----------------------------------------------------------------------------
  5. amazon 1ms 7ms 0ms
  6. blogspot 1ms 2ms 5ms
  7. smashing 1ms 1ms 1ms
  8. youtube 11ms 15ms 13ms
  9. weibo 0ms 0ms 0ms
  10. yahoo 8ms 35ms 22ms
  11. google 2ms 2ms 8ms
  12. linkedin 3ms 2ms 3ms
  13. pinterest 1ms 1ms 5ms
  14. news.google 28ms 34ms 41ms
  15. baidu 1ms 1ms 6ms
  16. codeproject 4ms 4ms 4ms
  17. ebay 8ms 8ms 8ms
  18. msn 18ms 18ms 13ms
  19. nbc 5ms 4ms 8ms
  20. qq 17ms 1060ms 52ms
  21. florian-rappl 0ms 1ms 0ms
  22. stackoverflow 16ms 15ms 12ms
  23. html5rocks 0ms 0ms 0ms
  24. live 0ms 0ms 0ms
  25. taobao 14ms 15ms 7ms
  26. huffingtonpost 11ms 9ms 10ms
  27. wordpress 1ms 0ms 0ms
  28. myspace 20ms 29ms 21ms
  29. flickr 3ms 5ms 13ms
  30. godaddy 6ms 5ms 7ms
  31. reddit 6ms 9ms 6ms
  32. nytimes 14ms 13ms 13ms
  33. peacekeeper.futu... 0ms 0ms 1ms
  34. pcmag 9ms 11ms 16ms
  35. sitepoint 1ms 2ms 3ms
  36. html5test 0ms 1ms 2ms
  37. spiegel 15ms 12ms 13ms
  38. tmall 2ms 3ms 2ms
  39. sohu 20ms 46ms 39ms
  40. vk 2ms 0ms 1ms
  41. wordpress 2ms 0ms 0ms
  42. bing 1ms 1ms 4ms
  43. tumblr 2ms 3ms 3ms
  44. ask 0ms 0ms 1ms
  45. mail.ru 6ms 11ms 15ms
  46. imdb 6ms 4ms 6ms
  47. kickass.to 0ms 0ms 0ms
  48. 360.cn 4ms 4ms 8ms
  49. 163 32ms 45ms 56ms
  50. neobux 1ms 0ms 0ms
  51. aliexpress 10ms 9ms 9ms
  52. netflix 4ms 3ms 7ms
  53. w3 912ms 579ms 1064ms
  54. en.wikipedia 37ms 26ms 33ms
  55. ----------------------------------------------------------------------------
  56. Total 1292ms 2080ms 1583ms
  57. ----------------------------------------------------------------------------
  58. Fastest 20 19 11
  59. ----------------------------------------------------------------------------
  60. Slowest 13 12 25
  61. ----------------------------------------------------------------------------
  1.  

AngleSharp一些示例的更多相关文章

  1. AngleSharp 实战(01)之最简单的示例

    文档地址:https://anglesharp.github.io/docs/Examples.html 直接贴代码了: using System; using System.Linq; using ...

  2. 微软微服务eShopOnContainers示例之EventBusRabbitMq解析与实践

    eShopOnContainers eShopOnContainers是微软官方的微服务架构示例,GitHub地址https://github.com/dotnet-architecture/eSho ...

  3. C# 使用AngleSharp 爬虫图片

    AngleSharp 简介 AngleSharp是基于.NET(C#)开发的专门解析HTML源码的DLL组件.根据HTML的DOM结构操作HTML,整个DOM已传输到逻辑类结构中.这种结构可以更好的操 ...

  4. PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取

    参考了DotNetSpider示例, 感觉DotNetSpider太重了,它是一个比较完整的爬虫框架. 对比了以下各种无头浏览器,最终采用PuppeteerSharp+AngleSharp写一个爬虫示 ...

  5. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  6. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  7. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  8. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  9. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

随机推荐

  1. mysql恢复备份错误:Got a packet bigger than 'max_allowed_packet' bytes

    最近恢复mysql数据库备份时,出现了一个错误:Got a packet bigger than 'max_allowed_packet' bytes 该问题主要是由于mysql的my.ini文件中设 ...

  2. WinFrom下Webbrowser加载自定义页面的技巧

    先使用Navigate("about:balnk")方法,打开一个空页面,实际内容在IE_DocumentCompleted中写入.代码来源于csdnreader程序. priva ...

  3. AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题

    在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...

  4. python 返回数组的索引

    使用python里的index nums = [1, 2, 3, 4, 5, 6, 1, 9] print nums.index(max(nums)) print nums.index(1) 该方法同 ...

  5. 三,mysql优化--sql语句优化之索引一

    1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中.供程序员分析.(默认不启用此功能,需要手动启用) 修改my.cnf文件(有些地方是my.ini) ...

  6. 程序猿的日常——Java基础之clone、序列化、字符串、数组

    其实Java还有很多其他的基础知识,在日常工作技术撕逼中也是经常被讨论的问题. 深克隆与浅克隆 在Java中创建对象有两种方式: 一种是new操作符,它创建了一个新的对象,并把对应的各个字段初始化成默 ...

  7. JS 对象 合并

    来自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Sy ...

  8. IdentityServer4登陆中心

    1. 使用Vsual Studio Code 终端执行 dotnet new webapi --name IdentityServerSample 命令创建一个webapi 的 IdentitySer ...

  9. Adapter as a WCF Binding - In Depth

    WCF LOB Adapter SDK surfaces an adapter as a custom WCF Binding.  A WCF Bindingcorresponds to the “H ...

  10. Swift的Guard语句

    与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行.与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码.你可以把guard近似的看做是Assert,但 ...