首页 >> 大全

计算机毕业设计:基于python招聘数据分析可视化系统+预测算法+爬虫+Flas

2024-01-10 大全 39 作者:考证青年

[毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总

2023年 - 2024年 最新计算机毕业设计 本科 选题大全 汇总

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

1、项目介绍

本项目旨在通过使用的库爬取拉勾网的招聘数据,并对数据进行清洗和持久化保存,以研究市场上招聘信息的趋势和分布情况。使用Flask框架作为后端技术,将数据库中的数据呈现给前端展示,借助基于前端框架Layui的应用,并结合图表展示工具,将数据以饼图、条形图等形式进行可视化展示。主要展示了招聘信息的数量分布、薪资分布情况以及关键词的分布情况。通过数据分析和可视化展示,得出如下结论:不同城市和行业的招聘信息数量和薪资水平有明显差异,而不同的招聘职位则有不同的职能和技能要求。因此,这些数据和分析结果对于个人求职者和企业招聘者提供了有益的参考。

关键词:; Flask框架;;Mysql;Layui

2、项目界面

(1)招聘企业分析

(2)全国招聘地图

(3)岗位分析词云图

数据可视化分析论文_数据可视化分析及应用_

(4)薪资预测模块

(5)招聘企业分析----融资情况

(6)招聘企业分析----类型

(7)薪资分析

(8)数据采集

3、项目说明

(1)系统功能设计

本系统是使用进行创作,基于Flask框架实现Web功能,使用MySQL存储系统信息,结合进行数据可视化分析[11],数据获取通过对拉勾网进行爬取,获取的数据进行清洗处理后存储到MySQL数据库中,大致实现数据的爬取,系统管理和数据的可视化等模块[12],系统功能模块如图4-1系统功能模块。

(2)薪资预测模块

可以通过选择职位学历城市工作经验,使用随机森林预测薪资。

特征数据包括

“”、“city”、“”、""和""这些列,标签数据包括""和""这两列。

然后,代码使用r类初始化一个随机森林回归模型,并通过调用fit方法对模型进行训练,将特征和标签数据作为参数传入。

接下来,代码创建了一个新的对象,其中包含了一个示例的特征数据。然后,通过调用训练好的模型的方法,对新的特征数据进行薪资范围的预测。

4、部分代码

(1)预测代码

 提取特征和标签
X = df[['education', 'city', 'work_year', 'com_size', 'finance_stage']]
y = df[['low_salary', 'high_salary']]#训练随机森林模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X, y)#预测薪资范围
new_data = pd.DataFrame({'education': [1], 'city': [1], 'work_year': [1], 'com_size': [1], 'finance_stage': [1]})
prediction = model.predict(new_data)
print(prediction)

(2)爬虫代码


import os
import random
import math
from time import sleep
import json
from urllib.parse import quote
import requests
from fake_useragent import UserAgent# 判断文件是否存在,否则创建新的
def mkdir(path):folder = os.path.exists(path)if not folder:os.makedirs(path)print(path + "文件夹创建成功")else:print("已存在")def my_proxy():# 隧道域名:端口号tunnel = "v760.kdltps.com:15818"# 用户名密码方式username = "t18602188509513"password = "p0z0ogo6"proxies = {"http": "http://%(user)s:%(pwd)s@%(proxy)s/"% {"user": username, "pwd": password, "proxy": tunnel},"https": "http://%(user)s:%(pwd)s@%(proxy)s/"% {"user": username, "pwd": password, "proxy": tunnel},}# proxies = {#     # 再例如#     "http": "http://127.0.0.1:7890",#     # 再例如#     "https": "http://127.0.0.1:7890",# }return proxiesdef get_user_agent():user_agent = UserAgent()return user_agent.chromedef get_headers(job_q):headers = {"User-Agent": get_user_agent(),"Host": "www.lagou.com","Origin": "https://www.lagou.com","Referer": f"https://www.lagou.com/jobs/list_{job_q}?labelWords=&fromSearch=true&suginput=","X-Anit-Forge-Code": "0","X-Anit-Forge-Token": "None","X-Requested-With": "XMLHttpRequest","Cookie": get_cookies(),}return headersdef get_cookies():cookies = def get_page_num(count):"""计算要抓取的页数,通过在拉勾网输入关键字信息,可以发现最多显示30页信息,每页最多显示15个职位信息:param count::return:"""page_num = math.ceil(count / 15)if page_num > 29:return 2# return 29else:return page_numdef get_json(job_name, page_num, city):"""从指定的url中通过requests请求携带 请求头和请求体 获取返回:param city::param job_name: 工作:param page_num: 第几页:return:"""post_url = f"https://www.lagou.com/jobs/positionAjax.json?px=default&city={quote(city)}&needAddtionalResult=false"# job_q = quote(job_name)url_job = f"https://www.lagou.com/jobs/list_{job_name}?px=default&city={city}#filterBox"headers = get_headers(job_q=quote(job_name))# 请求体data = {"first": "true","pn": page_num,"kd": job_name,}# 代理# proxy = my_proxy()     注释掉# proxy = get_proxies(url_job)#s = requests.Session()print("建立session:", s, "\n\n")s.get(url=url_job, headers=headers, timeout=10)# s.get(url=url_job, headers=headers, timeout=10, proxies=proxy)cookie = s.cookiesprint("获取cookie:", cookie, "\n\n")# 关闭 keep-aliveheaders['Connection'] = "close"res = requests.post(url=post_url, headers=headers, data=data, cookies=cookie, timeout=10)# res = requests.post(url=post_url, headers=headers, data=data, cookies=cookie, timeout=10, proxies=proxy)print(f"城市{city},工作{job_name}正在爬取第{page_num}页")res.raise_for_status()res.encoding = "utf-8"page_data = res.json()return page_datadef spider(job, city):"""爬虫入口:param job::param city::return:"""# 返回第一页json文件,方便查看有多少页数据,针对中断爬虫,继续爬取first_page = get_json(job_name=job, page_num=1, city=city)# job 页码数量 numnum = get_page_num(first_page["content"]["positionResult"]["totalCount"])print(f"在城市{city},工作{job}可以爬取{num}页")# 已经爬取的数量sleep(5)# sleep(10)# 工作保存路径path_route = f"Data/{job}"mkdir(path_route)# 正式爬取for page in range(1, num + 1):# 获取每一页的职位的相关职位信息page_data = get_json(job_name=job, page_num=page, city=city)filename = path_route + "/" + city + job + str(page) + ".json"with open(filename, "w", encoding="utf-8") as f_obj:  # 打开模式为可写json.dump(page_data, f_obj, ensure_ascii=False)  # 存储文件sleep(20)jobs = ["java", "python", "C++", "php", "web", "bi", "go", "ruby", "android", "ios", "算法", "测试", "运维", "数据库","ai"]
cities = ["北京", "上海", "深圳", "广州", "杭州", "成都", "南京", "武汉"]job_num = 0p_job = jobs[job_num]
# 遍历城市
# 从第 n 个开始爬
n = 0
for i in range(n, len(cities)):c = cities[i]spider(job=p_job, city=c)sleep(5)# sleep(10)

源码获取:

由于篇幅限制,获取完整文章或源码、代做项目的,查看我的头像和用户名就可以找到我啦

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了