天天看點

C# HtmlAgilityPack 頁面結構解析

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