HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。简单的来说,在页面上查询元素速度更快,更准。
HtmlWeb web = new HtmlWeb();//创建Web请求
HtmlAgilityPack.HtmlDocument doc = web.Load(m);//加载页面的链接
var json = Common.Http_Get(m);//获取网页源代码
//获取某个节点的集合,这里获取出现 p 标签 的集合
var nodes = doc.DocumentNode.SelectNodes("//p");
//遍历集合
foreach (HtmlNode node in nodes)
{
try
{
//获取其中一个出现p标签的HTML源码
HtmlNode thumbnail = HtmlNode.CreateNode(node.OuterHtml);
//获取p标签文本内容
var thumbnailstr = thumbnail.InnerText.Trim();
// 获取img目录下的img标签中的图片链接
var img_node = thumbnail.SelectSingleNode("//img");
var img = img_node.Attributes["src"].Value;
//获取a目录下a标签class属性为ql-link 的节点
var link_node = thumbnail.SelectSingleNode("//a[@class='ql-link']");
var link = link_node.Attributes["href"].Value;
}catch{}
}
注意:记得XPath表达式要写对,否则会报错或查询不到某元素
/ {从根节点选取}
// {选择元素后代元素,必须在后面跟上nodeName}
. {选取当前节点}
… {选取当前节点的父节点}
@ {选取属性节点(@是attribute的缩写)}
/root/child[3] {选取root元素的第三个child子元素,注意,这和数组下标不一样,从1开始计数}
//child[@attr] {选取所有具有属性attr的child元素}
body/p[position()=4] {这个XPath表达式将选取body子元素中第4个p元素,注意这里从1开始计数}
//div[@class=‘ql-link’] {获取某个class属性为ql-link 的div 层 }