AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作。允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取、数据提取和处理等任务。

安装

第一步,老规矩,先安装

Install-Package AngleSharp

使用

解析 HTML 文档

using AngleSharp.Html.Parser;

var html = @"

Hello, World!

";

// 创建 HTML 解析器

var parser = new HtmlParser();

var document = parser.ParseDocument(html);

// 查找

元素

var h1 = document.QuerySelector("h1");

// 输出

中的文本

Console.WriteLine(h1.TextContent); // Output: Hello, World!

解析并抓取网页

// 创建 HttpClient 来抓取网页

using AngleSharp.Html.Parser;

using var httpClient = new HttpClient();

var html = await httpClient.GetStringAsync("https://www.hunji.xyz/");

// 创建 HTML 解析器

var parser = new HtmlParser();

var document = parser.ParseDocument(html);

// 查找页面中的标题

var title = document.QuerySelector("title");

// 输出页面标题

Console.WriteLine(title.TextContent);

DOM 操作

选择器和查询

var h1 = document.QuerySelector("h1"); // 获取第一个

元素

var allLinks = document.QuerySelectorAll("a"); // 获取所有 标签

获取元素属性

var firstLink = document.QuerySelector("a");

var href = firstLink.GetAttribute("href");

Console.WriteLine(href); // 输出链接地址

修改元素

var heading = document.QuerySelector("h1");

heading.TextContent = "New Heading"; // 修改文本内容

heading.SetAttribute("class", "new-class"); // 修改 class 属性

遍历节点

var links = document.QuerySelectorAll("a");

foreach (var link in links)

{

Console.WriteLine(link.GetAttribute("href"));

}

4异步操作

using AngleSharp.Html.Parser;

using AngleSharp.Dom;

using System;

using System.Net.Http;

using System.Threading.Tasks;

class Program

{

static async Task Main()

{

// 使用异步抓取网页内容

using var client = new HttpClient();

var html = await httpClient.GetStringAsync("
https://www.hunji.xyz/");

    // 使用 HTML 解析器解析网页
var parser = new HtmlParser();
var document = await parser.ParseDocumentAsync(html); // 操作 DOM
var h1 = document.QuerySelector("h1");
Console.WriteLine(h1.TextContent);
}

}

5. 实战:抓取网页中的所有链接

using AngleSharp.Html.Parser;

using AngleSharp.Dom;

using System;

using System.Net.Http;

using System.Threading.Tasks;

class Program

{

static async Task Main()

{

// 获取网页

using var httpClient = new HttpClient();

var html = await httpClient.GetStringAsync("https://www.hunji.xyz/");

    // 创建解析器
var parser = new HtmlParser();
var document = await parser.ParseDocumentAsync(html); // 获取所有的链接
var links = document.QuerySelectorAll("a"); // 输出所有链接
foreach (var link in links)
{
var href = link.GetAttribute("href");
Console.WriteLine(href);
}
}

}

总结

AngleSharp 是一个强大的工具,可以帮助你在 C# 中进行 HTML 和 XML 的解析和操作。它对于网页抓取、数据提取等任务非常有用。通过提供类似浏览器的 DOM 操作接口,它能使你更容易地处理和操作网页内容。

欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节

AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档的更多相关文章

  1. sax解析案例(javabean封装xml文档数据)

    package itcast.sax; import java.io.IOException; import java.util.List; import javax.xml.parsers.Pars ...

  2. PHP中利用DOM和simplxml读取xml文档

    实例  用DOM获取下列xml文档中所有金庸小说的书名,该xml文档所在位置为 ./books.xml: <?xml version="1.0" encoding=" ...

  3. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  4. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  5. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  6. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  7. 四种生成和解析XML文档的方法介绍

    解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 1.DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方 ...

  8. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  9. IOS 解析XML文档

    前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里 ...

  10. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. vmware ESXi快速创建新的虚拟机

    ​准备工作:新虚拟机Win10 安装后,需要windows update,更新补丁到最新,关机.(本文案例win10-Amadeus) 在数据盘新建Win10-Users文件夹(可自定义) 复制win ...

  2. 【报错解决】【Linux】Name or service not known

    # 配置文件位置 /etc/sysconfig/network-scripts/ # nano ifcfg-eth0查看网卡配置,确认dns已配置,且网关已配置 在虚拟机中添加临时路由网关(要与物理主 ...

  3. 更改linux文件/目录的权限、拥有者及用户组

    在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用户可以修改该文件的拥有者及用户组,root用户可以修改任何文件的拥有者及用户组. 在Linux中,对于文件的权限(rwx), ...

  4. shell 判断是否已安装了某个软件

    判断是否安装了node 复制if ! type node >/dev/null 2>&1; then echo 'node 未安装'; else echo 'node 已安装'; ...

  5. 使用Apache commons-pool2实现高效的FTPClient连接池的方法

    一. 连接池概述​ 频繁的建立和关闭连接,会极大的降低系统的性能,而连接池会在初始化的时候会创建一定数量的连接,每次访问只需从连接池里获取连接,使用完毕后再放回连接池,并不是直接关闭连接,这样可以保证 ...

  6. Springboot 指定外部配置文件启动

    <resources> <resource> <directory>src/main/resources</directory> <filteri ...

  7. Qt/C++入门基础学习001-绘图基础

    这一节介绍 Qt 的绘图基础知识,我们都知道,Qt 里绘图使用的是 QPainter,但是首先需要弄明白:在什么上绘图和在哪里绘图,然后才是怎么绘图,我们就围绕这几个问题来展开. 在什么上绘图 The ...

  8. Qt/C++音视频开发49-推流到各种流媒体服务程序

    一.前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx.LiveQing.EasyDarwin.nginx-rtmp.ZLMediaKit.srs.A ...

  9. IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践

    本文由得物技术团队Uni分享,即时通讯网收录时有内容修订和排版优化. 一.引言 本文要分享的是得物技术团队基于Electron开发客服IM桌面端的技术实践过程,内容包括桌面技术选型.Electron的 ...

  10. 深入理解ASP.NET Core 管道的工作原理

    在 .NET Core 中,管道(Pipeline)是处理 HTTP 请求和响应的中间件组件的有序集合.每个中间件组件都可以对请求进行处理,并将其传递给下一个中间件组件,直到请求到达最终的处理程序.管 ...