基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统

基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统、资讯推荐系统

一、简介

推荐系统的目的是信息过载所采用的措施,面对海量的数据,从中快速推荐出用户可能喜欢的物品。

推荐系统的方法有以下几种:

1、基于物品协同过滤,即利用物品与用户的特征信息,给用户推荐那些具有用户喜欢的特征的物品(基于用户行为数据,例如点击、浏览、收藏、购买、评论等);

2、基于用户协同过滤,即利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品(基于用户信息例如:个人信息,喜好标签,上下文信息);

3、基于机器学习协同过滤,即把用户注册时选择的类型分成不同的聚类,然后新用户注册时根据选择的类型归类,再把该类型的典型物品推荐给新用户。

简单概括:知你所想,物以类聚,人以群分。

二、Demo

1、图书管理系统

可参考网站,点我跳转
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第1张图片

2、电影推荐系统

可参考网站,点我跳转

基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第2张图片

3、课程推荐系统

可参考网站,点我跳转
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第3张图片

三、实现流程

1、搭建开发环境

这个环节包括创建虚拟环境、创建Django项目、创建数据库、设计表模型、爬取数据、UI界面功能。

2、创建虚拟环境

python解释器使用3.7,MySQL使用5.7,Django使用3版本以上,前端采用Django后端渲染,后台管理使用xadmin版本3。

常用命令:

python -m venv book_manager
django-admin startproject book_manager
python manage.py startapp book
python manage.py makemigrations
python manage.py migrate
python manage.py createcachetable
python manage.py collectstatic
python manage.py createsuperuser
python manage.py runserver

创建数据库使用图形化工具Navicat,字符集使用utf8mb4
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第4张图片

3、表(模型)设计

常用的表有:用户表、图书表、标签表、用户选择类型表、借阅表、购物车、评分表、收藏表、点赞表、评论表、评论点赞表、搜索关键字表。
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第5张图片

4、获取数据

获取数据可以通过爬虫实现,比如图书管理系统,先到网上找一个图书网站,分析每个页面的特征,然后编程把图书爬下来,

1)基础页面

2)获取各类别url

3)获取总页数

4)获取具体数据

5)保存图片、保存数据

代码示例:

import json
import time
import urllib.request, urllib.error  # 制定url,获取网页数据
from bs4 import BeautifulSoup  # 网页解析,获取数据
from fake_useragent import UserAgent  # 随机请求头


# URL的网页内容
def ask_url(url):  # 模拟浏览器头部信息,向服务器发送消息
    count = 0
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"
    }  # 用户代理:表示告诉目标服务器,我们是什么类型的机器;浏览器:本质上告诉服务器,我们能够接收什么水平的内容
    while count < 10:
        request = urllib.request.Request(url, headers=head)
        try:
            response = urllib.request.urlopen(request, timeout=20)  # 传递封装好的request对象,包含所访问的网址和头部信息
            html = response.read().decode("utf-8")
            return html
        except Exception as e:
            print('第{}次请求报错'.format(count), e)
            head = {"User-Agent": UserAgent().random}
            count += 1
    return


def save_img(url, name):
    # 保存图片
    filename = 'media/book_cover/{}.jpg'.format(name)
    count = 0
    head = {
        "Content-type": "application/x-www-form-urlencoded",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36",
    }
    while count < 10:
        try:
            request = urllib.request.Request(url, headers=head)
            response = urllib.request.urlopen(request, timeout=10)
            with open(filename, 'wb') as f:
                f.write(response.read())
            return True
        except Exception as e:
            print('第{}次爬取【{}】图片出错'.format(count, name), e)
            head = {"User-Agent": UserAgent().random}
            count += 1
    return False


def save_txt(data):
    # 保存为txt文件
    with open('book.txt', 'a') as f:
        f.write(json.dumps(data))
        f.write('\r\n')


def read_txt():
    # 读取txt文件
    data_list = []
    with open('book.txt', 'r') as f:
        for data in f.readlines():
            if data != '\n' and data not in data_list:
                data_list.append(json.loads(data))
    return data_list


def get_data(url):
    # 获取数据
    # print('url',url)
    html = ask_url(url)
    if not html:
        return
    soup = BeautifulSoup(html, "html.parser")
    d_dict = {}
    div = soup.find('div', id='book_info')
    if not div:
        return {}
    d_dict['标题'] = div.find('h2').text
    content = div.find('div', class_='intro')
    text = ''
    ps = content.find_all('p')
    for p in ps:
        text += '

' text += p.text text += '

'
d_dict['内容'] = text.replace('\xa0', '') # 获取作者、翻译、标签 infos = div.find_all('h4') author = '' for info in infos: key = info.text.split(':')[0] values = [] for a in info.find_all('a'): if key == '标签' and a.text == author: continue values.append(a.text) if key == '作者' and values: author = values[0] d_dict[key] = values time.sleep(0.5) return d_dict def get_pages(url): # 获取总页数 html = ask_url(url) if not html: return soup = BeautifulSoup(html, "html.parser") # 获取总页数 for a in soup.find_all('a', class_='other'): if a.text == '尾页': pages = int(a.attrs['href'].split('page=')[1]) print('总页数', pages) return pages return 1 def get_page_urls(url): # 获取每一页中各图书的url html = ask_url(url) if not html: return soup = BeautifulSoup(html, "html.parser") urls = [] ul = soup.find('ul', id='list_box').find_all('li') if not ul: return [] for li in ul: url = li.find('a', class_='Aimg').attrs['href'] img = 'http:{}'.format(li.find('img').attrs['src']) code = url.split('book')[1].replace('/', '').replace('index.htm', '') save_img(img, code) # 保存图片 urls.append([url, code]) time.sleep(0.4) return urls def get_type_urls(url): # 获取各类别url html = ask_url(url) # 获取页面 if not html: return soup = BeautifulSoup(html, "html.parser") ul = soup.find('ul', class_='type_box').find_all('li') # 查找类元素为type_box的ul标签 urls = {} for li in ul: # 通过正则匹配获取所有li标签中的href值 urls[li.text.replace('\n', '').replace('\t', '')] = li.a.attrs['href'] time.sleep(0.5) return urls def get_all_data(baseurl): # 获取页面图书url d_list = [] # 获取各类别的url urls = get_type_urls(baseurl) if not urls: return time.sleep(1) count = 1 for name, url in urls.items(): print('爬取 {} 的数据'.format(name)) time.sleep(0.5) pages = get_pages(url) + 1 if not pages: continue for page in range(1, pages): time.sleep(0.5) page_url = '{}&page={}'.format(url, page) book_urls = get_page_urls(page_url) # 获取类别下的图书url if not book_urls: continue for pu in book_urls: time.sleep(0.2) d_dict = get_data(pu[0]) if not d_dict: continue d_dict['code'] = pu[1] save_txt(d_dict) # 保存数据 print('第{}本'.format(count), d_dict) count += 1 d_list.append(d_dict) time.sleep(0.5) return d_list def main(baseurl): ''' :param baseurl: :return: ''' get_all_data(baseurl) if __name__ == '__main__': # 爬取的页面地址 baseurl = '基础页面' main(baseurl)
5、UI界面功能

登录:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第6张图片

人脸识别登录:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第7张图片

注册:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第8张图片

首页、新书速递、热门书籍、图书分类、猜你喜欢:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第9张图片

购物车:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第10张图片

个人中心:

基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第11张图片

数据分析:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第12张图片

协同算法图像对比:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第13张图片

6、后台管理

使用xadmin库对数据进行后台管理,界面如下:
基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统_第14张图片

四、后记

总体上,一个推荐系统就开发出来了,整个开发过程中收获还是很多的,使用到的知识点也是很多,对django、爬虫、图表、推荐算法都能够熟练掌握。

你可能感兴趣的:(pytohn实战项目(附源码),django,python,后端)