当前位置: 首页 > article >正文

使用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 ;}
http://www.lryc.cn/news/2378544.html

相关文章:

  • ZTE 7551N 中兴小鲜60 远航60 努比亚小牛 解锁BL 刷机包 刷root 展讯 T760 bl
  • SearxNG本地搜索引擎
  • MyBatis 核心组件源码分析
  • 信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)
  • stack和queue简单模拟实现
  • 如何安装双系统?即windows已经安装,如何安装ubuntu 22.04LTS
  • 产品经理入门(2)产品体验报告
  • C43-指针与数组
  • UDP--DDR--SFP,FPGA实现之ddr读写控制模块
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)
  • AI Agent | Coze 插件使用指南:从功能解析到实操步骤
  • 06、基础入门-SpringBoot-依赖管理特性
  • MK米客方德SD NAND:无人机存储的高效解决方案
  • 【vscode】解决vscode无法安装远程服务器插件问题,显示正在安装
  • 1688 数据接口调用秘籍:高效获取商品实时信息的开发指南
  • 【Spring】Spring的请求处理
  • 粒子群算法(PSO算法)
  • git提交库常用词
  • LLM智能体新纪元:深入解析MCP与A2A协议,赋能智能自动化协作
  • SAP学习笔记 - 开发豆知识01 - CDS SDK命令出乱码 (cds init CAP-Test03 --add java)
  • (C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)(网页版预告)(html)(js)(json)
  • 进阶-数据结构部分:​​​​​​​2、常用排序算法
  • 解决 Three.js Raycaster 点击位置与实际交点偏差问题
  • 25、DeepSeek-R1论文笔记
  • LeetCode --- 156双周赛
  • 模型量化AWQ和GPTQ哪种效果好?
  • npm 报错 gyp verb `which` failed Error: not found: python2 解决方案
  • 初识Linux · IP协议· 下
  • 5.27本日总结
  • JavaScript基础-创建对象的三种方式