程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Html Agility Pack 解析Html,agilitypack

Html Agility Pack 解析Html,agilitypack

編輯:C#入門知識

Html Agility Pack 解析Html,agilitypack


Hello 好久不見 哈哈,今天給大家分享一個解析Html的類庫 Html Agility Pack。這個適用於想獲取某網頁裡面的部分內容。今天就拿我的Csdn的博客列表來舉例。

打開頁面  用Firebug 找到文章列表的內容區域

如上面圖片 我們已經找到了想要的內容 在Html 中的位置

那麼接下來 第一步就是獲取Html  然後 用Html Agility Pack 找出我們想要的東西

1. 獲網頁的Html

 1  #region 獲取文章列表 +GetHtml(string url)
 2         /// <summary>
 3         /// 獲取文章列表 Add shuaibi 2015-03-08
 4         /// </summary>
 5         /// <param name="url">頁面地址</param>
 6         /// <returns>文章列表</returns>
 7         public List<Model> GetHtml(string url)
 8         {
 9             var myWebClient = new WebClient();
10             var myStream = myWebClient.OpenRead(url);
11             var list = GetMessage(myStream); //這裡調用的是下面的方法
12             if (myStream != null) myStream.Close();
13             return list;
14         } 
15         #endregion

2. 用Html Agility Pack 找出我們想要的東西

#region 處理文章信息 +GetMessage(Stream myStream)
        /// <summary>
        /// 處理文章信息 Add shuaibi 2015-03-08
        /// </summary>
        /// <param name="myStream">網頁的數據流</param>
        /// <returns></returns>
        private static List<Model> GetMessage(Stream myStream)
        {
            var document = new HtmlDocument();
            document.Load(myStream, Encoding.UTF8);
            var rootNode = document.DocumentNode;
            var messageNodeList = rootNode.SelectNodes(MessageListXPath);
            return messageNodeList.Select(messageNode => HtmlNode.CreateNode(messageNode.OuterHtml)).Select(temp => new Model
            {
                Title = temp.SelectSingleNode(MessageNameXPath).InnerText,
                Href = "http://blog.csdn.net" + temp.SelectSingleNode(MessageNameXPath).Attributes["href"].Value,
                Content = temp.SelectSingleNode(MessageContxtXPath).InnerText,
                Time = Convert.ToDateTime(temp.SelectSingleNode(MessageTimeXPath).InnerText),
                ComeFrom = "csdn"
            }).ToList();
        } 
        #endregion

看完上面說完了方法和步驟 細心的你是不是發現的什麼問題。哈哈,說一半天了都沒說這類庫怎麼用,還有第二個方法裡面那幾個變量是啥。

現在來說怎麼獲取 Html Agility Pack 下載地址http://htmlagilitypack.codeplex.com/ 下載後解壓壓縮包就會發現HtmlAgilityPack.dll 在項目中右鍵添加引用就可以了

然後就是 幾個變量的問題了

1.下面這句話是 獲取全部 class為list_item article_item開始的div

/// <summary>
        /// 獲取文章列表
        /// </summary>
        private const string MessageListXPath = "//div[starts-with(@class,'list_item article_item')]";

2.下面這句話是 獲取上面獲取出來的集合裡面每一項的標題

/// <summary>
        /// 獲取標題 解釋: 第一個div,下的第一個div,下的第一個h1,下的第一個span,下的第一個a標簽
        /// </summary>
        private const string MessageNameXPath = "/div[1]/div[1]/h1[1]/span[1]/a[1]";

3.和上面一樣這個是獲取內容

/// <summary>
        /// 獲取內容 解釋: 第一個div,下的第二個div
        /// </summary>
        private const string MessageContxtXPath = "/div[1]/div[2]";

4.這個是獲取發布時間

/// <summary>
        /// 獲取時間 這個就是 獲取 第一個div,下的第3個div,下的span
        /// </summary>
        private const string MessageTimeXPath = "/div[1]/div[3]/span";

上面這些代碼都是 根據第一張圖片來的。

第二次發,說的不好請見諒。希望和大家成為盆友共同進步嘿嘿

最後附上實體內的代碼

using System;


namespace MessageHelper
{
   public class Model
    {
       public string Title { get; set; } //標題
       public string Content { get; set; } //內容
       public string Href { get; set; } //文章鏈接
       public string ComeFrom { get; set; } //來源
       public DateTime Time { get; set; } //發布時間

    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved