使用HtmlAgilityPack采集墨迹天气中的天气数据

需要解析对应的HTML源码:

<div class="left">
        <div class="wea_alert clearfix">
            <ul>
                                <li>
                    <a href = "https://tianqi.moji.com/aqi/china/jiangxi/hukou-county" >
                        < span class="level level_2">
                            <img src = "https://h5tq.moji.com/tianqi/assets/images/aqi/2.png" alt="88 良">
                        </span>
                        <em>88</em>
                    </a>
                </li>
                                            </ul>
        </div>
        <div class="wea_weather clearfix">
            <em>30</em>
            <span><img src = "https://h5tq.moji.com/tianqi/assets/images/weather/w1.png" alt="多云"></span>
            <b>多云</b>
            <strong class="info_uptime">今天17:04更新</strong>
        </div>
        <div class="wea_about clearfix">
            <span>湿度 50%</span>
            <em>南风3</em>
                    </div>
        <div class="wea_tips clearfix">
            <span>今日天气提示</span>
            <em>略微偏热,注意衣物变化。</em>
        </div>
    </div>
    <div class="right">
        <div class="wea_info_avator">
            <img src = "https://h5tq.moji.com/tianqi/assets//images/avator/icon/2.png" alt="墨迹天气 小墨哥">
            <div id = "windows_download" >
                < img src="https://h5tq.moji.com/tianqi/assets//images/icon/avator_windows.png" height="35" alt="Windows 下载">
                <a href = "http://download.moji001.com/mojiapp/windoz/MoWeatherInstall_1.8.1.1.exe" target="_blank">Windows 下载</a>
            </div>
        </div>
    </div>

接收数据的对象

public class MainInfos
    {
        /// <summary>
        /// 日期
        /// </summary>
        public string TodayDate { get; set; } = DateTime.Now.ToString("yyyy年MM月dd日");
        /// <summary>
        /// 温度
        /// </summary>
        public string  WenduStr { get; set; }
        /// <summary>
        /// 风向
        /// </summary>
        public string  FengsuStr { get; set; }
        /// <summary>
        ///气压
        /// </summary>
        public string  QiyaStr { get; set; }
        /// <summary>
        /// 湿度
        /// </summary>
        public string ShiduStr { get; set; }
        /// <summary>
        /// 降水
        /// </summary>
        public string JiangshuiStr { get; set; }
        /// <summary>
        ///空气指数
        /// </summary>
        public string KongqiZhishuStr { get; set; }
        /// <summary>
        /// 天气
        /// </summary>
        public string TianqiStr { get; set; }
        /// <summary>
        /// 更新时间
        /// </summary>
        public string GenxinShijianStr { get; set; }
        /// <summary>
        /// j今日提示
        /// </summary>
        public string JinriTishi { get; set; }
        /// <summary>
        /// 当前天气的图标地址
        /// </summary>
        public string ImagePath { get; set; }
      
    }

采集数据的方法:

 /// <summary>
    /// 读取天气数据
    /// </summary>
     public  static class ReadFromWeb
    {
        public static MainInfos GetFromUrl(string Url)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
            try
            { 
                HtmlWeb web = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = web.Load(Url);
                HtmlNode rootnode = doc.DocumentNode;
                MainInfos ThisMainInfos = null;
                HtmlNodeCollection GetUrlInfoNodes = doc.DocumentNode.SelectNodes("//div[@class='wrap clearfix wea_info']");
                if (GetUrlInfoNodes != null)
                {
                    ThisMainInfos = new MainInfos();
                    HtmlNode ThisMainNode = GetUrlInfoNodes.FirstOrDefault();
                    string InnerStr = ThisMainNode.InnerHtml;
                    //截取出来进行数据分析重新创建一个操作
                    HtmlDocument DOCJiequ = new HtmlDocument();
                    DOCJiequ.LoadHtml(InnerStr);
                    ///获取空气指数
                    HtmlNodeCollection NodesKongqizhishu  = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_alert clearfix']");
                    if (NodesKongqizhishu!=null && NodesKongqizhishu.Count >0 )
                    {
                        HtmlNode KongqiZhishuNode = NodesKongqizhishu[0];
                        ThisMainInfos.KongqiZhishuStr = KongqiZhishuNode.InnerText.Replace("\r\n","").Replace(" ","").Trim();
                    } 
                    ///获取天气温度 图标
                    HtmlNodeCollection NodesTianqiWendu = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_weather clearfix']");
                    if (NodesTianqiWendu != null && NodesTianqiWendu.Count > 0)
                    {
                        HtmlNode ThisWenduNode = NodesTianqiWendu[0]; 
                        HtmlNodeCollection WenduShowNodes = ThisWenduNode.ChildNodes;
                        HtmlNode WenduCanshuNode = WenduShowNodes.Where(x => x.Name == "em").FirstOrDefault();//温度
                        if (WenduCanshuNode!=null )
                        {
                            ThisMainInfos.WenduStr = WenduCanshuNode.InnerText;
                        }
                        HtmlNode TianqiCanshuNode = WenduShowNodes.Where(x => x.Name == "b").FirstOrDefault();//天气
                        if (TianqiCanshuNode != null)
                        {
                            ThisMainInfos.TianqiStr = TianqiCanshuNode.InnerText;
                        }
                        HtmlNode TianqiTubiaoCanshuNode = WenduShowNodes.Where(x => x.Name == "span").FirstOrDefault();//天气图标
                        if (TianqiTubiaoCanshuNode != null)
                        {
                            HtmlNode TianqiImageCanshuNode = TianqiTubiaoCanshuNode.FirstChild;//获取image标签
                            ThisMainInfos.ImagePath =TianqiImageCanshuNode.GetAttributeValue("src",string.Empty);
                        }
                        HtmlNode GenxinShijianCanshuNode = WenduShowNodes.Where(x => x.Name == "strong").FirstOrDefault();//更新时间
                        if (GenxinShijianCanshuNode != null)
                        {
                            ThisMainInfos.GenxinShijianStr = GenxinShijianCanshuNode.InnerText;
                        } 
                    }
                    ///获取湿度 风力
                    HtmlNodeCollection NodesShiduFengli= DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_about clearfix']");
                    if (NodesShiduFengli!=null &&  NodesShiduFengli.Count > 0)
                    {
                        HtmlNode ThisShiduFenliNode = NodesShiduFengli[0];
                        HtmlNode ShiduNode = ThisShiduFenliNode.ChildNodes.Where(x=>x.Name == "span").FirstOrDefault() ;//湿度
                        if (ShiduNode != null)
                        {
                            ThisMainInfos.ShiduStr = ShiduNode.InnerText;
                        }
                        HtmlNode FenliNode = ThisShiduFenliNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//风力
                        if (FenliNode != null)
                        {
                            ThisMainInfos.FengsuStr = FenliNode.InnerText;
                        } 
                    }
                    ///获取今日提示
                    HtmlNodeCollection NodesJinritishi = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_tips clearfix']");
                    if (NodesJinritishi != null && NodesJinritishi.Count > 0)
                    {
                        HtmlNode ThisJinriTishiNode = NodesJinritishi[0]; 
                        HtmlNode JinriTishiNode = ThisJinriTishiNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//今日提示
                        if (JinriTishiNode != null)
                        {
                            ThisMainInfos.JinriTishi = JinriTishiNode.InnerText;
                        } 
                    } 
                }
                return ThisMainInfos;

            }
            catch (WebException ex)
            {
                //连接失败
                return null;
            }
        }
    }

应用方法:

MainInfos ThisModel =  ReadFromWeb.GetFromUrl("https://tianqi.moji.com/weather/china/jiangxi/hukou-county");
            if (ThisModel!=null )
            {
                MainGrid.DataContext = ThisModel ;
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值