博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

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

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

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

2、最全计算机大数据专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈:Vue框架、echarts可视化、Python语言、flask框架、Scrapy爬虫框架、基于用户协同过滤推荐算法、基于物品协同过滤推荐算法、百度AI接口、MySQL数据库

研究背景:
智联招聘每日新增数十万职位,信息分散且更新快,求职者难以直观把握薪资分布与行业趋势,平台亟需基于大数据的推荐与可视化方案提升人岗匹配效率。

研究意义:
本系统以Scrapy爬取10余城50万条智联数据,经清洗后存入MySQL,结合双协同过滤与百度AI实名认证,可为毕业设计展示“爬虫-算法-可视化”完整闭环,也可为HR提供薪酬调研工具,预计节省70%人工整理时间。


2、项目界面

(1)招聘数据分析可视化大屏
在这里插入图片描述

(2)数据分析页面
在这里插入图片描述

(3)基于物品系统过滤推荐算法推荐
在这里插入图片描述

(4)基于用户系统过滤推荐算法推荐
在这里插入图片描述
(6)薪资分析散点图
在这里插入图片描述

(7)个人信息设置
在这里插入图片描述

(8)注册登录界面
在这里插入图片描述


3、项目说明

系统以Scrapy分布式爬取智联招聘10余城共50万条职位数据,经清洗转化后存入MySQL(数据量13.4万)。后端采用Flask提供RESTful接口,前端Vue集成Apache Echarts,实现数据大屏、中国地图职位分布、薪酬散点、多种折线/饼图/环图等可视化;结合jieba分词生成职位词云,直观展示岗位核心需求。推荐模块同时部署基于用户与基于物品的协同过滤算法,根据浏览与收藏行为实时生成个性化职位列表。系统接入百度AI完成身份证OCR与实名认证,确保用户身份真实。整套流程覆盖采集-存储-分析-推荐-可视化全链路,为求职者、HR及毕业设计提供开箱即用的大数据解决方案。


4、核心代码

import os
import time

from flask import Flask, send_from_directory, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from werkzeug.utils import secure_filename, redirect

from api.alipayApi import payBp
from api.baiduApi import idocr
from base.core import JSONEncoder
from base.response import ResMsg
from api.testApi import bp

import logging

app = Flask(__name__)
app.register_blueprint(bp, url_prefix='/test')
# app.register_blueprint(movieBp, url_prefix='/movie')
app.register_blueprint(payBp, url_prefix='/alipay')

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/flask_job'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JSON_AS_ASCII'] = False
app.config['SECRET_KEY'] = 'KJDFLSjfldskj'

UPLOAD_FOLDER="upload"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['txt','png','jpg','xls','JPG','PNG','gif','GIF'])

# 日志系统配置
handler = logging.FileHandler('error.log', encoding='UTF-8')
logging_format = logging.Formatter(
            '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)

# 返回json格式转换
app.json_encoder = JSONEncoder

db = SQLAlchemy(app)
ma = Marshmallow(app)

from api.userApi import userBp
from api.jobApi import jobBp

app.register_blueprint(userBp, url_prefix='/user')
app.register_blueprint(jobBp, url_prefix='/job')

@app.route('/test')
def test():  # put application's code here
    res = ResMsg()
    test_dict = dict(name="zhang", age=19)
    res.update(data=test_dict, code=0)
    return res.data

@app.errorhandler(500)
def special_exception_handler(error):
    app.logger.error(error)
    return '请联系管理员', 500

#判断文件后缀
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS

@app.route('/file/upload', methods=['POST'], strict_slashes=False)
def api_upload():
    res = ResMsg()
    file_dir=os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f = request.files['myfile']
    if f and allowed_file(f.filename):
        fname = f.filename
        # fname = secure_filename(f.filename)
        print(fname)
        ext = fname.rsplit('.', 1)[1]
        unix_time = int(time.time())
        new_filename = str(unix_time)+'.'+ext
        f.save(os.path.join(file_dir, new_filename))
    res.update(data=new_filename, code=0)
    return res.data

@app.route('/file/idocr', methods=['POST'], strict_slashes=False)
def api_id_ocr():
    res = ResMsg()
    file_dir=os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f = request.files['myfile']
    if f and allowed_file(f.filename):
        fname = f.filename
        # fname = secure_filename(f.filename)  有中文这个会有问题
        # print(fname)
        ext = fname.rsplit('.', 1)[1]
        unix_time = int(time.time())
        new_filename = str(unix_time)+'.'+ext
        f.save(os.path.join(file_dir, new_filename))
        idno = idocr(new_filename)[0]
        name = idocr(new_filename)[1]
    res.update(data=dict(idno=idno,pic=new_filename,name=name), code=0)
    return res.data

@app.route('/file/download/<filename>/')
def api_download(filename):
    # print('下载..' + filename)
    return send_from_directory('upload', filename, as_attachment=False)



if __name__ == '__main__':
    # app.run(debug=True,host='0.0.0.0',port=5000)
   app.run()


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

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅

点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐