介绍对象:html_agility_pack
html_agility_pack可以从web、文本、字节流、文件解析html,是一款不错的网络爬虫,html解析利器,支持net4.0++
本文将介绍如何使用该框架,获取html节点、属性等等常用功能,更多功能就有待自己去发掘吧
这里插播另一款解析工具(NSoup):https://blog.csdn.net/czjnoe/article/details/106600070
github:https://github.com/zzzprojects/html-agility-pack
官方文档:https://html-agility-pack.net/documentation
demo地址:https://github.com/czjnoe/GitHubDemo/tree/master/html-agility-packDemo
gitHub下载慢?参考文章:https://blog.csdn.net/czjnoe/article/details/106034095
代码操作:
以百度官网(http://www.baidu.com)为操作对象:
注意:"//"表示从根节点开始查找,两个斜杠‘//’表示查找所有childnodes;一个斜杠'/'表示只查找第一层的childnodes;点斜杠"./"表示从当前结点而不是根结点开始查找。
//注意==>"//"表示从根节点开始查找,两个斜杠‘//’表示查找所有childnodes;一个斜杠'/'表示只查找第一层的childnodes;点斜杠"./"表示从当前结点而不是根结点开始查找。
//从web读取
{
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;
//获得class为s_tab_inner下,标签为a的所有节点
HtmlNodeCollection classNode = doc.DocumentNode.SelectNodes("//div[@id='head']");
//遍历节点
foreach (var item in classNode)
{
//从当前节点开启查找,id为ul的节点
var collectionNodes= item.SelectNodes("./div[@id='u1']");
}
//获得id为head下的所有节点
HtmlNodeCollection idNode = doc.DocumentNode.SelectNodes("//div[@class='s_tab_inner']/a");
//遍历idNode
foreach (var item in idNode)
{
var OuterHtml=item.OuterHtml;//当前节点的html源码
var InnerHtml = item.InnerHtml;//当前节点的子节点的html源码
var InnerText = item.InnerText;//当前节点文本值
//获得标签属性为href的值
string aValue = item.Attributes["href"]?.Value;
//获得标签内的内容
string aInterText = item.InnerText;//获取文本值
Console.WriteLine("属性值:" + aValue + "\t" + "标签内容:" + aInterText);
}
//获得id为head下的第一个a节点
HtmlNode idSingleNode = doc.DocumentNode.SelectSingleNode("//div[@class='s_tab_inner']/a");
//获取子节点
HtmlNodeCollection s_tab_innerChildCollection = idSingleNode.ChildNodes;
}
//从文件读取
{
var doc = new HtmlDocument();
doc.Load("filePath");//文件路径
}
//字符串读取
{
var doc = new HtmlDocument();
doc.LoadHtml("字符串");
}