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