.net下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备
HtmlAgilityPack是一个.NET平台下的HTML解析库,它可以将HTML文本转换为DOM文档对象,方便我们对HTML文本进行操作和分析。HtmlAgilityPack支持XPath语法,可以通过XPath表达式来获取DOM节点,同时还提供了一些方便的API,可以实现HTML文本的解析、修改、生成等功能。本文将详细介绍HtmlAgilityPack的使用及使用方法。
一、HtmlAgilityPack的安装
HtmlAgilityPack是一个NuGet包,可以通过Visual Studio的NuGet包管理器来安装。具体步骤如下:
- 打开Visual Studio,打开要安装HtmlAgilityPack的项目。
- 在“解决方案资源管理器”中右键单击项目,选择“管理NuGet程序包”。
- 在“NuGet程序包管理器”中搜索“HtmlAgilityPack”,选择“安装”。
- 等待安装完成。
安装完成后,就可以在项目中使用HtmlAgilityPack了。
二、HtmlAgilityPack的使用
- 加载HTML文本
使用HtmlAgilityPack解析HTML文本的第一步是将HTML文本加载到一个HtmlDocument对象中。可以通过以下代码来实现:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);
其中,htmlText是要解析的HTML文本。LoadHtml方法会将HTML文本解析成一个DOM文档对象,并存储在doc对象中。
- 获取DOM节点
HtmlAgilityPack提供了一些方法来获取DOM节点,例如GetElementById、GetElementsByTagName、SelectSingleNode、SelectNodes等。这些方法都接受一个XPath表达式作为参数,用来指定要获取的节点。以下是一些示例代码:
// 获取id为"content"的节点
HtmlNode contentNode = doc.GetElementById("content");
// 获取所有的a标签
HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");
// 获取第一个p标签
HtmlNode pNode = doc.DocumentNode.SelectSingleNode("//p");
其中,XPath表达式的语法与XML的XPath语法相同。在这里不再详细介绍。
- 修改DOM节点
HtmlAgilityPack提供了一些方法来修改DOM节点,例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例代码:
// 修改id为"content"的节点的class属性
contentNode.SetAttributeValue("class", "new-class");
// 修改第一个p标签的内容
pNode.InnerHtml = "这是新的内容";
// 修改第一个a标签的href属性
HtmlNode aNode = aNodes[0];
aNode.SetAttributeValue("href", "http://www.example.com");
- 生成HTML文本
HtmlAgilityPack还可以将DOM文档对象转换为HTML文本。可以通过以下代码来实现:
string newHtmlText = doc.DocumentNode.OuterHtml;
其中,OuterHtml属性返回DOM文档对象的HTML文本表示。
三、HtmlAgilityPack的功能实例
下面将通过一些具体的实例来演示HtmlAgilityPack的使用方法。
- 获取页面标题
以下代码演示了如何获取页面标题:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);
HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
string title = titleNode.InnerHtml;
其中,htmlText是要解析的HTML文本。首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//title”获取页面标题节点。最后,通过InnerHtml属性获取标题的内容。
- 获取页面中的所有图片
以下代码演示了如何获取页面中的所有图片:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);
HtmlNodeCollection imgNodes = doc.DocumentNode.SelectNodes("//img");
foreach (HtmlNode imgNode in imgNodes)
{
string src = imgNode.GetAttributeValue("src", "");
Console.WriteLine(src);
}
首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//img”获取所有图片节点。最后,遍历所有图片节点,获取每个节点的src属性。
- 获取页面中的所有链接
以下代码演示了如何获取页面中的所有链接:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);
HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");
foreach (HtmlNode aNode in aNodes)
{
string href = aNode.GetAttributeValue("href", "");
Console.WriteLine(href);
}
首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//a”获取所有链接节点。最后,遍历所有链接节点,获取每个节点的href属性。
- 修改页面中的所有链接
以下代码演示了如何将页面中的所有链接修改为指定的链接:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);
HtmlNodeCollection aNodes = doc.DocumentNode.SelectNodes("//a");
foreach (HtmlNode aNode in aNodes)
{
aNode.SetAttributeValue("href", "http://www.example.com");
}
string newHtmlText = doc.DocumentNode.OuterHtml;
首先,将HTML文本加载到一个HtmlDocument对象中。然后,通过XPath表达式“//a”获取所有链接节点。最后,遍历所有链接节点,将它们的href属性修改为指定的链接。最后,通过OuterHtml属性将修改后的DOM文档对象转换为HTML文本。
本文介绍了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一个功能强大、易用性高的HTML解析库,可以方便地对HTML文本进行操作和分析。通过本文的介绍,读者可以了解HtmlAgilityPack的基本用法,并可以根据需要自行扩展。

.net下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备的更多相关文章
- 大众点评评论数据抓取 反爬虫措施有css文字映射和字体库反爬虫
大众点评评论数据抓取 反爬虫措施有css文字映射和字体库反爬虫 大众点评的反爬虫手段有那些: 封ip,封账号,字体库反爬虫,css文字映射,图形滑动验证码 这个图片是滑动验证码,访问频率高的话,会出 ...
- python--爬虫入门(八)体验HTMLParser解析网页,网页抓取解析整合练习
python系列均基于python3.4环境 基本概念 html.parser的核心是HTMLParser类.工作的流程是:当你feed给它一个类似HTML格式的字符串时,它会调用goahead方法 ...
- Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用
大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...
- Python爬虫入门教程 39-100 天津市科技计划项目成果库数据抓取 scrapy
爬前叨叨 缘由 今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下来,发现这个网站除了卡慢,经常自己宕机以外,好像还真没有什么特殊的.. ...
- Mac 平台下功能强大的Shimo软件使用指南
年初自从换了MAC工作站后,彻底享受了Apple产品给我们带来的完美体验,可能是刚转过来不适应,在访问网络设备时觉得远程连接不方便,例如ssh,vpn登陆都不是很方便,后来又安装了openvpnfor ...
- 利用HtmlAgilityPack库进行HTML数据抓取
主要介绍基于XPATH的文本分析方式的实现,代码如下: using System; using System.Collections.Generic; using System.Linq; using ...
- 美团店铺数据抓取 token解析与生成
美团.点评网的token都是用一套加密算法,实际上就是个gzip压缩算法.加密了2次,第一次是加密了个sign值,然后把sign值带进去参数中进行第二次加密,最后得出token 分析请求 打开上海美食 ...
- (9)分布式下的爬虫Scrapy应该如何做-关于ajax抓取的处理(一)
转载请注明出处:http://www.cnblogs.com/codefish/p/4993809.html 最近在群里频繁的被问到ajax和js的处理问题,我们都知道,现在很多的页面都是用动态加载的 ...
- 【转】python3解析库lxml
转自:http://www.cnblogs.com/zhangxinqi/p/9210211.html 阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2 ...
- .Net Core下使用HtmlAgilityPack解析采集互联网数据
HtmlAgilityPack应该算是.Net下最好用的html解析库了. 因为最近帮朋友采集一些数据,在nuget里面搜索了好几个库,最后决定就用HtmlAgilityPack.并简单的记录下使用的 ...
随机推荐
- PLE-实践小结-2308-cnblogs
某场景介绍 前状:三模型,权重融合 解决问题:融合目标行为,充分利用样本信息,节省资源开销. 当前效果 主场景人均真实曝光+0.26%,不显著:子场景人均真实曝光+0.35%,不显著 千曝互动+2.6 ...
- (转) [Android测试] AS+Appium+Java+Win自动化测试之三: 基础知识和Appium界面
一.把上一章的demo先看懂 AndroidContactsTest.Java public class AndroidContactsTest { //Driver private AppiumDr ...
- 将excel中的多列内容合并为一列
有需求,就有方法.实现如下: 1. 需求: 将A.B两列数据合并为一列 2. 方法: 2.1 在C列输入A.B两列合并后的数据:501001001 2.2 选中C列,按组合键 Ctrl+E,在C列中就 ...
- xshell批量新建会话
1,xshell的会话形式就是文件夹和文件,我们只需要修改文件名称即可,但是一个个弄很麻烦,可以利用这个程序来批量新建(程序很烂,但能用) 基于python编写,文件处理 --> 文件下载 提取 ...
- Spring面试攻略:如何展现你对Spring的深入理解
什么是Spring?谈谈你对IOC和AOP的理解. Spring是一种Java开发框架,旨在简化企业级应用程序的开发和部署.它具有以下优点: 对象托管:Spring能够管理和赋值所有对象,使开发人员不 ...
- 三维模型OSGB格式轻量化的数据压缩与性能平衡分析
三维模型OSGB格式轻量化的数据压缩与性能平衡分析 在三维模型应用中,OSGB格式轻量化处理是一种常见的技术手段,它可以通过数据压缩.简化.滤波等操作,降低三维模型数据的存储空间和传输带宽需求,提高应 ...
- Jmeter插件PerfMon Metrics Collector安装使用及报错解决
Jmeter作为一个轻量级的性能测试工具,开源.小巧.灵活的特性使其越来越受到测试人员喜爱.在实际的 项目中,特别是跨地区项目,排除合作方指定要求使用Loadrunner作为性能测试工具外,Jmete ...
- 揭秘ChatGPT,如何打造自己的自定义指令
一.ChatGPT-0720更新 又在深夜,正要打开ChatGPT官网测试下pdf对话功能,发现ChatGPT又有更新.本次更新总结有2点: 1.对于Plus用户,GPT-4的使用限额从25条/3h提 ...
- 这才叫 API 接口设计!
API 接口设计 Token 设计 Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上 ...
- 「codeforces - 1621G」Weighted Increasing Subsequences
link. 一个 dp(拜谢 ly)和切入点都略有不同的做法,并不需要观察啥性质. 原问题针对子序列进行规划,自然地想到转而对前缀进行规划.接下来我们考虑一个前缀 \([1, i]\) 以及一个 \( ...