.Net Core下使用HtmlAgilityPack解析采集互联网数据

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: .Net Core下使用HtmlAgilityPack解析采集互联网数据

HtmlAgilityPack应该算是.Net下最好用的html解析库了。

 

因为最近帮朋友采集一些数据,在nuget里面搜索了好几个库,最后决定就用HtmlAgilityPack。并简单的记录下使用的姿势。

直接使用nuget包安装

Install-Package HtmlAgilityPack -Version 1.11.16

1.下载网页

该库提供了一个下载网页的类:HtmlWeb

var webGet = new HtmlWeb(); 
var document = webGet.Load(url);

如果网络正常的话,就会拿到一个HtmlDocument的对象。后面我们所有的操作都是基于该类做的。

我个人更喜欢使用HttpClient来下载网页,然后使用HtmlDocument来LoadHtml。因为自己使用HTMLClient可控性更高。比如要加代理IP,随机设置UA等操作。

当然简单的使用,使用HtmlWeb就差不多了。

2.解析网页

第一步拿到的htmlDocument对象,里面提供了很多操作。

 

举个栗子,比如我们要获取网页的文章的作者,直接在Chrome中右键->审查元素->elements->右键->Copy->Copy Xpath

document.DocumentNode.SelectSingleNode("Chrome复制的xpath")?.InnerText

然后就成功采集到了作者名字

如何解析列表?

用博客园举栗子,首页就是一个列表文章页。我们如何获取到这个列表所有的项呢?

var nodes =  document.DocumentNode.SelectNodes("xpath表达式")

如果熟悉xpath的老哥们就知道使用双斜杠开头的,就可以获取到多项节点的结果。比如博客园的表达式为: //div[@class='post_item'],然后获取到HtmlDocument的一个集合,再解析集合的子节点,就行了!

如何删除标签?

有些文章中,会隐藏a标签来给批量采集的人下毒。

可以直接使用Descendants方法找到所有的a标签,然后删除

var aNodes = 获取到的HtmlDocument对象.DocumentNode.Descendants("a")
 foreach (var anode in aNodes.ToArray())
            {
                anode.Remove();
            }

如果要采集图片呢?

一般图片地址放在img的src属性上,

var imgNodes = detail.DocumentNode.Descendants("img");
            foreach (var img in imgNodes)
            {
                string imgurl = img.GetAttributeValue("src","");
            }

获取到地址,就可以使用HTTPClient来下载图片并保存到文件夹中

 

如何修改节点属性?

举个栗子,如果我们把图片上传到我们的服务器,然后要在文章中替换掉别人的图片地址,那应该怎么做呢?

var imgNodes = detail.DocumentNode.Descendants("img");
            foreach (var img in imgNodes)
            {
                img.SetAttributeValue("src", "图片地址");
            }

基本上,掌握这几点,就能到处去采集别人的网站了。

当然HtmlAgilityPack的功能远远不止本文所描述的这些,更多的功能,可能需要有更深入的需求才会用到,

目录
相关文章
|
4天前
|
域名解析 存储 缓存
域名解析服务器:连接你与互联网的桥梁
域名解析服务器:连接你与互联网的桥梁
|
9天前
|
开发框架 前端开发 .NET
asp.net core 使用 AccessControlHelper 控制访问权限
asp.net core 使用 AccessControlHelper 控制访问权限
|
21天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
29 10
|
2天前
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
9 0
|
26天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
3天前
|
存储 JSON NoSQL
技术心得记录:在.NETCore中使用CSRedis
技术心得记录:在.NETCore中使用CSRedis
|
4天前
|
SQL 开发框架 .NET
(20)ASP.NET Core EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
(20)ASP.NET Core EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
|
26天前
|
XML 开发框架 人工智能
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
|
26天前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
25天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。

推荐镜像

更多