传统解析html标签的方式是利用HttpWebRequest获取html字符串,然后通过正则表达式进行解析,但是这种方式比较麻烦。有没有更简单的方式呢?有,那就是Html Agility Pack,它可以做到像用XmlDocument类来解析xml一样轻松、方便,并且是开源的
其源代码可以通过github下载,下载地址为:https://github.com/zzzprojects/html-agility-pack
其官网地址为:https://html-agility-pack.net/
进入官网后如下图:
点击图中绿色方框框住的Download Now按钮,进入下载页面,如下图:
点击图中的NuGet Download按钮,进入NuGet下载页面,如下图:
点击图中的绿色方框的按钮,进行复制内容Install-Package HtmlAgilityPack -Version 1.8.11,然后使用vistual studio进行下载,不会使用NuGet下载的小伙伴不用担心,我尽量讲详细一点,如果还看不懂,我还会给出参考教程。在这里说一句,如果作为开发者,如果连使用NuGet下载第三方库都不会用,那就说不过去了。好了,言归正传。
如果会使用NuGet的,下面用/*****/包起来的内容可以不用看。
/*****************************************************************************************************************************************/
接着打开你的vistual studio,选中你的项目,选择菜单栏中的 "工具"->"库程序包管理器"->"程序包管理器控制台",打开程序包管理控制台,并把刚才复制的内容粘贴到控制台内进行下载,如下图:
从图中可以看出:我安装前两个版本都没有成功,因为我的vs2012跟下载的版本对应不上,出现这种情况,可以选择更低一点的版本进行安装,前面图中NuGet下载页面下面列出了历史版本,选择更低的版本进行下载,我这里选择了最低的版本1.3.0进行下载就安装成功了。
NuGet使用教程:
NuGet使用教程(gif动态图的方式演示):https://blog.csdn.net/zxy13826134783/article/details/85336968
NuGet学习笔记(1)——初识NuGet及快速安装使用:https://kb.cnblogs.com/page/143190/
VS使用Nuget教程详解 Visual studio 安装第三方的组件库:
https://www.cnblogs.com/dathlin/p/7705014.html
VS2013中Nuget程序包管理器控制台使用入门:http://www.cnblogs.com/wangqiideal/p/4672329.html
注意:进行了Nuget程序包管理器安装后,打开程序包管理控制台就变成"工具"->"NeGet库程序包管理器"->"程序包管理器控制台"
/***********************************************************************************************************************************************/
好了,做了那么多,终于是到了编程操作了,在这里,我们对百度首页的html进行解析
先上一张大图:
如上图,我们要拿到<title>标签里面的内容和id选择器为u1下的所有<a>标签“href”属性的内容和a标签里面的内容
完整代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HtmlAgilityPack; //需要添加的命名空间
namespace HtmlAgilityDll
{
class HtmlAgilityPackDemo
{
static void Main(string[] args)
{
string url = "http://www.baidu.com";
HtmlWeb web = new HtmlWeb();
//从url中加载
HtmlDocument doc=web.Load(url);
//获得title标签节点,其子标签下的所有节点也在其中
HtmlNode headNode=doc.DocumentNode.SelectSingleNode("//title");
//获得title标签中的内容
string Title=headNode.InnerText;
Console.WriteLine(Title);
Console.WriteLine(".........................................");
//获得id选择器为u1标签(是u1非ul(L))节点
HtmlNode aNode = doc.DocumentNode.SelectSingleNode("//div[@id='u1']");
//获得ul标签下的所有子节点
HtmlNodeCollection aCollection=aNode.ChildNodes;
foreach (var item in aCollection)
{
//获得标签属性为href的值
string aValue=item.Attributes["href"].Value;
//获得标签内的内容
string aInterText= item.InnerText;
Console.WriteLine("属性值:"+aValue+"\t"+"标签内容:"+aInterText);
}
Console.ReadKey();
}
}
}
运行结果如下图:
好了,有小小的遗憾,从图中可以看出最后两个a标签中的网址前面不见了http:,可能是我下载的版本过低了吧。
Html Agility Pack使用教程:
https://www.cnblogs.com/xuliangxing/p/8004403.html