目录
影视爬虫与检索系统 设计文档 1
一、 功能介绍展示 1
二、 性能统计信息 8
1、爬虫数据量统计 8
2、查询时间统计 8
三、 各个功能涉及的技术和实现方式 9
1、爬虫 9
2、django 10
3、html 10
4、css 10

一、功能介绍展示
1、影视列表页
为系统主页,通过分页方式列出系统中的所有影视,并显示影视的总数量(1002部)。列表页中的每个条目展示电影名称和海报,点击列表页中的条目可以跳转到对应的影视信息页。页面底部有脚注。顶层有导航栏可跳转搜索等页面。

2、演员列表页
通过分页方式列出系统中的所有演员,并显示演员的总数量(4092位)。列表页中的每个条目展示演员名字和照片,点击列表页中的条目可以跳转到对应的演员信息页。页面底部有脚注,顶层有导航栏。

3、影视信息页
展示电影名称、海报、简介、导演、编剧、类型和五条短评。
展示参演演员列表,以条目形式展示,显示演员姓名和照片,点击姓名或照片可跳转至演员信息页。页面底部有脚注,顶层有导航栏。

4、演员信息页
显示演员姓名、简介、照片、性别等信息。列出该演员参演影视,以条目形式展示,显示影视名称和图片,点击名称或图片可跳转至影视信息页。列出该演员合作演员次数最多的十位,以条目形式展示,显示演员名、图片和合作作品数量,点击演员姓名或图片可跳转至其信息页。页面顶层有导航栏。

4、搜索
搜索是一个单独的页面。搜索栏搜索功能包括一个搜索栏、一个单选组(影视、演员、影评),回车即可搜索。输入一个关键词或一段文本(20字以内),根据单选组选项,搜索系统中存在的影视、演员和影评,本文转载自http://www.biyezuopin.vip/onews.asp?id=14774搜索后跳转到搜索结果页。页面底部有脚注,顶层有导航栏。
5、搜索结果页
搜索结果页包含所有的搜索结果列表,以分页形式展示。搜索结果页中的每个条目设计为超链接格式,点击可跳转到相应信息页。点击影评的搜索结果跳转到该影评所在的影视信息页。页面底部有脚注,顶层有导航栏。
搜索结果页最上方显示搜索条目数量和搜索花费的时间。

from django.shortcuts import render, Http404, redirect
from .models import Actor, Movie
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage
from django.http import HttpResponsefrom datetime import datetime
# Create your views here.def show_movie(request):movie = Movie.objects.all()movie_list = []for m in movie:movie_list.append(m)l=len(movie_list)paginator = Paginator(movie_list, 20)if request.method == "GET":# 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1page = request.GET.get('page')try:movie_list = paginator.page(page)# todo: 注意捕获异常except PageNotAnInteger:# 如果请求的页数不是整数, 返回第一页。movie_list = paginator.page(1)except InvalidPage:# 如果请求的页数不存在, 重定向页面return HttpResponse('找不到页面的内容')except EmptyPage:# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。movie_list = paginator.page(paginator.num_pages)template_view = 'movie_page.html'return render(request, template_view, {'movie': movie_list,'len':l})def show_actor(request):actor = Actor.objects.all()actor_list = []for a in actor:actor_list.append(a)l=len(actor_list)paginator = Paginator(actor_list, 20)if request.method == "GET":# 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1page = request.GET.get('page')try:actor_list = paginator.page(page)# todo: 注意捕获异常except PageNotAnInteger:# 如果请求的页数不是整数, 返回第一页。actor_list = paginator.page(1)except InvalidPage:# 如果请求的页数不存在, 重定向页面return HttpResponse('找不到页面的内容')except EmptyPage:# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。actor_list = paginator.page(paginator.num_pages)template_view = 'actor_page.html'return render(request, template_view, {'actor': actor_list,'len':l})def show_movie_page(request, movie_id):movies=Movie.objects.all()movie_list = []for m in movies:movie_list.append(m)movie=movie_list[movie_id-1]actors=movie.actors.all()return render(request, 'movie.html', {'movie': movie, 'actors': actors})def show_actor_page(request, actor_id):actor=Actor.objects.get(id=actor_id)movies=actor.movie_set.all()co_actors={}for m in movies:actors=m.actors.all()for a in actors:if a!=actor:if a in co_actors:co_actors[a]=co_actors[a]+1else:co_actors[a]=1co_actors = sorted(co_actors.items(), key=lambda x: x[1], reverse=True)co_actors=co_actors[:10]return render(request, 'actor.html', {'actor': actor, 'movies': movies,'co_actors':co_actors})def search_target(request):start = datetime.now()if request.method != 'GET':raise Http404()key_word = request.GET.get('keyword')if not key_word:return render(request, 'search.html')choice=request.GET.get('choice')if choice=="movie":return search_movie(request,key_word,start)if choice=="actor":return search_actor(request, key_word, start)if choice=="comment":return search_comment(request, key_word, start)def search(request,choice,keyword):start = datetime.now()if choice=="movie":return search_movie(request,keyword,start)if choice=="actor":return search_actor(request, keyword, start)if choice=="comment":return search_comment(request, keyword, start)return render(request, 'search.html')def search_movie(request,key_word,start):movie_list=[]movies=Movie.objects.all()for m in movies:if m.title.find(key_word)!=-1:movie_list.append(m)continuefor a in m.actors.all():if a.name.find(key_word)!=-1:movie_list.append(m)breakl=len(movie_list)paginator = Paginator(movie_list, 10)if request.method == "GET":# 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1page = request.GET.get('page')try:movie_list = paginator.page(page)# todo: 注意捕获异常except PageNotAnInteger:# 如果请求的页数不是整数, 返回第一页。movie_list = paginator.page(1)except InvalidPage:# 如果请求的页数不存在, 重定向页面return HttpResponse('找不到页面的内容')except EmptyPage:# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。movie_list = paginator.page(paginator.num_pages)str="choice=movie&keyword="+key_wordparams = {'movie': movie_list,'cost': (datetime.now() - start).total_seconds(),'total':l,'other_string':str,'keyword':key_word,'choice':"movie"}return render(request, 'search_movie.html', params)def search_actor(request,key_word,start):actor_list=[]movies=Movie.objects.all()for m in movies:if m.title.find(key_word) != -1:for a in m.actors.all():actor_list.append(a)continuefor a in m.actors.all():if a.name.find(key_word) != -1:actor_list.append(a)breakactor_list=set(actor_list)actor_list=list(actor_list)l=len(actor_list)paginator = Paginator(actor_list, 10)if request.method == "GET":# 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1page = request.GET.get('page')try:actor_list = paginator.page(page)# todo: 注意捕获异常except PageNotAnInteger:# 如果请求的页数不是整数, 返回第一页。actor_list = paginator.page(1)except InvalidPage:# 如果请求的页数不存在, 重定向页面return HttpResponse('找不到页面的内容')except EmptyPage:# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。actor_list = paginator.page(paginator.num_pages)str="choice=actor&keyword="+key_wordparams = {'actor': actor_list,'cost': (datetime.now() - start).total_seconds(),'total':l,'other_string':str,'keyword':key_word,'choice':"actor",}return render(request, 'search_actor.html', params)def search_comment(request,key_word,start):comment_list=[]movies=Movie.objects.all()for m in movies:if m.comment1.find(key_word)!=-1:t=(m,m.comment1)comment_list.append(t)continueif m.comment2.find(key_word)!=-1:t = (m, m.comment2)comment_list.append(t)continueif m.comment3.find(key_word)!=-1:t = (m, m.comment3)comment_list.append(t)continueif m.comment4.find(key_word)!=-1:t = (m, m.comment4)comment_list.append(t)continueif m.comment5.find(key_word)!=-1:t = (m, m.comment5)comment_list.append(t)continuel=len(comment_list)paginator = Paginator(comment_list, 10)if request.method == "GET":# 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1page = request.GET.get('page')try:comment_list = paginator.page(page)# todo: 注意捕获异常except PageNotAnInteger:# 如果请求的页数不是整数, 返回第一页。comment_list = paginator.page(1)except InvalidPage:# 如果请求的页数不存在, 重定向页面return HttpResponse('找不到页面的内容')except EmptyPage:# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。comment_list = paginator.page(paginator.num_pages)str="choice=comment&keyword="+key_wordparams = {'cost': (datetime.now() - start).total_seconds(),'total':l,'other_string':str,'comment':comment_list,'keyword':key_word,'choice':"comment"}return render(request, 'search_comment.html', params)















基于Python-django-spider的影视演员影评爬虫与检索系统相关推荐

  1. 基于Python+Django的Kubernetes集群管理平台

    时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调度管理等方面都有其难以言喻的优 ...

  2. 基于Python + Django + mysql的协同推荐算法的电影推荐系统

    基于Python + Django + mysql的协同推荐算法的电影推荐系统 本系统一共分为前台系统功能和后台系统功能两个模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连 ...

  3. 【基于python+Django的物品协同过滤音乐推荐系统-哔哩哔哩】 https://b23.tv/V2zN54R

    [基于python+Django的物品协同过滤音乐推荐系统-哔哩哔哩] https://b23.tv/V2zN54R https://b23.tv/V2zN54R

  4. 【基于python+Django的博客系统-哔哩哔哩】 https://b23.tv/bmRfAMu

    [基于python+Django的博客系统-哔哩哔哩] https://b23.tv/bmRfAMu https://b23.tv/bmRfAMu

  5. 基于Python+django的 医院排队叫号系统-计算机毕业设计

    项目介绍 随着时代发展,越来越多的人需要到医院进行挂号检查等操作,如果全部都到医院现场挂号,一方面的浪费大量的时间和精力,另一方面是浪费大量的医疗资源,为了能够让患者更加方便的进行挂号,我们通过pyt ...

  6. 基于Python+django的 天天生鲜超市网上购物商城-计算机毕业设计

    项目介绍 根据毕业设计的需求,设计一个界面友好的网上生鲜超市系统,用户能够直观的浏览及查询到想要的信息,了解消费者的习惯,实现系统的基本功能,用户操作起来更方便.为了让管理者了解自己的权限,方便直观的 ...

  7. 基于Python+django的网购平台购物商城-计算机毕业设计

    项目介绍 当下人们已经进去了网络时代,很多时候人们在买一些日用品的时候已经不再是传统的到超市进行购买和挑选的方式了,更多的人年人通过网络选购所需的商品,然后有物流配送到家,这是当前网络时代给人们很大的 ...

  8. 基于Python+django的 古诗词在线学习网站-计算机毕业设计

    项目介绍 基于Python+django的 古诗词在线学习网站则旨在通过标签分类管理等方式,实现管理员:首页.个人中心.用户管理.诗词管理.主题管理.情感色彩管理.风格管理.我的收藏管理.诗词论坛.系 ...

  9. 基于Python+django的茶叶销售商城网站-计算机毕业设计

    项目介绍 ​茶叶在我国历史悠久,这很多时候,人们在谈论事情的时候,都喜欢泡上一杯清茶这样不仅可以提神醒脑而且可以提升自己的品味.当前我国也有很多的爱茶人士.他们经常会购买自己所喜欢的茶叶在闲暇之时进行 ...

最新文章

  1. 一次完整的HTTP事务是怎样一个过程
  2. CodeForces 658C Bear and Forgotten Tree 3(构造)
  3. bootstrap学习(四)表格
  4. oracle 怎么 制造崩溃,oracle数据库崩溃
  5. 从 Netflix 到 Spring Cloud Alibaba 差距不知一点点
  6. 信息学奥赛一本通(1095:数1的个数)
  7. CSS选择器优先级 12.28
  8. matlab 提取图像轮廓(图像边缘提取)
  9. bootstrap树节点如何设置默认不展开_我开源了一个基于Vue的组织架构树组件
  10. 前端页面怎么办啊一条长的信息换行展示_前端入门!不容错过!HTML基本标签知识大盘点...
  11. Java项目的项目流程(快速了解)
  12. 【阅读文献】单目视觉SLAM方法综述【1】~单目视觉SLAM分类方法
  13. 阿里物联网平台的使用
  14. 恭贺新春-杨建荣敬祝
  15. 洛谷 P2440 木材加工 (二分答案)
  16. “裕同集团易普优APS项目启动大会”顺利召开
  17. 显示前半内容后半内容用省略号_德语 OCR
  18. 大数据学习——HDFS退役旧数据节点
  19. 微信小程序蓝牙BLE开发实战——案例(二)
  20. Android相机应用

热门文章

  1. 迅雷财报解析:收入多元化市值被低估
  2. 【ROS】打开QT出现Couldn‘t find an AF_INET address for
  3. 雷达系列论文翻译(十):Scan registration using segmented region growing NDT
  4. python控制本地音乐播放_Python:当音乐播放时,如何使语音控制工作?
  5. TLC5615的CVAVR程序
  6. Injective Protocol官方文档翻译(八) -头寸、仓位(Positions)
  7. 细说嵌入式教程的坑——小白学ARM(三)
  8. iOS文件系统的管理
  9. 三十多岁的女工程师,有点悲哀
  10. 三维建模之曲面的连续性