隐藏

在C#中使用AngleSharp解析Html

发布:2022/12/27 10:18:26作者:管理员 来源:本站 浏览次数:357

一、AngleSharp简介


AngleSharp 是一个 .NET 的 HTML 解析器库。支持输出 Javascript、Linq 语法、ID 和 Class 选择器、动态添加节点、支持 Xpath 语法。比HtmlAgilityPack更好用一点。


官网地址:AngleSharp - Documentation


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


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


特点:


支持html5,支持Dom解析、生成、查询


支持css选择器查找


支持js 解析运行


   便携式的(使用.NET标准2.0)

   符合标准(与常绿浏览器完全相同)

   出色的性能(在大多数情况下优于类似的解析器)

   可扩展性(使用您自己的服务进行扩展)

   有用的抽象(类型助手,类似于构造的jQuery)

   功能齐全的DOM(您所知道的所有列表、迭代器和事件)

   表格提交(可随时登录)

   导航(浏览上下文就像浏览器选项卡控制它。净的!)。

   LINQ增强了(使用带有DOM元素的LINQ,自然没有包装器)


二、AngleSharp安装


1.使用命令


Install-Package AngleSharp


2.使用Nuget包管理


三、AngleSharp使用案例


1.html生成


   //创建一个html的解析器

   var parser = new HtmlParser();

   //使用解析器解析文档

   var document = parser.ParseDocument("<h1>Some example source</h1><p>This is a paragraph element");

   

   Console.WriteLine("输出整个文档的html:");

   Console.WriteLine(document.DocumentElement.OuterHtml);

   

   //创建一个p元素

   var p = document.CreateElement("p");

   //给p元素添加文本

   p.TextContent = "This is another paragraph.";

   

   Console.WriteLine("在body中插入一个P元素");

   document.Body.AppendChild(p);

   

   Console.WriteLine("输出整个文档的html:");

   Console.WriteLine(document.DocumentElement.OuterHtml);




2.html查询,Dom检索,根据Css选择器检索


   //创建解析器

   var parser = new HtmlParser();

   //创建本地文档

   var document = parser.ParseDocument("<ul><li>First item<li>Second item<li class='blue'>Third item!<li class='blue red'>Last item!</ul>");

   

   //选取class='blue'的li集合,使用linq

   var blueListItemsLinq = document.All.Where(m => m.LocalName == "li" && m.ClassList.Contains("blue"));

   

   //选取class='blue'的li集合,使用css选择器

   var blueListItemsCssSelector = document.QuerySelectorAll("li.blue");

   

   Console.WriteLine("两种选择结果 ...");

   

   Console.WriteLine();

   Console.WriteLine("LINQ:");

   

   foreach (var item in blueListItemsLinq)

       Console.WriteLine(item.TextContent);

   

   Console.WriteLine();

   Console.WriteLine("CSS:");

   

   foreach (var item in blueListItemsCssSelector)

       Console.WriteLine(item.TextContent);




3.网络页面抓取


   string page = NetHelper.Get("http://www.jnqianle.cn");

   var parser = new HtmlParser();

   var dom = parser.ParseDocument(page);

   

   //var itemList = dom.QuerySelectorAll(".casecenter .list .item");

   //foreach (var item in itemList)

   //{

   //    Console.WriteLine(item.TextContent.Trim());

   //}

   

   var listDom = dom.QuerySelector(".casecenter .list");

   

   var titleList = listDom.QuerySelectorAll(".subtitle");

   foreach (var item in titleList)

   {

       Console.WriteLine(item.TextContent);

   }