赞
踩
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总
技术栈:
Python语言、Django后端框架 MySQL数据库 pyecharts可视化 、selenium爬虫、词云 chromedriver 、BOSS直聘招聘网站数据
(1)首页------数据概况
(2)招聘数据
(3)薪资水平分析
(4)各学历占比分析
(5)词云图分析
(6)企业情况分析
(7)我的收藏
(8)注册登录界面
(9)后台数据管理
本项目主要利用python技术爬取BOSS直聘网站上的岗位信息,进行对比分析UI设计师与产品经理两个职位的趋势。爬取字段:工作地点,薪资范围,学历要求,工作经验,公司性质等。 模拟登陆BOSS直聘网站,爬取相关信息下载网页源码,采用beautifulsoup来提取数据,存储到数据库,以柱状图或饼状图形式对数据进行可视化分析得出结论。
boss直聘招聘信息采集可视化系统是一种集成了爬虫、数据存储和数据可视化等功能的Web应用程序,主要用于采集boss直聘网站上的招聘信息,并通过可视化图表展示这些信息,以帮助用户更加方便地了解企业招聘行情、职位需求等信息。
通常来说,boss直聘招聘信息采集可视化系统具有以下几个主要功能:
1、数据爬取:系统通过爬虫技术对boss直聘网站上的招聘信息进行抓取和解析,收集有关招聘职位、公司名称、职位描述、薪资水平、工作地点等方面的数据。
2、数据处理:采集下来的数据需要经过清洗和处理,才能更好地满足后续的分析和可视化需求。这里可以使用Python的pandas库等进行数据清洗和处理。
3、数据存储:系统需要将经过处理的数据存储到数据库中,以便后续的检索和可视化。可以使用关系型数据库,如MySQL、PostgreSQL等进行存储。
4、数据可视化:通过可视化图表将采集到的数据呈现给用户,帮助他们更好地理解和分析企业的招聘状况、职位需求等。这里可以使用Python的matplotlib、seaborn等库进行数据可视化。
5、用户管理:为了方便用户使用和管理,系统通常需要提供用户注册、登陆等功能,并具有一定的权限管理机制。
总之,boss直聘招聘信息采集可视化系统是一种非常实用的Web应用程序,可以帮助用户更加方便地了解企业招聘信息,也能够有效地提高HR人员的工作效率。同时,通过使用Python和相关的库和框架,开发时间和成本也可以得到有效的控制。
from django.shortcuts import render,redirect from django.http import HttpResponse from app.models import JobInfo, User,UserLike from django.core.paginator import Paginator import hashlib import json from .error import * from .utils import getHomePageData from .utils import getPubliData from .utils import getTableData from .utils import getSalaryData from .utils import getEducationalData from .utils import getAddressData from .utils import getCompanyData # 登录页面 def login(request): if request.method == 'GET': return render(request, 'login.html') else: uname = request.POST.get('username') pwd = request.POST['password'] md5 = hashlib.md5() md5.update(pwd.encode()) pwd = md5.hexdigest() try: user = User.objects.get(username=uname, password=pwd) request.session['username'] = user.username return redirect('home') except: return errorResponse(request, '用户名或密码错误!') # 注册用户 def registry(request): if request.method == 'GET': return render(request, 'registry.html') else: uname = request.POST.get('username') pwd = request.POST.get('password') checkPWD = request.POST.get('checkPassword') try: User.objects.get(username=uname) except: if not uname or not pwd or not checkPWD: return errorResponse(request, '不允许为空!') if pwd != checkPWD: return errorResponse(request, '两次密码不符合!') md5 = hashlib.md5() md5.update(pwd.encode()) pwd = md5.hexdigest() User.objects.create(username=uname, password=pwd,info='这个人很懒,什么都没留下....') return redirect('login') return errorResponse(request, '该用户已被注册') # 退出登录 def logOut(request): request.session.clear() return redirect('login') # 首页 def home(request): username = request.session.get("username") userInfo = User.objects.get(username=username) typeList,maxCount,maxSalary,addressTop,praticeMax,maxType,maxEdu = getHomePageData.getPageData() defaultType = typeList[0] if request.GET.get("type"): defaultType = request.GET.get("type") maxSalary = getHomePageData.getSalaryMaxData(defaultType) salaryXData,salarY1Data,salarY2Data = getHomePageData.getSalaryChartData(defaultType) typeBarData = getHomePageData.getTypeBarData() return render(request, 'home.html',{ 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'typeList':typeList, 'defaultType':defaultType, 'maxSalary':maxSalary, 'salaryXData':salaryXData, 'salarY1Data':salarY1Data, 'salarY2Data':salarY2Data, 'typeBarData':typeBarData, 'maxCount':maxCount, 'maxSalary':maxSalary, 'addressTop':addressTop, 'maxType':maxType, 'maxEdu':maxEdu }) def userLike(request): username = request.session.get("username") userInfo = User.objects.get(username=username) likeList = [i for i in userInfo.userlike_set.all()] def map_fn(item): item.job.salary = json.loads(item.job.salary) item.job.companyPeople = json.loads(item.job.companyPeople) item.job.workTag = json.loads(item.job.workTag) if item.job.companyTags == '无': item.job.companyTags = [] else: item.job.companyTags = json.loads(item.job.companyTags) if not item.job.pratice: item.job.salary = list(map(lambda x: str(int(x / 1000)), item.job.salary)) else: item.job.salary = list(map(lambda x: str(x), item.job.salary)) item.job.salary = '-'.join(item.job.salary) item.job.companyPeople = list(map(lambda x: str(x), item.job.companyPeople)) item.job.companyPeople = '-'.join(item.job.companyPeople) return item likeList = list(map(map_fn, likeList)) return render(request, 'userLike.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'likeList':likeList }) def deleteUserLike(request): userLike = UserLike.objects.filter(id=request.GET.get('id')) userLike.delete() return successResponse(request,'删除成功','userLike') def deleteStation(request): userLike = JobInfo.objects.filter(id=request.GET.get('id')) userLike.delete() return successResponse(request, '删除成功','tableData') def addUserLike(request): username = request.session.get("username") userInfo = User.objects.get(username=username) userLike = UserLike.objects.create(job_id=request.GET.get('id'),user_id=userInfo.id) return successResponse(request, '添加成功','userLike') def userInfo(request): username = request.session.get("username") userInfo = User.objects.get(username=username) if request.method == 'GET': return render(request, 'userInfo.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info }) else: user = User.objects.get(username=username) md5 = hashlib.md5() md5.update(request.POST['password'].encode()) pwd = md5.hexdigest() if request.POST['info']: user.info = request.POST['info'] if request.POST['password']: user.password = pwd try: if request.FILES['avatar'] != None: user.avatar = request.FILES['avatar'] except: pass user.save() userInfo = User.objects.get(username=username) return render(request, 'userInfo.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info }) def tableData(request): username = request.session.get("username") userInfo = User.objects.get(username=username) sorted = '无' typeList, maxCount, maxSalary, addressTop, praticeMax, maxType, maxEdu = getHomePageData.getPageData() if request.method == 'GET': if request.GET.get("sorted"): sorted = request.GET.get("sorted") tableData = getTableData.getTableData(sorted,'无','无') else: if request.GET.get("sorted"): sorted = request.GET.get("sorted") tableData = getTableData.getTableData(sorted,request.POST.get('searchWord'),request.POST.get('type')) return render(request, 'tableData.html', { 'username': username, 'userInfo': userInfo.info, 'userAvatar': userInfo.avatar, 'typeList': typeList, 'tableData': tableData, 'flag':False }) paginator = Paginator(tableData, 10) cur_page = 1 if request.GET.get("page"): cur_page = int(request.GET.get("page")) if cur_page: c_page = paginator.page(cur_page) else: c_page = paginator.page(1) page_range = [] visibleNumber = 10 min = int(cur_page - visibleNumber / 2) if min < 1: min = 1 max = min + visibleNumber if max > paginator.page_range[-1]: max = paginator.page_range[-1] for i in range(min, max): page_range.append(i) return render(request, 'tableData.html', { 'username': username, 'userInfo': userInfo.info, 'userAvatar': userInfo.avatar, 'typeList': typeList, 'tableData': tableData, "pagination": paginator, "c_page": c_page, 'page_range': page_range, 'flag':True }) def salaryChart(request): username = request.session.get("username") userInfo = User.objects.get(username=username) xData,yData,y1Data = getSalaryData.getEducationlSalaryData() pieData = getSalaryData.getPieData() return render(request, 'salaryChart.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'xData':xData, 'yData':yData, 'y1Data':y1Data, 'pieData':pieData }) def educational(request): username = request.session.get("username") userInfo = User.objects.get(username=username) treeData = getEducationalData.getEducationalTreeData() typeList, maxCount, maxSalary, addressTop, praticeMax, maxType, maxEdu = getHomePageData.getPageData() defaultType = typeList[0] if request.GET.get("type"): defaultType = request.GET.get("type") xData,yData = getEducationalData.getEducationByType(defaultType) return render(request, 'educationalChart.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'treeData':treeData, 'typeList':typeList, 'defaultType':defaultType, 'xData':xData, 'yData':yData }) def address(request): username = request.session.get("username") userInfo = User.objects.get(username=username) typeList, maxCount, maxSalary, addressTop, praticeMax, maxType, maxEdu = getHomePageData.getPageData() defaultType = typeList[0] if request.GET.get("type"): defaultType = request.GET.get("type") xData,yData = getAddressData.getAddressByType(defaultType) addressList = getAddressData.getAddressList() defaultAddress = addressList[0] if request.GET.get("address"): defaultAddress = request.GET.get("address") pieData = getAddressData.getAddressDataPie(defaultAddress) return render(request, 'addressChart.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'defaultType':defaultType, 'typeList':typeList, 'xData':xData, 'yData':yData, 'defaultAddress':defaultAddress, 'addressList':addressList, 'pieData':pieData }) def workTag(request): username = request.session.get("username") userInfo = User.objects.get(username=username) return render(request, 'workTag.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info }) def company(request): username = request.session.get("username") userInfo = User.objects.get(username=username) xData,yData = getCompanyData.getCompanyPeopleData() resdata = getCompanyData.getCompanyNature() return render(request, 'company.html', { 'username': username, 'userAvatar': userInfo.avatar, 'userInfo': userInfo.info, 'xData':xData, 'yData':yData, 'resdata':resdata })
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。