C#HTML解析利器HtmlAgilityPack


  HtmlAgilityPack是一個開源的解析HTML元素的類庫,最大的特點是可以通過XPath來解析HMTL,如果您以前用C#操作過XML,那么使用起HtmlAgilityPack也會得心應手。目前最新版本為1.4.6,下載地址如下:http://htmlagilitypack.codeplex.com/ 目前穩定的版本是1.4.6,上一次更新還是2012年,所以很穩定,基本功能全面,也沒必要更新了。 

  提到HtmlAgilityPack,就必須要介紹一個輔助工具,不知道其他人在使用的時候,是如何分析頁面結構的。反正我是使用官方提供的一個叫做HAPExplorer的工具。非常有用。下面我們在使用的時候會介紹如何使用。

 

還是以遼寧省為例:http://www.tianqihoubao.com/lishi/ln.htm ,打開頁面,右鍵獲取網頁源代碼后,粘貼到 HAPExplorer 中,也可以直接在HAPExplorer 中打開鏈接,如下面的動畫演示:

 

  我們可以看到,右側的XPath地址,div結束后,下面都是dl標簽,就是我們要采集的行了。下面我們用代碼來獲取上述結構。先看看獲取頁面源代碼的代碼:

1
2
3
4
5
6
7
8
9
10
public  static  string  GetWebClient( string  url)
{
     string  strHTML =  "" ;
     WebClient myWebClient =  new  WebClient();            
     Stream myStream = myWebClient.OpenRead(url);
     StreamReader sr =  new  StreamReader(myStream, Encoding.Default); //注意編碼
     strHTML = sr.ReadToEnd();
     myStream.Close();
     return  strHTML;
}

 

public  static  void  ParsePageByArea(String cityCode)
{
     //更加鏈接格式和省份代碼構造URL
     String url = String.Format( "http://www.tianqihoubao.com/lishi/{0}.htm" , cityCode);
     //下載網頁源代碼 
     var  docText = HtmlHelper.GetWebClient(url);
     //加載源代碼,獲取文檔對象
     var  doc =  new  HtmlDocument(); doc.LoadHtml(docText);
     //更加xpath獲取總的對象,如果不為空,就繼續選擇dl標簽
     var  res = doc.DocumentNode.SelectSingleNode( @"/html[1]/body[1]/div[1]/div[6]/div[1]/div[1]/div[3]" );
     if  (res !=  null )
     {
         var  list = res.SelectNodes( @"dl" ); //選擇標簽數組
         if  (list.Count < 1)  return ;
         foreach  ( var  item  in  list)
         {
             var  dd = item.SelectSingleNode( @"dd" ).SelectNodes( "a" );
             foreach  ( var  node  in  dd)
             {
                 var  text = node.InnerText.Trim();
                 //拼音代碼要從href屬性中進行分割提取
                 var  herf = node.Attributes[ "href" ].Value.Trim().Split( '/' '.' );
                 Console.WriteLine( "{0}:{1}" , text, herf[herf.Length - 2]);
             }
         }
     }
}
源地址:http://www.cnblogs.com/asxinyu/p/CSharp_HtmlAgilityPack_XPath_Weather_Data.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM