zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    2014年寒假学习规划
    二十进制数的加法--【英雄会】
    使用IBM SVC构建vSphere存储间集群
    游戏服务器学习笔记 2———— 准备工作
    php判断正常访问和外部访问
    游戏服务器学习笔记 3———— firefly 的代码结构,逻辑
    数学基础知识 ——(1)高等数学
    动态内存与智能指针
    Numpy(4)—— 保存和导入文件
    Numpy(3)—— 线性代数相关函数
  • 原文地址:https://www.cnblogs.com/l1pe1/p/7197434.html
Copyright © 2011-2022 走看看