当前位置:   article > 正文

毕业设计:python招聘推荐系统+实时爬取+可视化+Django框架(源码+文档)_django实现实时爬取

django实现实时爬取

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

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

1、项目介绍

技术栈:
Python语言、Django框架、MySQL数据库、基于物品的协同过滤推荐算法、Selenium爬虫库、Echarts可视化

2、项目界面

(1)系统首页

在这里插入图片描述

(2)算法推荐模块(协同过滤推荐算法)
在这里插入图片描述

(3)职位柱状图分析

在这里插入图片描述

(4)学历要求分析饼状图
在这里插入图片描述

(5)招聘信息数据列表

在这里插入图片描述

(6)数据采集页面

在这里插入图片描述

(7)注册登录界面

在这里插入图片描述

(8)配套文档

在这里插入图片描述

3、项目说明

本系统以Python计算机设计语言为基础,使用 Selenium对猎聘网的招聘就业信息源进行抓取,针对网页信息编写抽取规则,对招聘就业信息进行必要的过滤和提取,使用MySql对招聘就业信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建,结合协同过滤算法基于职位信息完成对用户的招聘职位信息推荐,完成整个爬取以及数据检索到成功进行职位推荐的网页端操作展示。

django协同过滤算法的招聘推荐系统是一种基于django框架开发的用于帮助企业快速找到合适人才的智能推荐系统。该系统利用协同过滤算法,通过分析用户的历史行为和偏好,为企业提供个性化的招聘推荐。

该系统主要包括以下几个模块:

  1. 用户管理模块:用户可以注册、登录和管理个人信息,包括教育背景、工作经验和技能等。

  2. 职位管理模块:企业可以发布招聘职位,并设置职位的详细要求和福利待遇等信息。

  3. 数据收集模块:系统通过收集用户的浏览记录、职位投递记录和面试结果等数据,建立用户-职位的关联关系。

  4. 推荐算法模块:系统利用协同过滤算法,根据用户的历史行为和偏好,计算出与用户兴趣相似的职位,并进行推荐。

  5. 推荐结果展示模块:系统将推荐的职位结果展示给用户,用户可以查看职位详情并进行投递或收藏。

  6. 反馈与评价模块:用户可以对推荐结果进行反馈和评价,系统通过用户反馈的数据不断优化推荐算法。

通过该系统,企业可以减少招聘时间和成本,同时提高招聘效率和人才匹配度。用户也能够更快速地找到符合自己兴趣和能力的职位,提升就业机会和职业发展。

4、部分代码


#!/usr/bin/python3.9.10
# -*- coding: utf-8 -*-
# @Time    : 2023/2/18 9:41
# @File    : job_recommend.py
import os

os.environ["DJANGO_SETTINGS_MODULE"] = "JobRecommend.settings"
import django

django.setup()
from job import models
from math import sqrt, pow
import operator
from django.db.models import Subquery, Q, Count
import random


# 计算相似度
def similarity(job1_id, job2_id):
    job1_set = models.SendList.objects.filter(job=job1_id)
    # job1的投递用户数
    job1_sum = job1_set.count()
    # job2的打分用户数
    job2_sum = models.SendList.objects.filter(job=job2_id).count()
    # 两者的交集
    common = models.SendList.objects.filter(user__in=Subquery(job1_set.values('user')), job=job2_id).values('user').count()
    # 没有人投递当前职位
    if job1_sum == 0 or job2_sum == 0:
        return 0
    similar_value = common / sqrt(job1_sum * job2_sum)  # 余弦计算相似度
    return similar_value


# 基于物品的协同过滤推荐算法
def recommend_by_item_id(user_id, k=9):
    # 投递简历最多的前三keyword
    jobs_id = models.SendList.objects.filter(user_id=user_id).values('job_id')  # 先找出用户投过的简历
    print(jobs_id)
    key_word_list = []  # 找出用户投递的职位关键字
    for job in jobs_id:
        key_word_list.append(models.JobData.objects.get(job_id=job['job_id']).key_word)
    print(key_word_list)
    key_word_list_1 = list(set(key_word_list))
    user_prefer = []
    for key_word in key_word_list_1:
        user_prefer.append([key_word, key_word_list.count(key_word)])
    user_prefer = sorted(user_prefer, key=lambda x:x[1], reverse=True)  # 排序
    user_prefer = [x[0] for x in user_prefer[0:3]]  # 找出最多的3个投递简历的key_word
    print(user_prefer)
    current_user = models.UserList.objects.get(user_id=user_id)
    # 如果当前用户没有投递过简历,则看是否选择过意向职位,选过的话,就从意向中找,没选过就随机推荐
    if current_user.sendlist_set.count() == 0:
        if current_user.userexpect_set.count() != 0:
            user_expect = list(models.UserExpect.objects.filter(user=user_id).values("key_word", "place"))[0]
            # print(user_expect)
            job_list = list(models.JobData.objects.filter(name__icontains=user_expect['key_word'], place__icontains=user_expect['place']).values())  # 从用户设置的意向中选
            job_list = random.sample(job_list, 9)  # 随机9个推荐
            # print(job_list)
        else:
            job_list = list(models.JobData.objects.all().values())  # 从全部的职位中选
            # job_list = random.sample(job_list, 9)  # 随机9个推荐
        # print('from here')
        # print(job_list)
        return job_list
    # # most_tags = Tags.objects.annotate(tags_sum=Count('name')).order_by('-tags_sum').filter(movie__rate__user_id=user_id).order_by('-tags_sum')
    # 选用户投递简历最多的职位的标签,再随机选择30个没有投递过的简历的职位,计算距离最近
    un_send = list(models.JobData.objects.filter(~Q(sendlist__user=user_id), key_word__in=user_prefer).order_by('?').values())[:30]  # 没有投过的简历
    # un_send = random.sample(un_send, 30)
    # print(un_send)
    send = []  # 找出用户投递的职位关键字
    for job in jobs_id:
        send.append(models.JobData.objects.filter(job_id=job['job_id']).values()[0])
    # print(send)
    distances = []
    names = []
    # 在未投过的简历的职位中找到
    for un_send_job in un_send:
        for send_job in send:
            if un_send_job not in names:
                names.append(un_send_job)
                distances.append((similarity(un_send_job['job_id'], send_job['job_id']) * send_job['job_id'], un_send_job))  # 加入相似的职位列表
    distances.sort(key=lambda x: x[0], reverse=True)
    # print('this is distances', distances[:15])
    recommend_list = []
    for mark, job in distances:
        if len(recommend_list) >= k:
            break
        if job not in recommend_list:
            recommend_list.append(job)
    # print('this is recommend list', recommend_list)
    # 如果得不到有效数量的推荐 按照未投递的简历中的职位进行填充
    print('recommend list', recommend_list)
    return recommend_list


if __name__ == '__main__':
    # similarity(2003, 2008)
    recommend_by_item_id(1)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签