使用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 ;}
相关文章:
使用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&qu…...

ZTE 7551N 中兴小鲜60 远航60 努比亚小牛 解锁BL 刷机包 刷root 展讯 T760 bl
ZTE 7551N 中兴小鲜60 远航60 努比亚小牛 解锁BL 刷机包 刷root 3款机型是一个型号,包通用, ro.product.system.modelZTE 7551N ro.product.system.nameCN_P720S15 #################################### # from generate-common-build-props # Th…...
SearxNG本地搜索引擎
SearxNG 是一个强大、开源的 元搜索引擎(meta search engine),它不会存储用户信息,注重隐私保护,并支持从多个搜索引擎聚合结果,用户可以自建部署,打造一个无广告、可定制的搜索平台。 🔍 什么是 SearxNG? SearxNG 是 Searx 的一个积极维护的分支(fork),意在改进…...
MyBatis 核心组件源码分析
MyBatis 作为 Java 领域最受欢迎的持久层框架之一,以灵活的 SQL 映射和强大的扩展性著称。要真正驾驭 MyBatis,深入理解其核心组件的源码实现是关键。本文将通过源码分析,结合图文并茂的方式,带大家揭开 MyBatis 核心组件的神秘面纱。 1.SqlSessionFactory:会话工厂的核心…...

信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)
个人笔记整理---仅供参考 计算题 案例分析里的计算题就是进度、挣值分析、预测技术。主要考査的知识点有:找关键路径、求总工期、自由时差、总时差、进度压缩资源平滑、挣值计算、预测计算。计算题是一定要拿下的,做计算题要保持头脑清晰,认真读题把PV、…...
stack和queue简单模拟实现
stackreverse_iteratorqueuepriority_queue仿函数具体代码 stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from one end of the container. 上述描…...
如何安装双系统?即windows已经安装,如何安装ubuntu 22.04LTS
在已安装 Windows 的电脑上安装 Ubuntu 22.04 LTS 双系统,需通过 分区调整、UEFI/BIOS 设置 和 引导管理 实现。以下是详细步骤: 一、准备工作 备份数据 • 备份 Windows 中的重要文件(防止分区操作失误导致数据丢失)。 下载 Ubu…...

产品经理入门(2)产品体验报告
产品体验报告大纲:重点在产品体验——优点。 1.产品概括 可以从各大平台搜产品介绍。 2.市场分析 按照产品方向分析各个指标——包括有效使用时间,市场规模等。 3. 用户分析——对用户通过各项指标画像。 4.产品体验——对各项功能与设计的体验。 5.报告总结...

C43-指针与数组
一 定义一个指针变量指向数组 1.途径一:指向数组首元素的地址 代码示例: #include <stdio.h> int main() {int arr[3]{2,4,5};int *p;p&arr[0];printf("该数组的首元素是:%d",*p);return 0; }成果展示: 报错与总结: 给指针变量赋值时,未在数组首元素前输…...

UDP--DDR--SFP,FPGA实现之ddr读写控制模块
DDR读写控制模块实现介绍 由于该模块接口数量较多,为了详细说明模块实现,采用文字流程进行介绍 上级模块传输数据到来捕捉数据有效上升沿传输写指令,写有效,写指令成功被下一级模块缓存,进行写地址一次读写长度&…...

云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)
在云应用/服务的 5 层架构里,数据库服务层稳坐第 4 把交椅,堪称其中的 “硬核担当”。它的复杂程度常常让人望而生畏,不少人都将它视为整个架构中的 “终极挑战”。 不过,也有人觉得可扩展存储系统才是最难啃的 “硬骨头”&#…...

AI Agent | Coze 插件使用指南:从功能解析到实操步骤
一、前言 在人工智能技术飞速发展的今天,低代码开发模式正成为构建智能应用的主流趋势。对于希望快速搭建 AI Bot 的开发者和业务人员而言,coze作为一款强大的低代码 AI 开发平台,凭借其高度模块化的插件体系脱颖而出。这些插件就像搭建智能…...
06、基础入门-SpringBoot-依赖管理特性
06、基础入门-SpringBoot-依赖管理特性 Spring Boot 的依赖管理特性是其核心优势之一,极大地简化了项目的构建和维护过程。以下是其主要特点: ## 1. 父项目依赖管理 ### 1.1 继承 spring-boot-starter-parent 在 pom.xml 文件中,通过继承 spr…...

MK米客方德SD NAND:无人机存储的高效解决方案
在无人机技术迅猛发展的当下,飞控系统的数据记录对于飞行性能剖析、故障排查以及飞行安全保障极为关键。以往,SD 卡是飞控 LOG 记录常见的存储介质,但随着技术的革新,新的存储方案不断涌现。本文聚焦于以 ESP32 芯片为主控制器的无…...

【vscode】解决vscode无法安装远程服务器插件问题,显示正在安装
文章目录 现状分析采用VSIX离线安装第一步:离线下载插件包第二步:把下载好的插件文件上传到远程服务器上第三步:在windows下打开vscode,并链接远端,进行安装 现状分析 vscode无法远程安装扩展插件,显示正在…...
1688 数据接口调用秘籍:高效获取商品实时信息的开发指南
在电商行业竞争白热化的当下,企业想要抢占市场先机,实时掌握商品信息至关重要。作为国内 B2B 电商巨头,1688 平台汇聚海量商品资源,通过高效调用其数据接口获取商品实时信息,能为企业价格策略制定、库存管理、竞品分析…...

【Spring】Spring的请求处理
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 欢迎评论交流,感谢您的阅读😄。 目录 引言HTTP/HTTPS协议Spring Web与Spring Web MVCSpring WebFlux 自定义的TPC/IP协议FTP、S…...

粒子群算法(PSO算法)
粒子群算法概述 1.粒子群优化算法(Particle Swarm Optimization,简称PSO)。粒子群优化算法是在1995年由Kennedy博士和Eberhart博士一起提出的,它源于对鸟群捕食行为的研究。 2.基本核心是利用群体中的个体对信息的共享从而使得整…...
git提交库常用词
新功能 feat修改BUG fix文档修改 docs格式修改 style重构 refactor性能提升 perf测试 test构建系统 build对CI配置文件修改 ci修改构建流程、或增加依赖库、工具 chore回滚版本 revert...

LLM智能体新纪元:深入解析MCP与A2A协议,赋能智能自动化协作
LLM智能体(LLM agents)是能够自主行动以实现特定目标的AI系统。在实际应用中,智能体能够将用户请求拆解为多个步骤,利用知识库或API获取数据,最终整合出答案。这让智能体相比于传统独立聊天机器人拥有更强大的能力——…...

SAP学习笔记 - 开发豆知识01 - CDS SDK命令出乱码 (cds init CAP-Test03 --add java)
1,现象 安装完VSCode以及各种需要的插件(比如SAP CDS Language Support),就可以做CAP开发。 用这个命令创建Project:cds init CAP-Test03 --add java 然后出来一个乱码错误 adding java The derived package name c…...

(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)(网页版预告)(html)(js)(json)
目录 前言: 源代码: product.h product.c fileio.h fileio.c main.c json_export.h json_export.c tasks.json idex.html script.js 相关步骤: 第一步: 第二步: 第三步: 第四步: 第五步…...

进阶-数据结构部分:2、常用排序算法
飞书文档https://x509p6c8to.feishu.cn/wiki/FfpIwIPtviMMb4kAn3Sc40ABnUh 常用排序算法 这几种算法都是常见的排序算法,它们的优劣和适用场景如下: 冒泡排序(Bubble Sort):简单易懂,时间复杂度较高&…...
解决 Three.js Raycaster 点击位置与实际交点偏差问题
当使用 Three.js 的 Raycaster 时,如果发现点击位置与显示的碰撞点之间存在较大偏差,这通常是由于坐标系统不匹配或参数设置不正确导致的。以下是系统性的排查和解决方案: 1. 检查鼠标坐标转换 最常见的偏差原因是鼠标坐标到标准化设备坐标…...

25、DeepSeek-R1论文笔记
DeepSeek-R1论文笔记 1、研究背景与核心目标2、核心模型与技术路线3、蒸馏技术与小模型优化4、训练过程简介5、COT思维链(Chain of Thought)6、强化学习算法(GRPO)7、冷启动**1. 冷启动的目的****2. 冷启动的实现步骤****3. 冷启动…...

LeetCode --- 156双周赛
题目列表 3541. 找到频率最高的元音和辅音 3542. 将所有元素变为 0 的最少操作次数 3543. K 条边路径的最大边权和 3544. 子树反转和 一、找到频率最高的元音和辅音 分别统计元音和辅音的出现次数最大值,然后相加即可,代码如下 // C class Solution {…...
模型量化AWQ和GPTQ哪种效果好?
环境: AWQ GPTQ 问题描述: 模型量化AWQ和GPTQ哪种效果好? 解决方案: 关于AWQ(Adaptive Weight Quantization)和GPTQ(Generative Pre-trained Transformer Quantization)这两种量化方法的…...

npm 报错 gyp verb `which` failed Error: not found: python2 解决方案
一、背景 npm 安装依赖报如下错: gyp verb check python checking for Python executable "python2" in the PATH gyp verb which failed Error: not found: python2 一眼看过去都觉得是Python环境问题,其实并不是你python环境问题…...

初识Linux · IP协议· 下
目录 前言: 内网IP和公网IP 内网IP 公网IP 路由 前言: 前文我们介绍了IP协议的协议头,通过源码等方式我们理解了IP协议中的字段,比如8位协议,比如通过环回问题引出的8位最大生存时间,比如8位协议&…...
5.27本日总结
一、英语 复习list2list29 二、数学 学习14讲部分内容 三、408 学习计组1.2内容 四、总结 高数和计网明天结束当前章节,计网内容学完之后主要学习计组和操作系统 五、明日计划 英语:复习lsit3list28,完成07年第二篇阅读 数学&#…...