赞
踩
基于Spark的高考报名信息推荐系统
系统用到的各项技术和工具的介绍:
1. Python
Python是一种高级的、解释型的程序设计语言,因为其简洁而易学、可读性强等特点,在数据处理、人工智能、机器学习、Web开发等领域得到了广泛运用。在该系统中,Python被用于编写后端服务器程序和数据处理脚本等。
2. PySpark
PySpark是Apache Spark的Python版本,是一个基于内存计算的大数据处理框架,具有高效和易用的特点。在该系统中,PySpark被用于进行数据处理和分析。
3. Hadoop
Hadoop是一个分布式文件系统和计算框架,能够处理大规模数据的存储和处理。在该系统中,Hadoop被用于存储和管理海量数据。
4. Django
Django是一款基于Python的Web应用程序开发框架,具有高度的可重用性、可扩展性和灵活性,被广泛地应用于Web开发领域。在该系统中,Django被用于编写后端API接口和管理界面。
5. Scrapy
Scrapy是一个Python编写的高效的网络爬虫框架,支持数据抓取和处理、自动化测试等功能。在该系统中,Scrapy被用于数据抓取模块的实现。
6. Vue
Vue是一个渐进式JavaScript框架,由Evan You在2014年创建。Vue具有简洁易学、组件化等特点,使用它可以快速地构建前端界面。在该系统中,Vue框架被用于实现前端页面渲染和数据展示。
7. Element-Plus
Element-Plus是一个Vue UI库,提供大量的UI组件和开发工具,可以帮助我们快速构建美观、易用的Web应用程序。在该系统中,Element-Plus被用于实现前端UI组件。
8. 协同过滤算法
协同过滤算法是一种通过挖掘用户历史行为数据来预测用户偏好并进行个性化推荐的算法。在该系统中,我们使用基于物品的协同过滤算法来实现高校和专业的推荐功能。
系统中各个模块的具体实现:
1. 数据抓取模块
该模块使用了Scrapy爬虫框架,通过访问“阳光高考”网站来抓取大学和专业相关数据。在抓取大学数据时,我们将获取学校名称、学校logo、简介、满意度、院系设置、录取规则、食宿条件、设立专业等字段;在抓取大学专业数据时,我们将获取学历层次、专业代码、所属门类、专业类别、介绍、相近专业、从业方向、统计了毕业生规模以及男女比例等信息。
2. 用户注册登录模块
该模块使用Django框架实现用户的注册和登录功能。在注册时,我们要求用户提供用户名、密码等必要信息,同时对用户输入进行合法性校验;在登录时,用户需要输入正确的用户名和密码才能成功登录系统。
3. 后台管理模块
该模块是系统管理员可以对系统中的数据进行管理操作的接口,包括大学和专业数据的增删改查。我们使用Django Admin框架实现后台管理功能。管理员登陆后,进入后台管理界面,就可以对系统中的数据进行增删改查的操作。
4. 高校信息查询模块
该模块是实现用户在高校名称关键词、高校所在地、学历层次等信息筛选出符合条件的国内高校的功能,该页面以卡片形式展示了高校信息。我们使用Vue+Element-Plus框架来实现前端页面渲染、数据展示和分页组件,使用Django框架来实现后端API接口。我们将20条数据为一页,以此来降低后端压力。
5. 专业信息查询模块
该模块是用户可以根据专业分类以及关键词等信息筛选出符合条件的大学专业数据的功能,该页面以表格形式展示了专业信息。我们同样使用Vue+Element-Plus框架来实现前端页面渲染、数据展示和分页组件,使用Django框架来实现后端API接口。
6. 个性化推荐高校和专业模块
该模块是根据用户在高考志愿填报模块所填写的预测成绩、喜欢的专业、喜欢的学校以及想去的省份所在地等信息,从数据库中查找出符合用户条件的高校以及专业数据,再个性化地推荐给用户的功能。我们使用基于物品的协同过滤算法实现系统的推荐功能,并使用Django框架实现后端API接口。
7. 高校详情模块
该模块是当用户查看某高校详情时,可以看到该高校的多种信息,比如院校简介、学校领导、周边环境、通讯地址、院校设置、重点实验室、重点学科、师资力量、录取条件、食宿条件等,还可以查看该学校设立的所有专业数据。该模块同样使用Vue+Element-Plus框架实现前端页面渲染、数据展示,使用Django框架实现后端API接口,并使用基于物品的协同过滤算法给用户推荐相似的高校数据。
8. 专业详情模块
该模块是当用户查看某专业的详情时,可以看到该专业的多种信息,比如学历层次、专业代码、所属门类,专业分类、专业介绍、统计信息包括该专业的毕业生规模和男女比例、相似专业、毕业后的从业方向。该模块同样使用Vue+Element-Plus框架实现前端页面渲染、数据展示,使用Django框架实现后端API接口,并使用基于物品的协同过滤算法给用户推荐相似的专业数据。
技术及功能关键词:
python pyspark hadoop django scrapy vue element-plus 协同过滤算法
通过scrapy爬虫框架抓取“阳光高考”网站上的大学数据(包括了学校名称、学校logo、简介、满意度、院系设置、录取规则、食宿条件、设立专业等字段)以及大学的专业(包括了学历层次、专业代码、所属门类、专业类别、介绍、相近专业、从业方向、统计了毕业生规模以及男女比例等信息)数据
前台用户通过登陆注册后进入系统
管理员可在后台管理所有抓取到的大学及大学专业数据,以及用户填写的高考志愿意向数据
高校信息查询模块,用户可以根据高校名称关键词、高校所在地、学历层次等信息筛选出符合条件的国内高校,该页面以卡片形式展示了高校信息,其中包括了高校名称、高校LOGO、所在地、学历层次、主管部门以及高校评分等数据,分页组件以20条数据为一页,可大大降低后端压力
专业信息查询模块,用户可以根据专业分类以及关键词等信息筛选出符合条件的大学专业数据,该页面以表格形式展示了专业信息,其中包括专业名称、专业所属门类、专业所属类以及专业满意度等信息
个性化推荐高校和专业模块,这是根据用户在高考志愿填报模块所填写的预测成绩、喜欢的专业、喜欢的学校以及想去的省份所在地等信息,在数据库中查找出符合用户条件的高校以及专业数据,再个性化地推荐给用户;需要注意的是,当用户第一次访问该模块时,系统会检测用户是否已填写志愿,如果没有,必须填写后才能够推荐
当用户查看某高校详情时,可以看到该高校的多种信息,比如院校简介、学校领导、周边环境、通讯地址、院校设置、重点实验室、重点学科、师资力量、录取条件、食宿条件等,还可以查看该学校设立的所有专业数据,同时系统会依据基于物品的协同过滤算法给用户推荐相似的高校数据
当用户查看某专业的详情时,可以看到该专业的多种信息,比如学历层次、专业代码、所属门类,专业分类、专业介绍、统计信息包括该专业的毕业生规模和男女比例、相似专业、毕业后的从业方向。也可以看到该专业有哪些高校设立,同时系统会依据基于物品的协同过滤算法给用户推荐相似的专业数据
目录结构(只关注标注了中文的):
├── app 高校或专业数据后端最重要的模块!!!
│ ├── __init__.py
│ ├── admin.py 后台显示数据的配置
│ ├── apps.py 协同过滤算法代码!!!
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py 高校或专业相关的数据库模型
│ ├── tests.py
│ ├── urls.py
│ └── views.py 高校或专业相关所有重要的后端代码!!!!!
├── auth 用户登陆注册模块
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py 登陆注册的代码!
├── college_recommend_system
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py 后端配置文件
│ ├── urls.py 路由配置文件
│ └── wsgi.py
├── db.sqlite3
├── dist
│ ├── assets
│ │ ├── detail.13d47c10.js
│ │ ├── detail.1fa341c4.css
│ │ ├── detail.337af02b.css
│ │ ├── detail.54f10f8e.js
│ │ ├── detail.742aa084.js
│ │ ├── detail.7889713c.js
│ │ ├── detail.7ef48dc3.js
│ │ ├── detail.ee7f2c45.js
│ │ ├── detail.f7625290.js
│ │ ├── detail.fb8a31e4.js
│ │ ├── index.13fd7688.js
│ │ ├── index.162580f2.js
│ │ ├── index.1691dcfa.js
│ │ ├── index.2550ca4f.css
│ │ ├── index.284f6351.css
│ │ ├── index.298ea03e.css
│ │ ├── index.37b9f46a.js
│ │ ├── index.3909a248.js
│ │ ├── index.3c36e44f.js
│ │ ├── index.3dba9fc9.css
│ │ ├── index.40b7da8f.css
│ │ ├── index.5aab477e.js
│ │ ├── index.6cca87c9.js
│ │ ├── index.7538b07b.js
│ │ ├── index.803ad225.js
│ │ ├── index.8c5a47f0.js
│ │ ├── index.8fdc67f4.js
│ │ ├── index.9164ad62.js
│ │ ├── index.94b35005.js
│ │ ├── index.a3c8cee7.js
│ │ ├── index.a80fb208.css
│ │ ├── index.aa7d4a1b.js
│ │ ├── index.c9868bac.js
│ │ ├── index.e360ba0e.js
│ │ ├── index.e675f45b.css
│ │ ├── index.f173cc06.js
│ │ ├── login.25adad7b.js
│ │ ├── login.3faad2ee.js
│ │ ├── login.73bcb05c.js
│ │ ├── login.9fa974fc.js
│ │ ├── login.f552d11e.css
│ │ ├── register.00476390.js
│ │ ├── register.0bec7e5f.js
│ │ ├── register.43303d71.js
│ │ ├── register.73548925.css
│ │ └── register.75406bd0.js
│ └── index.html
├── fake.py
├── frontend
│ ├── README.md
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── src
│ │ ├── App.vue
│ │ ├── assets
│ │ ├── components
│ │ ├── directives
│ │ ├── layout_h
│ │ ├── layout_v
│ │ ├── main.js
│ │ ├── mixins
│ │ ├── router
│ │ ├── stores
│ │ ├── utils
│ │ └── views 前端源代码,前台所有页面的代码都在这!!!
│ └── vite.config.js
├── index
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ ├── utils.py
│ └── views.py
├── manage.py
├── middlewares
│ └── __init__.py
├── requirements.txt
├── scrapy.cfg
├── spider
│ ├── __init__.py
│ ├── extendsion
│ │ ├── __init__.py
│ │ └── selenium
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py 将数据入库的代码
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ ├── college.py 高校爬虫
│ ├── major.py 专业爬虫
│ ├── rel.py 将高校与专业关联起来的爬虫
│ └── test.py
└── 项目介绍.txt
核心算法代码分享如下:
- import scrapy
- import django
- import os
- import json
-
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "college_recommend_system.settings")
- django.setup()
-
-
- class GaokaoSpider(scrapy.Spider):
- name = "college"
- allowed_domains = []
- start_urls = []
-
-
-
- url = "XXXX
- max_page = 139
- step = 20
- def start_requests(self):
- for i in range(self.max_page):
- yield scrapy.Request(self.url.format(i * self.step))
- def parse(self, response):
- from app.models import College
- for i in response.css(".sch-item"):
- item = dict()
- item["url"] = response.urljoin(
- i.css(".sch-title a::attr(href)").extract_first()
- ).replace("schoolInfo", "schoolInfoMain")
- # 院校logo
- item["logo"] = i.css("img::attr(src)").extract_first()
- # 院校主页
- # 院校名
- item["name"] = i.css(".sch-title a::text").extract_first().strip()
- if College.objects.filter(name=item["name"]).exists():
- continue
- # 所在地,主管部门
- item["location"], item["department"] = [
- j.strip()
- for j in i.xpath('.//*[@class="info-box"]/a[1]/text()').extract()[1:]
- ]
- # 学历层次
- item["type"] = (
- i.xpath('.//*[@class="info-box"]/a[2]/text()').extract_first().strip()
- )
- # 满意度
- item["rate"] = float(i.css(".num::text").extract_first().strip())
- yield scrapy.Request(
- item["url"], callback=self.parse_page, meta=dict(item=item)
- )
- def parse_page(self, response):
- url = response.urljoin(
- response.xpath('//a[text()="学校简介"]/@href').extract_first()
- )
- yield scrapy.Request(url, callback=self.parse_info, meta=response.meta)
- def parse_info(self, response):
- # 学校简介
- # 院系设置
- # 录取规则
- # 食宿条件
- response.meta["item"]["info"] = response.css(".container").extract_first()
- url = response.urljoin(
- response.xpath('//a[text()="院系设置"]/@href').extract_first()
- )
- yield scrapy.Request(url, callback=self.parse_yuanxi, meta=response.meta)
- def parse_yuanxi(self, response):
- response.meta["item"]["yuanxi"] = response.css(".container").extract_first()
- url = response.urljoin(
- response.xpath('//a[text()="录取规则"]/@href').extract_first()
- )
- yield scrapy.Request(url, callback=self.parse_rule, meta=response.meta)
- def parse_rule(self, response):
- response.meta["item"]["rule"] = response.css(".container").extract_first()
- url = response.urljoin(
- response.xpath('//a[text()="食宿条件"]/@href').extract_first()
- )
- yield scrapy.Request(url, callback=self.parse_situation, meta=response.meta)
- def parse_situation(self, response):
- response.meta["item"]["situation"] = response.css(".container").extract_first()
- yield response.meta["item"]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。