博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Python语言、MySQL数据库、Django框架、selenium爬虫框架、携程网旅游数据、HTML

时代在进步,科技在进步,互联网改变了世界,在互联网时代,各行各业的人们都在寻求增长点,人们的日常生活越来越离不开互联网。以旅游信息为例,线下大量的各种旅游信息基本只会出现在旅游会上,但是现如今,人们越来越重视时间成本,所以越来越多的年轻人在网上查找自己想要查找的旅游旅游信息。然而,在互联网信息和海量数据源混合的情况下,如何快速精确的找到自己想要的数据是一个值得探讨的问题。
本系统主要针对解决获取旅游信息滞后、参加线下旅行社和人工检索时间成本高等问题,运用网络爬虫信息技术设计思想,实现了一个基于Python的旅游信息可视化分析系统。本系统以Python计算机设计语言为基础,使用 Selenium对携程旅游旅游信息源进行抓取,针对网页信息编写抽取规则,对旅游信息进行必要的过滤和提取,使用MySql对旅游信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建,完成整个爬取以及数据存储到成功进行旅游信息可视化的网页端展示。

【关键词】 Python语言;旅游信息分析;Django框架,数据可视化

2、项目界面

(1)旅游可视化大屏

在这里插入图片描述

(2)系统首页—数据概况

在这里插入图片描述

(3)词云图分析
在这里插入图片描述
(4)评论前5景区
在这里插入图片描述

(5)热门景区前5

在这里插入图片描述

(6)评分前10的景区
在这里插入图片描述
(7)景区评分扇形图
在这里插入图片描述

(8)后台数据管理

在这里插入图片描述
(9)数据爬取
在这里插入图片描述

3、项目说明

旅游数据采集分析可视化大屏系统是一个基于Python语言、MySQL数据库和Django框架开发的系统。它利用selenium爬虫框架来采集携程网的旅游数据,并将这些数据存储在MySQL数据库中。

系统的主要功能是对采集到的旅游数据进行分析,然后通过可视化大屏展示给用户。用户可以通过系统的界面查看各个旅游目的地的热门景点、酒店价格、交通情况等信息。同时,系统还提供了数据筛选、排序、搜索等功能,方便用户根据自己的需求进行数据查询。

系统的界面使用HTML进行设计,通过Django框架将数据和界面进行交互,实现了用户友好的操作体验。用户可以根据需要选择不同的数据展示方式,比如柱状图、折线图、地图等,以便更直观地了解旅游数据的情况。

旅游数据采集分析可视化大屏系统可以帮助用户更好地了解旅游市场的情况,为用户提供决策参考。同时,它也为旅游相关企业和机构提供了一个方便快捷的数据分析工具,帮助他们更好地了解市场需求,优化产品和服务。

4、核心代码


def login(request):
    """登录函数"""
    if request.method == "POST":
        user = request.POST.get('user')
        pass_word = request.POST.get('password')
        print('user------>', user)
        users_list = list(models.UserList.objects.all().values("user_id"))
        users_id = [x['user_id'] for x in users_list]
        print(users_id)
        # print(students_num)
        ret = models.UserList.objects.filter(user_id=user, pass_word=pass_word)
        if user not in users_id:
            return JsonResponse({'code': 1, 'msg': '该账号不存在!'})
        elif ret:
            # 有此用户 -->> 跳转到首页
            # 登录成功后,将用户名和昵称保存到session 中,
            request.session['user_id'] = user
            user_obj = ret.last()
            user_name = user_obj.user_name
            request.session['user_name'] = user_name
            return JsonResponse({'code': 0, 'msg': '登录成功!'})
        else:
            return JsonResponse({'code': 1, 'msg': '密码错误!'})
    else:
        return render(request, "login.html")


def register(request):
    """注册函数"""
    if request.method == "POST":
        user = request.POST.get('user')
        pass_word = request.POST.get('password')
        user_name = request.POST.get('user_name')
        users_list = list(models.UserList.objects.all().values("user_id"))
        users_id = [x['user_id'] for x in users_list]
        if user in users_id:
            return JsonResponse({'code': 1, 'msg': '该账号已存在!'})
        else:
            models.UserList.objects.create(user_id=user, user_name=user_name, pass_word=pass_word)
            request.session['user_id'] = user  # 设置缓存
            request.session['user_name'] = user_name
            return JsonResponse({'code': 0, 'msg': '注册成功!'})
    else:
        return render(request, "register.html")


# 退出(登出)
def logout(request):
    # 1. 将session中的用户名、昵称删除
    request.session.flush()
    # 2. 重定向到 登录界面
    return redirect('login')


def index(request):
    return render(request, "index.html", locals())


def get_screen(request):
    # city_list = ['金安区', '裕安区', '叶集区', '霍邱县', '舒城县', '金寨县', '霍山县']
    # city_list = ['荔湾区', '越秀区', '海珠区', '天河区', '白云区', '黄埔区', '番禺区', '花都区', '南沙区', '从化区', '增城区']
    city_list = ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '上海市', '江苏省',
     '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区',
     '海南省', '重庆市', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省', '青海省', '宁夏回族自治区',
     '新疆维吾尔自治区', '台湾省', '香港特别行政区', '澳门特别行政区', '']


    # 等级占比图
    level_list = list(set([x[0] for x in list(models.Data.objects.all().values_list('level'))]))
    l_1_data = []
    for level in level_list:
        l_1_data.append({'name': level, "value": models.Data.objects.filter(level=level).count()})
    # print(l_1_data)

    # 散点图
    hot_score = list(models.Data.objects.all().values_list('hot', 'score'))
    hot_score = [[float(x[0]), float(x[1])] for x in hot_score if x[1] != '0']
    hot_score = sorted(hot_score, key=lambda x: x[0])
    # print(hot_score)

    # 处理中间柱形图数据
    c_1_data = list(models.Data.objects.all().values_list('name', 'hot').distinct().order_by('-hot'))[0:10]
    # print(c_1_data)
    c_1_x = [x[0] for x in c_1_data]
    c_1_y = [float(x[1]) for x in c_1_data]

    #  处理地图数据
    map_data = []
    for x in city_list:
        map_data.append({'name': x, 'value': models.Data.objects.filter(address__icontains=x[0:2]).count()})
    print("map_data------>", map_data)

    # 评分排行
    comment_list = list(models.Data.objects.all().values_list('name', 'comment_count').distinct())
    # print(comment_list)
    comment_list = [[x[0], int(x[1].replace('条点评', ''))] for x in comment_list]
    comment_list = sorted(comment_list, key=lambda x: x[1], reverse=True)[0:10]
    r_1_x = [x[0] for x in comment_list]
    r_1_y = [float(x[1]) for x in comment_list]

    # 词云图
    r_2_data = list(models.Data.objects.all().values_list('name', 'comment_count').distinct())
    # print(comment_list)
    r_2_data = [[x[0], int(x[1].replace('条点评', ''))] for x in r_2_data]
    r_2_data = [{"name": x[0], "value": x[1]} for x in r_2_data]

    return render(request, "screen.html", locals())


def welcome(request):
    """此函数用于处理控制台页面"""
    all_data = models.Data.objects.all().count()
    data_5a = models.Data.objects.filter(Q(level__icontains='5A') | Q(name__icontains='5A')).count()
    data_4a = models.Data.objects.filter(Q(level__icontains='4A') | Q(name__icontains='4A')).count()
    hot_data = [[x[0], float(x[1])] for x in list(models.Data.objects.all().values_list('name', 'hot').distinct())]
    hot_data = sorted(hot_data, key=lambda x: x[1], reverse=True)[0]
    hot_data_name = hot_data[0]
    hot_data_hot = hot_data[1]

    # city_list = ['金安区', '裕安区', '叶集区', '霍邱县', '舒城县', '金寨县', '霍山县']
    # city_list = ['荔湾区', '越秀区', '海珠区', '天河区', '白云区', '黄埔区', '番禺区', '花都区', '南沙区', '从化区', '增城区']
    city_list = ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '上海市',
                 '江苏省',
                 '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省',
                 '广西壮族自治区',
                 '海南省', '重庆市', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省', '青海省',
                 '宁夏回族自治区',
                 '新疆维吾尔自治区', '台湾省', '香港特别行政区', '澳门特别行政区', '']

    #  处理地图数据
    map_data = []
    for x in city_list:
        map_data.append({'name': x, 'value': models.Data.objects.filter(address__icontains=x[0:2]).count()})
    # print(map_data)

    return render(request, "welcome.html", locals())


def chart_1(request):
    level_list = list(set([x[0] for x in list(models.Data.objects.all().values_list('level'))]))
    l_1_data = []
    all_value = 0
    for level in level_list:
        a = models.Data.objects.filter(level=level).count()
        all_value += a
        l_1_data.append({'name': level, "value": a})

    # print(l_1_data)
    return render(request, "echarts_1.html", locals())


def chart_2(request):
    comment_list = list(models.Data.objects.all().values_list('name', 'comment_count').distinct())
    # print(comment_list)
    comment_list = [[x[0], int(x[1].replace('条点评', ''))] for x in comment_list]
    comment_list = sorted(comment_list, key=lambda x: x[1], reverse=True)[0:5]
    c_1_data = [{'name': x[0], 'value': x[1]} for x in comment_list]
    le_data = [x[0] for x in comment_list]
    return render(request, "echarts_2.html", locals())


def chart_3(request):
    comment_list = list(models.Data.objects.all().values_list('name', 'hot').distinct())
    # print(comment_list)
    comment_list = [[x[0], float(x[1].replace('条点评', ''))] for x in comment_list]
    comment_list = sorted(comment_list, key=lambda x: x[1], reverse=True)[0:5]
    c_1_data = [{'name': x[0], 'value': x[1]} for x in comment_list]
    le_data = [x[0] for x in comment_list]
    return render(request, "echarts_3.html", locals())


def chart_4(request):
    comment_list = list(models.Data.objects.all().values_list('name', 'score').distinct())
    # print(comment_list)
    comment_list = [[x[0], float(x[1].replace('条点评', ''))] for x in comment_list]
    comment_list = sorted(comment_list, key=lambda x: x[1], reverse=True)[0:15]
    c_1_data = [{'name': x[0], 'value': x[1]} for x in comment_list]
    le_data = [x[0] for x in comment_list]
    return render(request, "echarts_4.html", locals())


def chart_5(request):
    # 词云图
    r_2_data = list(models.Data.objects.all().values_list('name', 'comment_count').distinct())
    # print(comment_list)
    r_2_data = [[x[0], int(x[1].replace('条点评', ''))] for x in r_2_data]
    r_2_data = [{"name": x[0], "value": x[1]} for x in r_2_data]
    return render(request, "echarts_5.html", locals())

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐