利用HtmlAgilityPack收罗墨迹天气中的天气数据

[复制链接]
发表于 2025-8-10 20:13:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
需要剖析对应的HTML源码:
  1. <div class="left">
  2.         <div class="wea_alert clearfix">
  3.             <ul>
  4.                                 <li>
  5.                     <a href = "https://tianqi.moji.com/aqi/china/jiangxi/hukou-county" >
  6.                         < span class="level level_2">
  7.                             <img src = "https://h5tq.moji.com/tianqi/assets/images/aqi/2.png" alt="88 良">
  8.                         </span>
  9.                         <em>88 良</em>
  10.                     </a>
  11.                 </li>
  12.                                             </ul>
  13.         </div>
  14.         <div class="wea_weather clearfix">
  15.             <em>30</em>
  16.             <span><img src = "https://h5tq.moji.com/tianqi/assets/images/weather/w1.png" alt="多云"></span>
  17.             <b>多云</b>
  18.             <strong class="info_uptime">今天17:04更新</strong>
  19.         </div>
  20.         <div class="wea_about clearfix">
  21.             <span>湿度 50%</span>
  22.             <em>南风3级</em>
  23.                     </div>
  24.         <div class="wea_tips clearfix">
  25.             <span>今日天气提示</span>
  26.             <em>略微偏热,注意衣物变化。</em>
  27.         </div>
  28.     </div>
  29.     <div class="right">
  30.         <div class="wea_info_avator">
  31.             <img src = "https://h5tq.moji.com/tianqi/assets//images/avator/icon/2.png" alt="墨迹天气 小墨哥">
  32.             <div id = "windows_download" >
  33.                 < img src="https://h5tq.moji.com/tianqi/assets//images/icon/avator_windows.png" height="35" alt="Windows 下载">
  34.                 <a href = "http://download.moji001.com/mojiapp/windoz/MoWeatherInstall_1.8.1.1.exe" target="_blank">Windows 下载</a>
  35.             </div>
  36.         </div>
  37.     </div>
复制代码
吸收数据的对象
  1. public class MainInfos
  2.     {
  3.         /// <summary>
  4.         /// 日期
  5.         /// </summary>
  6.         public string TodayDate { get; set; } = DateTime.Now.ToString("yyyy年MM月dd日");
  7.         /// <summary>
  8.         /// 温度
  9.         /// </summary>
  10.         public string  WenduStr { get; set; }
  11.         /// <summary>
  12.         /// 风向
  13.         /// </summary>
  14.         public string  FengsuStr { get; set; }
  15.         /// <summary>
  16.         ///气压
  17.         /// </summary>
  18.         public string  QiyaStr { get; set; }
  19.         /// <summary>
  20.         /// 湿度
  21.         /// </summary>
  22.         public string ShiduStr { get; set; }
  23.         /// <summary>
  24.         /// 降水
  25.         /// </summary>
  26.         public string JiangshuiStr { get; set; }
  27.         /// <summary>
  28.         ///空气指数
  29.         /// </summary>
  30.         public string KongqiZhishuStr { get; set; }
  31.         /// <summary>
  32.         /// 天气
  33.         /// </summary>
  34.         public string TianqiStr { get; set; }
  35.         /// <summary>
  36.         /// 更新时间
  37.         /// </summary>
  38.         public string GenxinShijianStr { get; set; }
  39.         /// <summary>
  40.         /// j今日提示
  41.         /// </summary>
  42.         public string JinriTishi { get; set; }
  43.         /// <summary>
  44.         /// 当前天气的图标地址
  45.         /// </summary>
  46.         public string ImagePath { get; set; }
  47.       
  48.     }
复制代码
收罗数据的方法:
  1. /// <summary>
  2.     /// 读取天气数据
  3.     /// </summary>
  4.      public  static class ReadFromWeb
  5.     {
  6.         public static MainInfos GetFromUrl(string Url)
  7.         {
  8.             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  9.             try
  10.             {
  11.                 HtmlWeb web = new HtmlWeb();
  12.                 HtmlAgilityPack.HtmlDocument doc = web.Load(Url);
  13.                 HtmlNode rootnode = doc.DocumentNode;
  14.                 MainInfos ThisMainInfos = null;
  15.                 HtmlNodeCollection GetUrlInfoNodes = doc.DocumentNode.SelectNodes("//div[@class='wrap clearfix wea_info']");
  16.                 if (GetUrlInfoNodes != null)
  17.                 {
  18.                     ThisMainInfos = new MainInfos();
  19.                     HtmlNode ThisMainNode = GetUrlInfoNodes.FirstOrDefault();
  20.                     string InnerStr = ThisMainNode.InnerHtml;
  21.                     //截取出来进行数据分析重新创建一个操作
  22.                     HtmlDocument DOCJiequ = new HtmlDocument();
  23.                     DOCJiequ.LoadHtml(InnerStr);
  24.                     ///获取空气指数
  25.                     HtmlNodeCollection NodesKongqizhishu  = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_alert clearfix']");
  26.                     if (NodesKongqizhishu!=null && NodesKongqizhishu.Count >0 )
  27.                     {
  28.                         HtmlNode KongqiZhishuNode = NodesKongqizhishu[0];
  29.                         ThisMainInfos.KongqiZhishuStr = KongqiZhishuNode.InnerText.Replace("\r\n","").Replace(" ","").Trim();
  30.                     }
  31.                     ///获取天气温度 图标
  32.                     HtmlNodeCollection NodesTianqiWendu = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_weather clearfix']");
  33.                     if (NodesTianqiWendu != null && NodesTianqiWendu.Count > 0)
  34.                     {
  35.                         HtmlNode ThisWenduNode = NodesTianqiWendu[0];
  36.                         HtmlNodeCollection WenduShowNodes = ThisWenduNode.ChildNodes;
  37.                         HtmlNode WenduCanshuNode = WenduShowNodes.Where(x => x.Name == "em").FirstOrDefault();//温度
  38.                         if (WenduCanshuNode!=null )
  39.                         {
  40.                             ThisMainInfos.WenduStr = WenduCanshuNode.InnerText;
  41.                         }
  42.                         HtmlNode TianqiCanshuNode = WenduShowNodes.Where(x => x.Name == "b").FirstOrDefault();//天气
  43.                         if (TianqiCanshuNode != null)
  44.                         {
  45.                             ThisMainInfos.TianqiStr = TianqiCanshuNode.InnerText;
  46.                         }
  47.                         HtmlNode TianqiTubiaoCanshuNode = WenduShowNodes.Where(x => x.Name == "span").FirstOrDefault();//天气图标
  48.                         if (TianqiTubiaoCanshuNode != null)
  49.                         {
  50.                             HtmlNode TianqiImageCanshuNode = TianqiTubiaoCanshuNode.FirstChild;//获取image标签
  51.                             ThisMainInfos.ImagePath =TianqiImageCanshuNode.GetAttributeValue("src",string.Empty);
  52.                         }
  53.                         HtmlNode GenxinShijianCanshuNode = WenduShowNodes.Where(x => x.Name == "strong").FirstOrDefault();//更新时间
  54.                         if (GenxinShijianCanshuNode != null)
  55.                         {
  56.                             ThisMainInfos.GenxinShijianStr = GenxinShijianCanshuNode.InnerText;
  57.                         }
  58.                     }
  59.                     ///获取湿度 风力
  60.                     HtmlNodeCollection NodesShiduFengli= DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_about clearfix']");
  61.                     if (NodesShiduFengli!=null &&  NodesShiduFengli.Count > 0)
  62.                     {
  63.                         HtmlNode ThisShiduFenliNode = NodesShiduFengli[0];
  64.                         HtmlNode ShiduNode = ThisShiduFenliNode.ChildNodes.Where(x=>x.Name == "span").FirstOrDefault() ;//湿度
  65.                         if (ShiduNode != null)
  66.                         {
  67.                             ThisMainInfos.ShiduStr = ShiduNode.InnerText;
  68.                         }
  69.                         HtmlNode FenliNode = ThisShiduFenliNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//风力
  70.                         if (FenliNode != null)
  71.                         {
  72.                             ThisMainInfos.FengsuStr = FenliNode.InnerText;
  73.                         }
  74.                     }
  75.                     ///获取今日提示
  76.                     HtmlNodeCollection NodesJinritishi = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_tips clearfix']");
  77.                     if (NodesJinritishi != null && NodesJinritishi.Count > 0)
  78.                     {
  79.                         HtmlNode ThisJinriTishiNode = NodesJinritishi[0];
  80.                         HtmlNode JinriTishiNode = ThisJinriTishiNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//今日提示
  81.                         if (JinriTishiNode != null)
  82.                         {
  83.                             ThisMainInfos.JinriTishi = JinriTishiNode.InnerText;
  84.                         }
  85.                     }
  86.                 }
  87.                 return ThisMainInfos;
  88.             }
  89.             catch (WebException ex)
  90.             {
  91.                 //连接失败
  92.                 return null;
  93.             }
  94.         }
  95.     }
复制代码
应用方法:
  1. MainInfos ThisModel =  ReadFromWeb.GetFromUrl("https://tianqi.moji.com/weather/china/jiangxi/hukou-county");
  2.             if (ThisModel!=null )
  3.             {
  4.                 MainGrid.DataContext = ThisModel ;
  5.             }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表