发布:2022/12/27 10:18:26作者:管理员 来源:本站 浏览次数:744
一、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);
}
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4