0


基于Python的高校学生职业推荐系统(源码+vue+hadoop+hive+部署文档等)

收藏关注不迷路!!

🌟文末获取源码+数据库🌟

感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

文章目录


前言

💗博主介绍:✨全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,专注于Java/Python/小程序app/深度学习等计算机设计,主要对象是咱们计算机相关专业的大学生,希望您们都能前途无量!✨💗

👇🏻 精彩专栏 推荐订阅👇🏻

计算机毕业设计设计精品实战案例✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

详细视频演示

文章底部名片,联系我看更详细的演示视频

项目介绍

  时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,高校学生职业推荐系统当然不能排除在外。本次我所开发的高校学生职业推荐系统是在实际应用和软件工程的开发原理之上,运用Python语言以及Django框架进行开发,可以让用户实现在线进行浏览正在热映、电影信息,进行在线论坛交流、管理个人信息等操作。在系统开发之前首先要进行需求分析,分析出高校学生职业推荐系统的主要功能,然后设计了系统结构。整体设计包括系统的功能、系统总体结构、系统数据结构和对系统安全性进行设计;最后要对系统进行测试,还要对测试的结果进行总结和分析,为以后系统的维护提供方便,也为以后类似系统的开发提供参考和帮助。这种个性化的网络系统管理更重视相互协调和管理合作,能激发管理者的创造性和主动性,这对高校学生职业推荐系统来说非常有益。

技术介绍

开发语言:Python
python框架:Django
软件版本:python3.7/python3.8
数据库:mysql 5.7或更高版本
数据库工具:Navicat11
开发软件:PyCharm/vs code
前端框架:vue.js

功能介绍

本防系统采用MySQL数据库和Python语言,Django框架进行开发而成,极大程度上的保证了系统的稳定性。
3.4.1 关于系统的基本要求
(1)功能要求:管理人员可以对用户、企业、个人简历、职位类型、职位招聘、面试邀请、应聘信息、面试信息、录用结果、系统管理、我的信息等功能进行管理 [3]。用户登录系统后,可以在线浏览系统首页、个人简历、职位招聘、公告信息,对个人简历进行填写并上传等;还可以修改个人信息等。
(2)性能:可以准确无误的在不同的操作系统中登录到用户或者管理员的相应界面进行轻松的操作[4]。
(3)环境要求:支持不同的操纵系统和不同的平台,可用于Windows系列、Vista系统等多种操作系统[5]。

系统启动后,在登录界面,输入正确的账号密码,选择进入管理员界面或用户界面,管理员界面是用来管理页面与用户信息,用户界面可以正常的使用,并对个人信息、登录密码、个人简历、职位招聘等进行份内的操作,系统登录结构图如图4-1所示。
在这里插入图片描述

图4-1 系统登录结构图
管理员模块属于是网站的后台,进入之后有大量的管理员功能,管理员也可以使用用户模块的功能,为了维护网站的稳定与页面的布局,将管理员模块的功能详细化后可以使用系统管理对页面进行布局修改,可以发布公告提示用户规范,用户模块只可以对个人信息、登录密码、个人简历等进行管理等,高校学生职业推荐系统总体结构图如图4-2所示。
在这里插入图片描述

图4-2 高校学生职业推荐系统总体结构图

核心代码

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import LvyoujingdianItem
import time
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji

# 旅游景点
class LvyoujingdianSpider(scrapy.Spider):
    name ='lvyoujingdianSpider'
    spiderUrl ='https://you.ctrip.com/sight/lanzhou231/s0-p{}.html'
    start_urls = spiderUrl.split(";")
    protocol =''
    hostname =''

    def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)

    def start_requests(self):

        plat = platform.system().lower()if plat =='linux' or plat =='windows':
            connect = self.db_connect()
            cursor = connect.cursor()if self.table_exists(cursor,'5295r_lvyoujingdian')==1:
                cursor.close()
                connect.close()
                self.temp_data()return

        pageNum =1+1for 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 plat =='windows_bak':
            pass
        elif plat =='linux' or plat =='windows':
            connect = self.db_connect()
            cursor = connect.cursor()if self.table_exists(cursor,'5295r_lvyoujingdian')==1:
                cursor.close()
                connect.close()
                self.temp_data()return

        list = response.css('div.list_wide_mod2 div.list_mod2')for item in list:

            fields =LvyoujingdianItem()if'(.*?)' in '''dt a::attr(href)''':
                fields["laiyuan"]= re.findall(r'''dt a::attr(href)''', response.text, re.DOTALL)[0].strip()else:
                fields["laiyuan"]= self.remove_html(item.css('dt a::attr(href)').extract_first())if'(.*?)' in '''div.leftimg a img::attr(src)''':
                fields["fengmian"]= re.findall(r'''div.leftimg a img::attr(src)''', response.text, re.DOTALL)[0].strip()else:
                fields["fengmian"]= self.remove_html(item.css('div.leftimg a img::attr(src)').extract_first())if'(.*?)' in '''div.rdetailbox dl dt a::text''':
                fields["biaoti"]= re.findall(r'''div.rdetailbox dl dt a::text''', response.text, re.DOTALL)[0].strip()else:
                fields["biaoti"]= self.remove_html(item.css('div.rdetailbox dl dt a::text').extract_first())if'(.*?)' in '''b.hot_score_number::text''':
                fields["redu"]= re.findall(r'''b.hot_score_number::text''', response.text, re.DOTALL)[0].strip()else:
                fields["redu"]= self.remove_html(item.css('b.hot_score_number::text').extract_first())if'(.*?)' in '''dd.ellipsis::text''':
                fields["dizhi"]= re.findall(r'''dd.ellipsis::text''', response.text, re.DOTALL)[0].strip()else:
                fields["dizhi"]= self.remove_html(item.css('dd.ellipsis::text').extract_first())if'(.*?)' in '''a.score strong::text''':
                fields["pingfen"]= re.findall(r'''a.score strong::text''', response.text, re.DOTALL)[0].strip()else:
                fields["pingfen"]= self.remove_html(item.css('a.score strong::text').extract_first())if'(.*?)' in '''a.recomment::text''':
                fields["pinglun"]= re.findall(r'''a.recomment::text''', response.text, re.DOTALL)[0].strip()else:
                fields["pinglun"]= self.remove_html(item.css('a.recomment::text').extract_first())if'(.*?)' in '''p[class="bottomcomment ellipsis open_popupbox_a"]''':
                fields["dianping"]= re.findall(r'''p[class="bottomcomment ellipsis open_popupbox_a"]''', response.text, re.DOTALL)[0].strip()else:
                fields["dianping"]= self.remove_html(item.css('p[class="bottomcomment ellipsis open_popupbox_a"]').extract_first())

            detailUrlRule = item.css('dt a::attr(href)').extract_first()if self.protocol in detailUrlRule:
                pass
            elif detailUrlRule.startswith('//'):
                detailUrlRule = self.protocol +':'+ detailUrlRule
            else:
                detailUrlRule = self.protocol +'://'+ self.hostname + detailUrlRule
                fields["laiyuan"]= detailUrlRule

            yield scrapy.Request(url=detailUrlRule, meta={'fields': fields},  callback=self.detail_parse, dont_filter=True)

    # 详情解析
    def detail_parse(self, response):
        fields = response.meta['fields']

        try:if'(.*?)' in '''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''':
                fields["gfdh"]= re.findall(r'''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''', response.text, re.S)[0].strip()else:if'gfdh'!='xiangqing' and 'gfdh'!='detail' and 'gfdh'!='pinglun' and 'gfdh'!='zuofa':
                    fields["gfdh"]= self.remove_html(response.css('''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''').extract_first())else:
                    fields["gfdh"]= emoji.demojize(response.css('''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''').extract_first())
        except:
            pass

        try:if'(.*?)' in '''div[class="detailModule normalModule"]''':
                fields["detail"]= re.findall(r'''div[class="detailModule normalModule"]''', response.text, re.S)[0].strip()else:if'detail'!='xiangqing' and 'detail'!='detail' and 'detail'!='pinglun' and 'detail'!='zuofa':
                    fields["detail"]= self.remove_html(response.css('''div[class="detailModule normalModule"]''').extract_first())else:
                    fields["detail"]= emoji.demojize(response.css('''div[class="detailModule normalModule"]''').extract_first())
        except:
            pass

        return fields

    # 去除多余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:return1else:return0

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

        connect = self.db_connect()
        cursor = connect.cursor()
        sql ='''
            insert into `lvyoujingdian`(
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            )
            select
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            from `5295r_lvyoujingdian`
            where(not exists(select
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            from `lvyoujingdian` where
                `lvyoujingdian`.id=`5295r_lvyoujingdian`.id
            ))
            limit {0}'''.format(random.randint(10,15))

        cursor.execute(sql)
        connect.commit()

        connect.close()

数据库参考

----Current Database: `djangokyhd2486`
--/*!40000 DROP DATABASE IF EXISTS `djangokyhd2486`*/;

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `djangokyhd2486` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `djangokyhd2486`;---- Table structure for table `aboutus`
--

DROP TABLE IF EXISTS `aboutus`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aboutus` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
  `content` longtext NOT NULL COMMENT '内容',
  `picture1` longtext COMMENT '图片1',
  `picture2` longtext COMMENT '图片2',
  `picture3` longtext COMMENT '图片3',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2DEFAULT CHARSET=utf8 COMMENT='关于我们';/*!40101 SET character_set_client = @saved_cs_client */;---- Dumping data for table `aboutus`
--

LOCK TABLES `aboutus` WRITE;/*!40000 ALTER TABLE `aboutus` DISABLE KEYS */;
INSERT INTO `aboutus` VALUES (1,'2024-01-3006:29:08','关于我们','ABOUT US','当你设想门外是寒冷可怕的世界时,你还应该开门出去看看,是否真的如此。如果你有信心,你对前途就不犹豫了。如果你有勇气,你就不怕前途是否有困难或危险了每个人心中都应有两盏灯,一盏是希望的灯,一盏是勇气的灯。有了这两盏灯,我们就不怕海上的黑暗和风涛的险恶了。人的一生很像是在雾中行走。远远望去,只是迷蒙一片,辨不出方向和吉凶。可是,当你鼓起勇气,放下恐惧和怀疑,一步一步向前走去的时候,你就会发现,每走一步,你都能把下一步路看得清楚一点。“往前走,别站在远远的地方观望!”你就可以找到你的方向。','upload/aboutus_picture1.jpg','upload/aboutus_picture2.jpg','upload/aboutus_picture3.jpg');/*!40000 ALTER TABLE `aboutus` ENABLE KEYS */;UNLOCK TABLES;---- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) NOT NULL COMMENT '配置参数名称',
  `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
  `url` varchar(500) DEFAULT NULL COMMENT 'url',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4DEFAULT CHARSET=utf8 COMMENT='配置文件';/*!40101 SET character_set_client = @saved_cs_client */;---- Dumping data for table `config`
--

LOCK TABLES `config` WRITE;/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg',NULL),(2,'picture2','upload/picture2.jpg',NULL),(3,'picture3','upload/picture3.jpg',NULL);/*!40000 ALTER TABLE `config` ENABLE KEYS */;UNLOCK TABLES;---- Table structure for table `gerenjianli`
--

DROP TABLE IF EXISTS `gerenjianli`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `gerenjianli` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yonghuzhanghao` varchar(200) DEFAULT NULL COMMENT '用户账号',
  `yonghuxingming` varchar(200) DEFAULT NULL COMMENT '用户姓名',
  `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
  `shouji` varchar(200) DEFAULT NULL COMMENT '手机',
  `touxiang` longtext COMMENT '头像',
  `zhuanye` varchar(200) DEFAULT NULL COMMENT '专业',
  `xueli` varchar(200) DEFAULT NULL COMMENT '学历',
  `chushengriqi` date DEFAULT NULL COMMENT '出生日期',
  `qiuzhiyixiang` varchar(200) DEFAULT NULL COMMENT '求职意向',
  `yixiangzhiwei` varchar(200) DEFAULT NULL COMMENT '意向职位',
  `yixiangchengshi` varchar(200) DEFAULT NULL COMMENT '意向城市',
  `xinziyaoqiu` varchar(200) DEFAULT NULL COMMENT '薪资要求',
  `jiaoyubeijing` varchar(200) DEFAULT NULL COMMENT '教育背景',
  `huojiangzhengshu` varchar(200) DEFAULT NULL COMMENT '获奖证书',
  `gongzuojingyan` longtext COMMENT '工作经验',
  `xiangmujingyan` longtext COMMENT '项目经验',
  `gerenjineng` longtext COMMENT '个人技能',
  `ziwopingjia` longtext COMMENT '自我评价',
  `jianliwenjian` longtext COMMENT '简历文件',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=39DEFAULT CHARSET=utf8 COMMENT='个人简历';/*!40101 SET character_set_client = @saved_cs_client */;

系统效果图

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

文章目录

目 录
第1章 绪 论 4
1.1 课题的研究背景 4
1.2 课题研究目的 4
1.3 课题的研究意义 4
1.4 研究现状 5
第2章 相关技术 6
2.1 Python简介 6
2.2 Django框架 6
2.3 PyCharm简介 7
2.4 MySQL简介 8
第3章 系统分析 2
3.1 技术可行性分析 2
3.2 操作可行性分析 2
3.3 需求分析 2
3.4 项目设计目标 2
3.4.1 关于系统的基本要求 3
3.4.2开发目标 3
3.5 系统流程分析 3
3.6 本章小结 6
第4章 系统设计 7
4.1 系统体系结构 7
4.2 开发流程设计 8
4.3 数据库设计原则 9
4.4 数据表信息 11
第5章 系统实现 16
5.1系统前台功能实现 16
5.2后台模块实现 20
5.2.1管理员模块实现 20
5.2.2 企业模块实现 20
5.3 本章小结 23
第6章 系统测试 24
6.1 系统测试的目的 24
6.2 系统测试方法 24
6.3 功能测试 24
6.4 本章小结 25
结 论 26
参考文献 27
致 谢 28

源码获取

下方名片联系我即可!!

 大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
标签: hadoop python vue.js

本文转载自: https://blog.csdn.net/QQ1039692211/article/details/142954132
版权归原作者 QQ1039692211 所有, 如有侵权,请联系我们删除。

“基于Python的高校学生职业推荐系统(源码+vue+hadoop+hive+部署文档等)”的评论:

还没有评论