• 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
  • 相关阅读:
    基于Redis的短链接设计思路
    再谈对协变和逆变的理解(Updated)
    Java基础—ClassLoader的理解
    遇到个小问题,Java泛型真的是鸡肋吗?
    一次失败升级后的反思
    JVM是如何分配和回收内存?有实例!
    一个Java对象到底占用多大内存?
    《深入理解Java虚拟机》读书笔记:垃圾收集器与内存分配策略
    快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
    快速掌握RabbitMQ(一)——RabbitMQ的基本概念、安装和C#驱动
  • 原文地址:https://www.cnblogs.com/l1pe1/p/7197434.html
Copyright © 2020-2023  润新知