赞
踩
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌
毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总
技术栈:
Django框架、requests爬虫、基于用户协同过滤推荐算法、MySQL数据库、多种推荐算法
旅游数据爬取推荐系统是一个基于用户协同过滤推荐算法的系统,使用Django框架进行开发,通过requests库进行数据爬取,数据存储在MySQL数据库中。
系统的主要功能是根据用户的兴趣和偏好,推荐他们可能感兴趣的旅游目的地或景点。该系统可以根据用户的历史行为和其他用户的行为,计算出用户之间的相似度,并根据相似度给出推荐结果。
(1)旅游景点列表
(2)旅游景点详情页信息
(3)旅游推荐系统首页
(4)旅游景点推荐和评论功能
(5)旅游景点收藏和评分功能
(6)后台数据管理
(7)数据爬取
旅游数据爬取推荐系统是一个基于用户协同过滤推荐算法的系统,使用Django框架进行开发,通过requests库进行数据爬取,数据存储在MySQL数据库中。
系统的主要功能是根据用户的兴趣和偏好,推荐他们可能感兴趣的旅游目的地或景点。该系统可以根据用户的历史行为和其他用户的行为,计算出用户之间的相似度,并根据相似度给出推荐结果。
推荐算法采用了多种方法,包括基于用户协同过滤、基于物品协同过滤、基于内容的推荐等。这些算法可以根据不同的情况和需求进行调整和组合,以提供更准确和个性化的推荐结果。
用户可以通过系统的界面进行注册和登录,系统会记录用户的行为数据并进行分析。用户可以浏览推荐的旅游目的地或景点,并对它们进行评分和评论,系统会根据这些反馈不断优化推荐结果。
在数据爬取方面,系统使用requests库发送HTTP请求,获取目标网站的数据。通过解析网页的HTML结构,提取出需要的信息,并存储在MySQL数据库中。可以定期更新数据,保持系统的推荐结果的新鲜性和准确性。
总之,旅游数据爬取推荐系统利用Django框架、requests爬虫、基于用户协同过滤推荐算法、MySQL数据库等技术,实现了一个能够根据用户兴趣和偏好推荐旅游目的地或景点的系统。
# coding:utf-8 from django.views.decorators.csrf import csrf_exempt from django.shortcuts import render, redirect, HttpResponse from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from django.db.models import Q from .algorithm import addr, ItemCF, UserCF from tour.recomand import UserCf from .models import * import random import json @login_required(login_url='/login') def init(request): # 推荐处理,根据游客的评分进行推荐 recProducts = [] datas = {} for user in User.objects.all(): score = Score.objects.filter(user_id=user.id) dict = {} for sco in score: dict[sco.view_id] = sco.rate datas[user.username] = dict print("datas是",datas) userCf = UserCf(data=datas) recommandList = userCf.recomand(request.user.username, 10) # 推荐10条 推荐列表 request.session.get('username') print("最终推荐:",recommandList) gue=View.objects.none() for r in recommandList: tables = View.objects.none() s_tables = tables.none() print(r) pro =View.objects.get(id=r[0]) #s_tables += tables.filter(id=r[0]) #gue=gue + View.objects.filter(id=r[0]) recProducts.append({'id': pro.id, 'name': pro.view_name}) print('pro ',pro ) #print('s_tables ', s_tables) print(recProducts) if request.method == 'GET': # 热门推荐 按评分排序 hot = View.objects.order_by('view_rate')[::-1] # 随机推荐某一地区景点 #rand = View.objects.order_by('?')[:10] #rand = View.objects.filter(city=u'北京').order_by('view_rate')[::-1] rand = View.objects.all() # 猜你喜欢 guess = recProducts data = { 'hot': hot, 'rand': rand, 'guess': guess } print('随机猜测rand:', rand) print('guess:' ,guess) return render(request, 'index.html', data) @csrf_exempt @login_required(login_url='/login') def detail(request): if request.method == 'GET': view_id = request.GET.get('id', False) view = View.objects.filter(id=view_id).first() # 类似推荐 sim = View.objects.filter(city=view.city) # 该景点的评论 comments = Comment.objects.filter(view=view).order_by('comment_date')[::-1] # 评分统计 score = Score.objects.filter(view=view) pn = len(score) rate = round(sum(int(s.rate) for s in score) * 1.0 / pn, 1) if pn else 0.0#一位数平均 collection = Collection.objects.filter(view=view, user=request.user) data = { 'view': view, 'sim': sim, 'pn': pn, 'comments': comments, 'rate': rate, 'collection': collection } print('view:' ,view) print('sim:', sim) print('comments:', comments) print('rate:', rate) print('collection:', collection) return render(request, 'detail.html', data) elif request.method == 'POST': comment = request.POST.get('text', False) view_id = request.POST.get('id', False) score = request.POST.get('score', False) collection = request.POST.get('collection', False) view = View.objects.get(id=view_id) msg = { 'msg': '发生未知错误', 'type': 'danger' } if comment: Comment.objects.create(user=request.user, view=view, comment=comment) msg['msg'] = '评论提交成功,页面即将刷新!' msg['type'] = 'success' return HttpResponse(json.dumps(msg), content_type='application/json') if score: score = int(score) s = Score.objects.filter(user=request.user, view=view) if s: s[0].rate = score s[0].save() else: Score.objects.create(user=request.user, view=view, rate=score) msg['msg'] = '感谢您的评分!' msg['type'] = 'success' return HttpResponse(json.dumps(msg), content_type='application/json') if collection: if collection == 'collection-true': Collection.objects.create(user=request.user, view=view) msg['msg'] = '收藏成功!' elif collection == 'collection-false': Collection.objects.filter(user=request.user, view=view).delete() msg['msg'] = '已取消收藏!' msg['type'] = 'success' return HttpResponse(json.dumps(msg), content_type='application/json') return HttpResponse(json.dumps(msg), content_type='application/json') @csrf_exempt def sign_in(request): if request.method == 'POST': username = request.POST.get('username', False) pw = request.POST.get('pw', False) user = authenticate(username=username, password=pw) if user: login(request, user) return redirect('/') if request.method == 'GET': username = request.GET.get('username', False) pw = request.GET.get('pw', False) if not username or not pw: return render(request, 'login.html') user = authenticate(username=username, password=pw) msg = { 'msg': '登录成功,页面正在跳转!', 'type': 'success' } if not user: msg['msg'] = '账号或密码错误,请检查后重新登录!' msg['type'] = 'danger' return HttpResponse(json.dumps(msg), content_type='application/json') @csrf_exempt def register(request): if request.method == 'POST': username = request.POST.get('username', False) pw = request.POST.get('pw', False) email = request.POST.get('email', False) # 生成随机编号 number = random.randint(1000000, 9999999) if not ExtUser.objects.filter(number=number): user = User.objects.create_user(username=username, password=pw, email=email) ExtUser.objects.create(user=user, number=number) user = authenticate(username=username, password=pw) login(request, user) return redirect('/') elif request.method == 'GET': username = request.GET.get('username', False) pw = request.GET.get('pw', False) rpw = request.GET.get('rpw', False) if not username or not pw: return render(request, 'register.html') msg = { 'msg': '账号注册成功!', 'type': 'success' } if not pw.isalnum(): msg['msg'] = '密码只能由数字字母组成!' msg['type'] = 'danger' if pw != rpw: msg['msg'] = '两次输入的密码不一致!' msg['type'] = 'danger' if len(pw) < 6: msg['msg'] = '密码至少需要6个字符!' msg['type'] = 'danger' if User.objects.filter(username=username): msg['msg'] = '用户名已经存在!' msg['type'] = 'danger' return HttpResponse(json.dumps(msg), content_type='application/json') def sign_out(request): logout(request) return redirect('/') def search(request): if request.method == 'GET': word = request.GET.get('word', False) views = View.objects.filter(Q(province__contains=word) | Q(view_name__contains=word) | Q(city__contains=word)) for v in views: score = Score.objects.filter(view=v) v.view_rate = sum(s.rate for s in score)*1.0/len(score) if score else 0 return render(request, 'search.html', {'views': views}) @login_required(login_url='/login') def collection(request): views = Collection.objects.filter(user=request.user) return render(request, 'collection.html', {'views': views}) @login_required(login_url='/login') @csrf_exempt def info(request): if request.method == 'GET': return render(request, 'info.html') elif request.method == 'POST': username = request.POST.get('username', False) password = request.POST.get('password', False) sex = request.POST.get('sex', False) age = request.POST.get('age', False) address = request.POST.get('address', False) user = request.user user.username = username if password: user.set_password(password) user.extuser.sex = sex user.extuser.age = age user.extuser.address = address user.extuser.save() user.save() return redirect('/login')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。