使用Java和XxlCrawler获取各城市月度天气情况实践

news2024/11/17 9:56:10

目录

前言

一、历史数据获取

1、关于天气后报

2、信息界面分析 

二、数据的提取开发

1、PageVo的定义

 2、属性定义

3、实际信息抓取

三、信息抓取调试以及可能的问题

1、信息获取成果

2、关于超时的问题

四、总结


前言

        这篇文章主要来源于一个我们家小朋友的一个作业,作业的主要内容是要求小朋友做一个统计,在上半学期学习了统计知识,然后要结合生活实际进行统计应用,因此有了这个作业。具体要求是在一定时间范围内(一个月),要求小朋友制作一个表格,需要记录一个月内每一天的天气情况,比如阴晴雨雪。然后在这个记录之上,要求统计出这个月不同的天气有多少天?比如晴天多少天,雨天多少天,然后根据统计结果,计算这个月最多的天气是什么?最少的是什么。这题目本身不难,只要每天都进行记录的话,基本也就没什么问题。然而,中间因为小朋友身体原因。没有及时记录,中间有一段时间没有及时记录。于是我们想,只能到网上查一下历史天气。

        然而我发现,小朋友中间有好几天都忘了记录,数据都有空缺。于是只能按照遗忘的日期来进行补数据。虽然最后把缺失的数据都补回来了。当时在想,还好只是一个月的数据,如果要三个月,半年,甚至是一年的数据,我还能一天一天的找数据不成。作为技术人,需要用一点技术手段来解决这个问题。

        本文主要讲解使用Java开发语言,使用XxlCrawler框架进行智能的某城市月度天气抓取实践开发。文章首先介绍目标网站的相关页面及目标数据的元素,然后讲解在信息获取过程的一些参数配置以及问题应对,最后结合实际代码实际抓取一个城市(以长沙为例)某月度天气数据。通过本文,您可以更加了解XxlCrawler的具体使用,知道如何解决页面返回慢的情况下如何通过超时参数来控制数据返回的问题,如果您是气象人,需要气象数据,则可以通过本文来获取想研究的地域的历史天气数据。

一、历史数据获取

        由于我们需要历史数据,因此需要找到历史数据源网站。关于天气的数据有很多网站可以提供。比较权威的就是国家的官方网站。这里呢,分享一个天气后报网站天气后报网,这个网站上可以提供城市的天气信息。本节主要介绍这个网站的内容和具体月度天气的页面。为下一步的信息获取做准备。

1、关于天气后报

        在浏览器中,输入它的官方网站:http://www.tianqihoubao.com/。可以看到它的官方界面。

        在上方的导航栏中,点击历史天气,可以切换到历史天气查询列表,默认按照行政区划列表的形式展示。

        根据我们的需要,比如(长沙),点击我们感兴趣的城市,打开城市历史天气列表:

        然后打开对应的月度天气连接,24年4月份。 

http://www.tianqihoubao.com/lishi/changsha/month/202404.html

         这是实际的网页地址,请注意这个地址,这里其实有两个变量,第一个是城市,也就是地址信息中的changsha,另外一个是时间即202404,通过网站静态化之后,这些信息都是有规律的。因此我们可以采用XxlCrawler来自动获取。

2、信息界面分析 

        在找到了信息源之后,我们需要分析一些网页的结构,网页信息很多,我们只关心目标数据。这里只需要把表格中的几个关键信息提取出来即可。比如日期、天气状况、气温信息、风力风向信息。这些关键的信息都是在一个表格中展示出来的。在页面中打开调试窗口,来看一下结构:

        首先来看一下网页结构,其主要的div是绑定在一个id='content'的网页元素下的。同时下面的数据是存在在标准的table中,因此我们只需要将table中的tr中循环提取出来即可。

二、数据的提取开发

        在明确了数据来源的网页结构之后,这一节我们来进行实际的数据提取的开发。通过XxlCrawler组件来获取信息。本小节着重讲解代码的设计与实现。

1、PageVo的定义

        熟悉XxlCrawler的朋友知道,PageVO是解析页面的一个对象。框架在读取到页面的信息后,会自动的将信息按照PageVO的配置,解析到实体类中。因此需要对PageVO进行定义。

@PageSelect(cssQuery = "#content >table >tbody >tr")
@AllArgsConstructor
@NoArgsConstructor
public static class PageVo {
		
	@PageFieldSelect(cssQuery=" >td:eq(0)")
	@Excel(name = "日期")
	private String day;
		
	@PageFieldSelect(cssQuery = ">td:eq(1)")
	@Excel(name = "天气状况")
	private String weatherInfo;
		
	@PageFieldSelect(cssQuery = ">td:eq(2)")
	@Excel(name = "最低气温/最高气温")
	private String weatherTemp;
		
	@PageFieldSelect(cssQuery = ">td:eq(3)")
	@Excel(name = "风力风向(夜间/白天)")
	private String weatherWind;
}

        在PageVO的定义过程中,我们使用了三个注解,第一个是@PageSelect(cssQuery = "#content >table >tbody >tr"),这个注解是用来进行页面抓取绑定的。第二个是@PageFieldSelect(cssQuery=" >td:eq(0)"),这个主要是用来进行具体的属性信息绑定,即解析哪个信息,设置到哪个属性当中去,在循环中特别好用。不用向之前那样,自己去解析。第三个是@Excel(name = "日期"),这个跟信息获取关系不大,只是用来最后将获取的信息写入到Excel表格中。当然,结合实际的需求,您可以把数据写入到数据库中,这样子可以在后期在需要的时候进行查询进行分析。

 2、属性定义

        按照JavaOOP的设计思想,这里我们将一些信息封装起来,比如User-Agent还有公共的请求地地址等统一定义,在进行信息抓取时可以直接使用。关键代码如下:

private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36";

private List<PageVo> weatherList = new ArrayList<PageVo>();
	
private static final String COMMON_URL  = "http://www.tianqihoubao.com/lishi/changsha/month/";

weatherList就是用来保存所有的天数数据的,在程序的最后可以用来保存数据或者持久化的作用。

3、实际信息抓取

        这里来定义实际信息抓取对象的配置,以及实际启动逻辑。

@Test
public void fetchWeaterInfo() {
	int year = 2023;
    int month = 9; // 月份从 0 开始,3 表示4月份
    String monthStr = "";
    monthStr +=  month < 10 ? "0" + month : month;
    String targetUrl = COMMON_URL + year + monthStr + ".html";
    System.out.println(targetUrl);
	// 构造爬虫
	XxlCrawler crawler = new XxlCrawler.Builder()
		.setUrls(targetUrl)
		.setAllowSpread(false)// 不允许扩散爬取
		.setThreadCount(3)
		.setPauseMillis(3000)
		.setUserAgent(USER_AGENT)//设置user_agent
		.setIfPost(false)
		.setFailRetryCount(3)// 重试三次
		.setTimeoutMillis(1000 * 12)//超时时间,有些网站加载慢,一定要加这个时间
		.setPageParser(new PageParser<PageVo>() {
					
			@Override
			public void parse(Document html, Element pageVoElement, PageVo pageVo) {
				//System.out.println(pageVoElement);
				weatherList.add(pageVo);
			}
	}).build();
    crawler.start(true);// 启动
	// excel工具包
	weatherList.remove(0);//把第一行表头移除掉
	ExcelUtil<PageVo> util = new ExcelUtil<PageVo>(PageVo.class);
	util.exportExcel(weatherList, year + "年" + month + "月天气情况表");
	System.out.println("finished...");
}

        这里需要注意的是,信息抓取器,每次得到的一个tbody中的一行,即tr的数据。我们需要将所有的数据解析完成之后,统一存放到一个List当中。实现月度的数据搜集,同时第一行是表头数据。需要剔除。因此,在写入到Excel之前,要将第一行删除,

weatherList.remove(0);//把第一行表头移除掉

三、信息抓取调试以及可能的问题

        这里分享实际的信息获取结果,对抓取的信息进行综合展示。同时这里简单分享在信息获取过程中可能遇到的问题和解决方案。

1、信息获取成果

        将上述代码运行后,可以在控制中看到以下输出信息:

http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:29.027 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:29.035 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ...
09:42:29.038 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:33.634 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler is finished.
09:42:33.635 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
09:42:33.635 [pool-1-thread-3] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
09:42:33.635 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler stop.
09:42:33.636 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
finished...

        这里提示,信息抓取完成,同时我们将数据写入到了Excel当中,找到目标文件夹,来看一下实际的效果。

日期天气状况最低气温/最高气温风力风向(夜间/白天)
2024年04月01日小雨 /大雨20℃ / 26℃东南风 1-3级 /南风 1-3级
2024年04月02日大雨 /小雨16℃ / 26℃西风 1-3级 /北风 1-3级
2024年04月03日中雨 /小雨15℃ / 18℃北风 1-3级 /北风 1-3级
2024年04月04日中雨 /小雨13℃ / 15℃西北风 1-3级 /北风 1-3级
2024年04月05日小雨 /小雨13℃ / 16℃西北风 1-3级 /北风 1-3级
2024年04月06日小雨 /小雨14℃ / 16℃北风 1-3级 /北风 1-3级
2024年04月07日小雨 /小雨14℃ / 19℃北风 1-3级 /西北风 1-3级
2024年04月08日多云 /多云15℃ / 24℃北风 1-3级 /北风 1-3级
2024年04月09日多云 /小雨15℃ / 23℃东北风 1-3级 /东风 1-3级
2024年04月10日多云 /小雨17℃ / 22℃东风 1-3级 /东北风 1-3级
2024年04月11日小雨 /小雨18℃ / 21℃北风 1-3级 /北风 1-3级
2024年04月12日阴 /小雨18℃ / 25℃东南风 1-3级 /东南风 1-3级
2024年04月13日中雨 /小雨20℃ / 26℃东南风 1-3级 /南风 1-3级
2024年04月14日小雨 /多云20℃ / 28℃东北风 1-3级 /东南风 1-3级
2024年04月15日小雨 /中雨21℃ / 31℃南风 1-3级 /东南风 1-3级
2024年04月16日暴雨 /中雨20℃ / 26℃西风 1-3级 /西风 1-3级
2024年04月17日小雨 /阴19℃ / 23℃西北风 1-3级 /北风 1-3级
2024年04月18日多云 /小雨19℃ / 27℃东南风 1-3级 /东南风 1-3级
2024年04月19日中雨 /阴18℃ / 24℃东南风 1-3级 /北风 1-3级
2024年04月20日小雨 /小雨19℃ / 24℃北风 1-3级 /西北风 1-3级
2024年04月21日阴 /多云17℃ / 24℃东风 1-3级 /北风 1-3级
2024年04月22日小雨 /阴19℃ / 24℃西北风 1-3级 /西北风 1-3级
2024年04月23日多云 /多云18℃ / 27℃北风 1-3级 /北风 1-3级
2024年04月24日多云 /小雨19℃ / 27℃东北风 1-3级 /东风 1-3级
2024年04月25日中雨 /多云19℃ / 25℃东风 1-3级 /东风 1-3级
2024年04月26日多云 /多云19℃ / 30℃西北风 1-3级 /东南风 1-3级
2024年04月27日中雨 /小雨20℃ / 28℃东北风 1-3级 /西南风 1-3级
2024年04月28日多云 /小雨20℃ / 29℃北风 1-3级 /东北风 1-3级
2024年04月29日中雨 /大雨18℃ / 25℃西风 1-3级 /西北风 1-3级
2024年04月30日小雨 /多云14℃ / 18℃北风 1-3级 /北风 1-3级

        大家可以对比原来的网页地址,可以看到表格获取的信息与网页一致。这里的实例仅提供一个例子,抛砖引玉,大家可以结合自己的实际工作。获取更多的天气信息。

2、关于超时的问题

        XxlCrawler的默认超时时间是5秒(5000ms),即5秒钟内数据没有返回则超时。其定义如下:

private volatile int timeoutMillis = XxlCrawlerConf.TIMEOUT_MILLIS_DEFAULT;     // 超时时间,毫秒

 // timeout default, ms
public static final int TIMEOUT_MILLIS_DEFAULT = 5*1000;

        在默认的情况下,页面经常超时,请求时会报以下的错误:

http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:27.685 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:27.693 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ...
11:03:27.695 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:32.697 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler still running ...
11:03:33.456 [pool-1-thread-2] ERROR com.xuxueli.crawler.util.JsoupUtil - Read timeout
java.net.SocketTimeoutException: Read timeout
	at org.jsoup.internal.ConstrainableInputStream.read(ConstrainableInputStream.java:58)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.read1(Unknown Source)
	at java.io.BufferedReader.read(Unknown Source)
	at org.jsoup.parser.CharacterReader.bufferUp(CharacterReader.java:87)
	at org.jsoup.parser.CharacterReader.current(CharacterReader.java:246)
	at org.jsoup.parser.TokeniserState$1.read(TokeniserState.java:12)
	at org.jsoup.parser.Tokeniser.read(Tokeniser.java:62)
	at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:86)
	at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:61)
	at org.jsoup.parser.Parser.parseInput(Parser.java:51)
	at org.jsoup.helper.DataUtil.parseInputStream(DataUtil.java:218)
	at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:962)
	at org.jsoup.helper.HttpConnection.get(HttpConnection.java:355)
	at com.xuxueli.crawler.util.JsoupUtil.load(JsoupUtil.java:77)
	at com.xuxueli.crawler.loader.strategy.JsoupPageLoader.load(JsoupPageLoader.java:17)
	at com.xuxueli.crawler.thread.CrawlerThread.processPage(CrawlerThread.java:167)
	at com.xuxueli.crawler.thread.CrawlerThread.run(CrawlerThread.java:84)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

        在网页中验证以下请求时间,请注意打开F12进行页面请求的时间跟踪:

        可以看到页面 ,页面加载大约花了11.93秒,接近12秒。因此其默认的5秒超时设置是不够的。具体的响应时间,请按照大家的实际情况合理设置。把超时时间延长后,就不会出现这个错误了。

四、总结

        以上就是本文的主要内容,本文主要讲解使用Java开发语言,使用XxlCrawler框架进行智能的某城市月度天气抓取实践开发。文章首先介绍目标网站的相关页面及目标数据的元素,然后讲解在信息获取过程的一些参数配置以及问题应对,最后结合实际代码实际抓取一个城市(以长沙为例)某月度天气数据。通过本文,您可以更加了解XxlCrawler的具体使用,知道如何解决页面返回慢的情况下如何通过超时参数来控制数据返回的问题,如果您是气象人,需要气象数据,则可以通过本文来获取想研究的地域的历史天气数据。行文仓促,定有不足之处,欢迎各位专家朋友在评论区中批评指正,万分荣幸。技术人通过自己的技术来解决一点生活问题,技术让生活更美好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeSwitch视频会议同时支持内网和外网接入

我们在使用freeswitch进行视频会议时&#xff0c;之前所有的用户都是通过外网的方式接入&#xff0c;因为fs给其返回的sdp协议内容里&#xff0c;只需要fs配置的外网IP就可以了&#xff1b;最近由于引入新的业务需要有其他内网的服务器也可以直接接入fs的视频会议房间&#xff…

【Spring Cloud】分布式配置

目录 未来的开发场景为什么需要配置中心配置实时生效配置管理流程 开源配置中心基本介绍DisconfSpring Cloud ConfigApolloNacos Spring Cloud Config介绍配置管理工具体系 案例需求编写 Config Server1.创建配置文件2.创建项目3.添加依赖4.添加注解5.修改配置文件application.…

玩游戏也能学好 JavaScript 啦?

最近有朋友问&#xff0c;应该如何学好 JavaScript。不过我做了好多年的后端开发&#xff0c;JavaScript 虽然也是有所接触&#xff0c;但肯定是谈不上精通。在将朋友介绍给公司的前端大神之后&#xff0c;突然想到&#xff0c;学习编程本身还是一个挺枯燥的事情&#xff0c;如…

FDW(Foreign Data Wrapper)

在上一篇博客里&#xff0c;最末尾提到了 FDW。 FDW 到底是什么呢&#xff1f; 标准 FDW&#xff08;Foreign Data Wrapper&#xff09;遵循了 SQL/MED 标准&#xff0c;标准全称&#xff1a;ISO/IEC 9075-9 Management of External Data (SQL/MED) 2003 年&#xff0c;SQL…

【大数据】Hadoop 2.X和1.X升级优化对比

目录 1.前言 2.hadoop 1.X的缺点和优化方向 3.解决NameNode的局限性 3.1.Hadoop HA 3.2.Haddop federation 4.yarn 5.周边组件 1.前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm10…

相机系列——相机标定简述

作者&#xff1a;木一 对相机系列感兴趣还可看前文了解更多相关内容&#xff1a; 相机系列——透视投影&#xff1a;针孔相机模型 VR/AR/XR背后的逻辑&#xff1f;离不开三维引擎相机 引言 上文我们介绍了针孔相机模型&#xff0c;用来描述相机的透视投影成像过程&#xf…

数据要素的大海,如何流向千行百业?

文&#xff5c;白 鸽 编&#xff5c;王一粟 当数智化的风吹向银行业&#xff0c;是从底层数据的融合开始的。 在银行风控场景中&#xff0c;一个人想要进行风险投资或借贷&#xff0c;银行往往会评估这个人的信贷和风控策略。在以往的办理模式中&#xff0c;会需要办理人…

看看最新的B端登录界面,你是不是被潮流抛弃了?

毛玻璃风格&#xff08;Frosted Glass Style&#xff09;是新拟态设计风格中的一种分支&#xff0c;它灵感来源于现实世界中的毛玻璃材质。毛玻璃是一种通过在玻璃表面加工处理的方式&#xff0c;使其具有模糊、云翳和透明效果的特殊玻璃。 在设计中&#xff0c;毛玻璃风格通常…

OrangePi Kunpeng Pro体验——安装Hass与驱动SPI小屏幕

OrangePi Kunpeng Pro 是一款面向开发者和爱好者的高性能开发板。在本次测评中&#xff0c;主要将以前的一些代码在该开发板上实现&#xff0c;包括docker部署hass&#xff0c;引脚驱动SPI小屏幕。中间遇到了一些小小问题&#xff0c;但都成功了&#xff0c;一起来试试吧~ 一、…

NoSQL是什么?NoSQL数据库存在SQL注入攻击?

一、NoSQL是什么&#xff1f; NoSQL&#xff08;Not Only SQL&#xff09;是一种非关系型数据库的概念。与传统的关系型数据库不同&#xff0c;NoSQL数据库使用不同的数据模型来存储和检索数据。NOSQL数据库通常更适合处理大规模的非结构化和半结构化数据&#xff0c;且能够…

n后问题 回溯笔记

问题描述 在nn格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同 一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同一行或同一列或同一斜线上。 代码 import java.uti…

史上最全排序算法整理!(1)

1.排序的概念及其应用 1.1排序的概念 排序是计算机内经常进行的一种操作&#xff0c;其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序&#xff0c;若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序。反之&#…

linnux上安装php zip(ZipArchive)、libzip扩展

安装顺序&#xff1a; 安装zip&#xff08;ZipArchive&#xff09;&#xff0c;需要先安装libzip扩展 安装libzip&#xff0c;需要先安装cmake 按照cmake、libzip、zip的先后顺序安装 下面的命令都是Linux命令 1、安装cmake 确认是否已安装 cmake --version cmake官网 未安装…

基于k-NN + GCN的轴承故障诊断模型

目录 往期精彩内容&#xff1a; 创新点&#xff1a; 前言 1 轴承故障数据的预处理 1.1 导入数据 1.2 数据预处理&#xff0c;制作数据集 2 基于Pytorch的GCN轴承故障诊断 2.1 定义GCN分类网络模型 2.2 设置参数&#xff0c;训练模型 2.3 模型评估 代码、数据如下&…

乡村振兴与农业科技创新:加大农业科技研发投入,推动农业科技创新,促进农业现代化和美丽乡村建设

一、引言 在当代中国&#xff0c;乡村振兴已成为国家发展的重要战略之一。作为国民经济的基础&#xff0c;农业的发展直接关系到国家的稳定和人民的福祉。随着科技的不断进步&#xff0c;农业科技创新在推动农业现代化和美丽乡村建设中发挥着越来越重要的作用。本文旨在探讨如…

深入理解JVM:内存结构、垃圾收集与性能调优

目录 JDK、JRE、JVM关系? 启动程序如何查看加载了哪些类&#xff0c;以及加载顺序? class字节码文件10个主要组成部分? JVM结构 画一下JVM内存结构图 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 运行时常量池? 什么时候抛出StackOverflowError? 例如&…

SAP_SD模块 物料科目分配/成本简介

SAP系统各模块与财务都有个方面的集成。文本主要说明销售模块中的科目分配和成本的一个对应关系。 1、首先是在物料主数据上销售视图中的物料科目分配组&#xff0c;S1主营、S2材料等字段&#xff0c;物料销售的时候会将这个物料产生的记录到对应的科目中。 首先是物料主数据中…

FreeRTOS【7】队列使用

1.开发背景 操作系统提供了多线程并行的操作&#xff0c;为了方便代码的维护&#xff0c;各个线程都分配了专用的内存并处理对应的内容。但是线程间也是需要协助操作的&#xff0c;例如一个主线程接收信息&#xff0c;会把接收的信息并发到其他线程&#xff0c;即主线程不阻塞&…

数分之SQL查询电商数据案例

1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import random import time import pymysql# 定义名字数据 xing ["王", "李", "张", "刘", "陈", "杨", "黄&q…

2024年 云南 融资融券怎么开通,利率多少?4.2

一个小动作&#xff0c;每年节约几万块&#xff1f; 勤俭节约的传统&#xff0c;真的在很多年轻人当中是被嫌弃的&#xff0c;有人要说“吃多了对身体也不好”、“反正食堂饭菜很便宜”之类 但是有效利用资源的观念还是需要培养的。最近了解到很多朋友在券商融资利率很高6%&a…