分享一个基于python的内蒙古旅游景点数据分析与采集系统(源码、调试、LW、开题、PPT)

news2024/9/21 6:05:08

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

💕💕Java项目
💕💕微信小程序项目
💕💕Android项目
💕💕Python项目
💕💕PHP项目
💕💕ASP.NET项目
💕💕Node.js项目
💕💕选题推荐

项目实战|基于python的内蒙古旅游景点数据分析与采集系统

文章目录

  • 1、选题背景
  • 2、研究目的和意义
  • 3、系统功能设计
  • 4、系统页面设计
  • 5、参考文献
  • 6、核心代码

1、选题背景

  随着旅游业的快速发展和信息技术的广泛应用,游客对于获取旅游信息的需求日益增长,特别是在互联网平台上获取即时、准确、丰富的旅游信息成为游客的主要方式。内蒙古作为中国重要的旅游目的地,其景点众多且分布广泛。然而,目前缺乏一个系统化、智能化的工具来整合与分析这些景点数据,帮助游客更好地规划行程,同时也为旅游管理部门提供数据支持。因此,开发一个基于Python的内蒙古旅游景点数据可视化分析与采集系统显得尤为重要,它不仅可以自动采集并分析大量的旅游数据,还能通过直观的可视化展示,为用户和管理者提供决策依据。

2、研究目的和意义

  本项目的主要目的是构建一个高效、智能的内蒙古旅游景点数据采集与可视化分析系统。通过Scrapy爬虫技术,系统能够自动从马蜂窝等旅游网站中获取与内蒙古景点相关的数据,并通过数据处理和清洗,确保数据的准确性和一致性。系统将这些数据存储在MySQL数据库中,并利用Echarts可视化框架生成各类统计图表,如用户年龄分布、性别比例、景点热度排行等。系统将这些数据通过一个基于Flask的Web平台展示给用户,提供旅游景点管理、周边住宿与美食推荐等功能,帮助游客做出更明智的旅游决策。

  基于Python的内蒙古旅游景点数据可视化分析与采集系统的开发具有重要的现实意义,该系统通过自动化的数据采集与处理技术,提高了旅游数据的获取效率,减少了人工操作的繁琐与误差。系统的可视化分析功能能够直观地展示大量复杂的数据,帮助用户更好地理解旅游市场的动态与趋势。对旅游管理者来说,该系统还可以提供精准的数据支持,助力旅游业的发展与决策优化。总的来说,该系统不仅满足了当前市场对旅游信息智能化、数据化的需求,还为未来旅游信息化的发展提供了有力的参考与实践经验。

3、系统功能设计

本文研究基于Python的内蒙古旅游景点数据可视化分析与采集系统的设计与实现过程,系统需求分析部分将详细探讨用户需求和系统功能需求,明确该系统的主要功能模块,包括数据采集模块、数据处理与清洗模块、数据存储模块、以及数据可视化与分析模块。数据采集模块使用Scrapy爬虫技术从马蜂窝网站自动抓取内蒙古旅游景点相关数据,如景点名称、位置、用户评论、浏览次数、体验数量等信息。数据处理与清洗模块则负责对采集到的数据进行清洗与标准化处理,以确保数据的准确性和一致性。

接着本文将详细描述系统架构的设计与实现,特别是在使用Python与Flask进行后端开发的过程中如何高效地处理与存储大规模数据。MySQL数据库将用于存储内蒙古旅游景点的数据信息,确保数据的安全与可扩展性。系统将利用Echarts可视化框架,通过大屏展示用户年龄分布、性别统计、体验数量、旅游地点分布、浏览次数区间以及景点TOP10等信息,从而帮助用户更直观地理解旅游数据的分布与趋势。

最后本文将探讨系统的功能实现与测试,包括登录系统、旅游景点管理、周边住宿与美食信息的展示与管理等功能模块的具体实现过程。论文还将对系统的性能进行评估与优化,确保系统在处理大量数据时的稳定性与响应速度。同时,研究内容还涵盖了系统在实际应用中的可扩展性与未来发展方向,包括如何通过引入更多的数据源和高级分析算法,进一步提升系统的智能化与实用性。通过该研究,旨在为内蒙古旅游行业的数据分析与应用提供一个具有实际意义的技术参考和实现方案。

4、系统页面设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如需要源码,可以扫取文章下方二维码联系咨询

5、参考文献

[1]简易,林岩,张书涵.基于POI数据的徐州市旅游景点空间分布特征及影响因素研究[J].智能建筑与智慧城市,2024,(06):36-39.DOI:10.13655/j.cnki.ibci.2024.06.010.
[2]李卫帆,刘晓静,毛磊,等.数据赋能特色旅游终端卷烟营销能力分析[J].财经界,2024,(13):57-59.DOI:10.19887/j.cnki.cn11-4098/f.2024.13.053.
[3]黄正鹏,马欣,陈雪,等.基于线性回归算法对多彩贵州旅游数据的分析及应用[J].软件工程,2024,27(03):63-66.DOI:10.19644/j.cnki.issn2096-1472.2024.003.013.
[4]丁宇阳,胡涵,王莹露,等.基于区块链技术的旅游服务及可视化分析系统设计[J].长江信息通信,2024,37(02):166-169.DOI:10.20153/j.issn.2096-9759.2024.02.050.
[5]梁旭楷,周尚武,杨曦.基于大数据技术的黔东南旅游可视化研究与应用[J].旅游纵览,2024,(01):80-82.
[6]邱奕超,张驰庚.旅游大数据的可视化设计和实现方法[J].信息与电脑(理论版),2023,35(17):120-123.
[7]范路桥,高洁,段班祥.基于Python+Flask+ECharts的国内热门旅游景点数据可视化系统[J].现代电子技术,2023,46(09):126-130.DOI:10.16652/j.issn.1004-373x.2023.09.024.
[8]李翔宇,李文凯,霍世童.基于数据可视化的酒店信息共享和分析平台的设计与开发[J].软件,2023,44(04):68-70.
[9]周倩.基于知识图谱的多元数据可视化方法[J].信息记录材料,2023,24(04):146-148.DOI:10.16009/j.cnki.cn13-1295/tq.2023.04.031.
[10]李慧斯,黄金钰,吴培超,等.基于Neo4j知识图谱的周边游热点分析——以茂名市为例[J].数字技术与应用,2022,40(11):58-60.DOI:10.19695/j.cnki.cn12-1369.2022.11.19.
[11]孙楚栋,王业.基于Python的旅游数据可视化应用[J].电脑编程技巧与维护,2022,(11):100-103.DOI:10.16184/j.cnki.comprg.2022.11.018.
[12]张乐,孙怡芳.基于Python的运城旅游数据可视化分析[J].计算机时代,2022,(10):85-88.DOI:10.16644/j.cnki.cn33-1094/tp.2022.10.021.
[13]刘建义,夏换,周洁.基于文本挖掘的后疫情时期民众诉求主题研究[J].计算机时代,2022,(10):77-80.DOI:10.16644/j.cnki.cn33-1094/tp.2022.10.019.
[14]赵赟.黎里古镇智慧旅游大数据汇聚及可视化平台建设探索[J].广播电视网络,2022,29(09):28-30.DOI:10.16045/j.cnki.catvtec.2022.09.030.
[15]操心慧,操金金,许丽娟,等.大数据可视化在城市规划中的应用[J].现代计算机,2022,28(16):77-83+110.
[16]张英伟,温守东,胡宇航,等.大数据视角下高职院校数据治理方案探究[J].河北旅游职业学院学报,2022,27(02):72-76.
[17]杨雯丽.基于语境感知的旅游推荐研究及实现[D].上海师范大学,2022. DOI:10.27312/d.cnki.gshsu.2022.001660.
[18]吴昊,谢玲玲,郭威.地区旅游经济发展动态可视化系统设计[J].自动化技术与应用,2022,41(05):180-183.DOI:10.20033/j.1003-7241(2022)05-0180-04.
[19]迟殿委.旅游酒店大数据分析平台的设计与实现[J].无线互联科技,2022,19(07):89-92+98.
[20]王涛,金钊,黄志鹏,等.国家自然科学基金区域创新发展联合基金管理数据可视化设计研究[J].中国科学基金,2022,36(01):153-159.DOI:10.16262/j.cnki.1000-8217.2022.01.021.

6、核心代码

# # -*- coding: utf-8 -*-

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import LvyoujingdianItem
import time
from datetime import datetime,timedelta
import datetime as formattime
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
from selenium.webdriver import ChromeOptions, ActionChains
from scrapy.http import TextResponse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 旅游景点
class LvyoujingdianSpider(scrapy.Spider):
    name = 'lvyoujingdianSpider'
    spiderUrl = 'https://www.mafengwo.cn/gonglve/ziyouxing/list/list_page?mddid=12720&page={}'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''
    realtime = False


    def __init__(self,realtime=False,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.realtime = realtime=='true'

    def start_requests(self):

        plat = platform.system().lower()
        if not self.realtime and (plat == 'linux' or plat == 'windows'):
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, '7y935m2h_lvyoujingdian') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return
        pageNum = 1 + 1
        for url in self.start_urls:
            if '{}' in url:
                for page in range(1, pageNum):
                    next_link = url.format(page)
                    yield scrapy.Request(
                        url=next_link,
                        callback=self.parse
                    )
            else:
                yield scrapy.Request(
                    url=url,
                    callback=self.parse
                )

    # 列表解析
    def parse(self, response):
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()
        if not self.realtime and (plat == 'linux' or plat == 'windows'):
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, '7y935m2h_lvyoujingdian') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return
        data = json.loads(response.body)
        html_text = data["html"]
        resp = response.replace(body=html_text)
        list = resp.css('div[class="item clearfix"]')
        for item in list:
            fields = LvyoujingdianItem()

            if '(.*?)' in '''div.detail h3::text''':
                try:
                    fields["biaoti"] = str( re.findall(r'''div.detail h3::text''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["biaoti"] = str( self.remove_html(item.css('div.detail h3::text').extract_first()))

                except:
                    pass
            if '(.*?)' in '''div.img img::attr(src)''':
                try:
                    fields["fengmian"] = str( re.findall(r'''div.img img::attr(src)''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["fengmian"] = str( self.remove_html(item.css('div.img img::attr(src)').extract_first()))

                except:
                    pass
            if '(.*?)' in '''span.location''':
                try:
                    fields["didian"] = str( re.findall(r'''span.location''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["didian"] = str( self.remove_html(item.css('span.location').extract_first()))

                except:
                    pass
            if '(.*?)' in '''span.view''':
                try:
                    fields["liulanshu"] = str( re.findall(r'''span.view''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["liulanshu"] = str( self.remove_html(item.css('span.view').extract_first()))

                except:
                    pass
            try:
                fields["laiyuan"] = 'https://www.mafengwo.cn'+ str(self.remove_html(item.css('a[class="_j_item"]::attr(href)').extract_first()))

            except:
                pass
                
            if '(.*?)' in '''<span>(.*?)人体验过</span></div>''':
                try:
                    fields["tiyanshu"] = str( re.findall(r'''<span>(.*?)人体验过</span></div>''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["tiyanshu"] = str( self.remove_html(item.css('<span>(.*?)人体验过</span></div>').extract_first()))

                except:
                    pass
            if '(.*?)' in '''div.detail ul li::text''':
                try:
                    fields["kandian1"] = str( re.findall(r'''div.detail ul li::text''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["kandian1"] = str( self.remove_html(item.css('div.detail ul li::text').extract_first()))

                except:
                    pass
            if '(.*?)' in '''div.detail ul li:nth-child(2)::text''':
                try:
                    fields["kandian2"] = str( re.findall(r'''div.detail ul li:nth-child(2)::text''', item.extract(), re.DOTALL)[0].strip())

                except:
                    pass
            else:
                try:
                    fields["kandian2"] = str( self.remove_html(item.css('div.detail ul li:nth-child(2)::text').extract_first()))

                except:
                    pass
            
            yield fields

    # 数据清洗
    def pandas_filter(self):
        engine = create_engine('mysql+pymysql://root:123456@localhost/spider7y935m2h?charset=UTF8MB4')
        df = pd.read_sql('select * from lvyoujingdian limit 50', con = engine)

        # 重复数据过滤
        df.duplicated() 
        df.drop_duplicates()   

        #空数据过滤
        df.isnull() 
        df.dropna() 

        # 填充空数据
        df.fillna(value = '暂无')

        # 异常值过滤

        # 滤出 大于800 和 小于 100 的 
        a = np.random.randint(0, 1000, size = 200)
        cond = (a<=800) & (a>=100)
        a[cond] 

        # 过滤正态分布的异常值
        b = np.random.randn(100000)
        # 3σ过滤异常值,σ即是标准差
        cond = np.abs(b) > 3 * 1
        b[cond]

        # 正态分布数据
        df2 = pd.DataFrame(data = np.random.randn(10000,3))
        # 3σ过滤异常值,σ即是标准差
        cond = (df2 > 3*df2.std()).any(axis = 1)
        # 不满⾜条件的⾏索引
        index = df2[cond].index
        # 根据⾏索引,进⾏数据删除
        df2.drop(labels=index,axis = 0)

    # 去除多余html标签
    def remove_html(self, html):
        if html == None:
            return ''
        pattern = re.compile(r'<[^>]+>', re.S)
        return pattern.sub('', html).strip()

    # 数据库连接
    def db_connect(self):
        type = self.settings.get('TYPE', 'mysql')
        host = self.settings.get('HOST', 'localhost')
        port = int(self.settings.get('PORT', 3306))
        user = self.settings.get('USER', 'root')
        password = self.settings.get('PASSWORD', '123456')

        try:
            database = self.databaseName
        except:
            database = self.settings.get('DATABASE', '')

        if type == 'mysql':
            connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')
        else:
            connect = pymssql.connect(host=host, user=user, password=password, database=database)
        return connect

    # 断表是否存在
    def table_exists(self, cursor, table_name):
        cursor.execute("show tables;")
        tables = [cursor.fetchall()]
        table_list = re.findall('(\'.*?\')',str(tables))
        table_list = [re.sub("'",'',each) for each in table_list]

        if table_name in table_list:
            return 1
        else:
            return 0

    # 数据缓存源
    def temp_data(self):

        connect = self.db_connect()
        cursor = connect.cursor()
        sql = '''
            insert into `lvyoujingdian`(
                id
                ,biaoti
                ,fengmian
                ,didian
                ,liulanshu
                ,laiyuan
                ,tiyanshu
                ,kandian1
                ,kandian2
            )
            select
                id
                ,biaoti
                ,fengmian
                ,didian
                ,liulanshu
                ,laiyuan
                ,tiyanshu
                ,kandian1
                ,kandian2
            from `7y935m2h_lvyoujingdian`
            where(not exists (select
                id
                ,biaoti
                ,fengmian
                ,didian
                ,liulanshu
                ,laiyuan
                ,tiyanshu
                ,kandian1
                ,kandian2
            from `lvyoujingdian` where
                `lvyoujingdian`.id=`7y935m2h_lvyoujingdian`.id
            ))
        '''

        cursor.execute(sql)
        connect.commit()
        connect.close()

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

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

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

相关文章

【算法进阶1】贪心算法、背包问题(0-1背包、分数背包)、拼接最大数字问题、活动选择问题

1 贪心算法 2 背包问题 2.1 0-1背包问题 2.2 分数背包 3 拼接最大数字问题 4 活动选择问题 1 贪心算法 贪心算法(又称贪婪算法)是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。 也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所做出…

基于虚拟下垂控制的分布式电源并网建模仿真

针对并联逆变器间的环流和功率分配不均的问题&#xff0c;提出了一种基于改进虚拟阻抗的微电网逆变器下垂控制策略&#xff0c;对传统下垂控制算法的有功功率和无功功率进行分析&#xff0c;虚拟阻抗引入到电压电流双环控制策略。 在MATLAB中建立了逆变器并联运行的分布式仿真模…

【Qt】贪吃蛇

目录 贪吃蛇小游戏 一.项目介绍及演示 1. 项目介绍 2. 项目演示 3. 窗口介绍 3.1 游戏大厅窗口 3.2 游戏关卡选择窗口 3.3 游戏房间窗口 二、创建项目及资源配置 1. 创建项目&#xff08;QWidget&#xff09; ​编辑 2. 资源配置&#xff08;图片声音素材&#xff0…

文心快码助力项目实战开发

文章目录 前言支持的编程语言 Language安装方法使用方法 项目实践代码运行流程出行方案查询JSP 指令与标签库指令页面上下文路径设置表单部分查询结果显示部分 使用感受优点改进建议 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 文心快码Baidu Comat…

《黑神话:悟空》爆火,作为普通人,该怎么抓住这波风口赚到钱?

目录 一、游戏视频 1.1、游戏教程视频 1.2、游戏剧情视频 二、游戏直播 三、游戏视频出海 四、AI黑神话悟空 大家好&#xff0c;我是小奇&#xff0c;一名热衷于分享AI副业项目的普通博主。不管你是AI小白还是老手&#xff0c;我都能帮你轻松上手&#xff0c;用AI技术赚钱…

【C++ Primer Plus习题】4.7

问题: 解答: #include <iostream> #include <string> using namespace std;typedef struct _Pizza {string companyName;float diameter;float wieght; }Pizza;int main() {Pizza p;cout << "请输入披萨的公司名: ";getline(cin, p.companyName);…

uniapp+vue3的ifdef实现多端配置客服消息

在微信小程序预览&#xff0c;实现客服消息&#xff0c;因是个人版&#xff0c;不支持 button | uni-app官网 (dcloud.net.cn) 条件编译处理多端差异 | uni-app官网 (dcloud.net.cn) uni.makePhoneCall(OBJECT) | uni-app官网 (dcloud.net.cn) //my.vue <template> &l…

10大国产AI绘画软件,每一款都挺好用 ,你用过吗?

在这个科技与艺术交织的时代,AI绘画软件正以惊人的速度改变着我们的创作方式。今天,就让我们一起探索那些你绝不能错过的10大国产AI绘画神器,它们不仅让创作变得前所未有的简单高效,更让每一位艺术家和爱好者都能享受到创作的无限乐趣! 1️⃣触站A🎨——语音创作,未…

循环结构程序设计-找出指定数量学生的最高分

**7-1-1 #include <stdio.h>int main(){int n,score,max;scanf("%d",&n);max 0;for(int i0;i<n;i){scanf("%d",&score);if(score>max){max score;}}printf("%d",max);return 0; }

一文迅速上手 ESP32 bluedroid 蓝牙从机开发

前言 个人邮箱&#xff1a;zhangyixu02gmail.com该博客主要针对希望迅速上手 ESP32 蓝牙从机开发人员&#xff0c;因此&#xff0c;很多蓝牙技术细节知识并不会进行介绍&#xff0c;仅仅介绍我认为需要了解的 API 函数和回调内容。本文主要是基于gatt_server demo来微调进行进…

# ‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

‘telnet’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 一、报错描述&#xff1a; 1、当使用 telnet 命令&#xff0c;连接本地 tomcat 的 8005 端口时报错。 2、报错解释 这个错误表明系统无法识别telnet命令&#xff0c;因为它不是内置命令&#xff0c;也没有…

跳马(华为od机考题)

一、题目 1.原题 马是象棋(包括中国象棋和国际象棋)中的棋子&#xff0c; 走法是每步直一格再斜一格&#xff0c; 即先横着或直着走一格&#xff0c;然后再斜着走一个对角线&#xff0c; 可进可退&#xff0c;可越过河界&#xff0c;俗称“马走‘日’字。 给顶m行n列的棋盘&…

人工智能在专业领域的斗争

介绍 ChatGPT 等大型语言模型 (LLM) 在用自然语言讨论一般话题的能力方面令人印象深刻。然而&#xff0c;他们在医学、金融和法律等专业领域却举步维艰。这是由于缺乏真正的理解&#xff0c;并且注重模仿而不是智力。 大语言模型正处于炒作的顶峰。由于能够用自然语言回答和讨…

“Docker中部署Kibana:步骤与指南“

博主这篇文章是跟Elasticsearch那篇文章是有关系的&#xff0c;建议大家先去看&#xff1a; 轻松上手&#xff1a;Docker部署Elasticsearch&#xff0c;高效构建搜索引擎环境_docker 启动 es-CSDN博客 这篇博文&#xff0c;还有镜像下载不下来的情况&#xff0c;大家可以去看…

攻破:重定向 缓冲区

文章目录 前言&#xff1a;认识读文件read认识重定向&&缓冲区重定向现象及分析&#xff1a;dup2的介绍&#xff1a; 缓冲区的引入&#xff1a;缓冲区的理解&#xff1a; 前言&#xff1a; ​ 从上一章开始&#xff0c;我们进入了文件IO的学习&#xff0c;认识了文件描…

浅谈C# RabbitMQ

一、基本介绍 RabbitMQ——Rabbit Message Queue的简写&#xff0c;但不能仅仅理解其为消息队列&#xff0c;消息代理更合适。 RabbitMQ 是一个由 Erlang 语言开发的AMQP&#xff08;高级消息队列协议&#xff09;的开源实现&#xff0c;其内部结构如下&#xff1a; RabbitMQ作…

今年秋招太吓人了。(20届,在得物做Java开发)

有个学弟来问我诉苦最近好忙好累&#xff0c;说竞争压力特别大&#xff0c;让我给点建议&#xff0c;要不要放弃实习闷头搞秋招&#xff0c;我才意识到时间太快了&#xff0c;想想我都毕业几年了&#xff0c;感慨颇深&#xff0c;整理一下我的求职经验和目前的心得吧&#xff0…

SpingBoot集成kafka-发送读取消息示例

SpingBoot集成kafka开发 kafka的几个常见概念 1、springboot和kafka对应版本&#xff08;重要&#xff09;2、创建springboot项目&#xff0c;引入kafka依赖2.1、生产者EventProducer2.2、消费者EventConsumer2.3、启动生产者的方法SpringBoot01KafkaBaseApplication2.4、appli…

监控电脑屏幕的软件叫什么?6款电脑屏幕监控软件分享!

监控电脑屏幕的软件可以帮助企业和家长监控电脑的使用情况&#xff0c;确保工作和学习的效率与安全。 以下是六款常用的电脑屏幕监控软件及其特点&#xff1a; 1. Keylogger 特点&#xff1a;专注于企业数据安全和员工上网行为管理。 功能&#xff1a;全面的屏幕监控、上网…

Redis持久化(RDB、AOF、混合持久化)

目录 1、持久化机制 &#xff08;1&#xff09;RDB &#xff08;2&#xff09;AOF 2、混合持久化 3、总结 ❓为什么需要持久化&#xff1f; Redis 是一个基于内存的键值存储系统&#xff0c;它提供了非常快的数据访问速度&#xff0c;因为它不需要像传统的磁盘存储那样进…