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 層 }