赞
踩
视频、用户列表页(含搜索结果页)
显示功能:视频页/用户页左上角显示网页Logo,中间向右对齐显示网页名称、简介,搜索栏底部展示结果条数、搜索用时,最后展示视频封面及标题信息/用户头像及用户名信息。
搜索功能:输入关键词(不超过50字符)
若不输入关键词直接点击搜索,则返回视频列表页/用户列表页;
若输入50字符以内关键词,点击搜索:
若视频标题或介绍/用户昵称或介绍中包含关键词,则返回包含该关键词的视频/用户列表,并显示结果条数、搜索用时;
若视频标题或介绍/用户昵称或介绍中不包含关键词,则显示“共0条结果,请输入其他关键词”字样。
视频/用户列表页切换功能:点击单选组控件即可实现列表切换。
页码功能:
视频/用户查看详情功能:点击列表页的视频/用户信息,即可跳转至视频/用户信息页。
视频信息页:
用户信息页
models.CharField
格式存储其bilibili原用户空间连接、用户头像链接、用户名、粉丝数、用户介绍,以models.ManyToManyField
格式存储其发布的视频。models.CharField
格式存储其bilibili原视频链接、视频标题、播放数、弹幕数、点赞量、投币数、收藏量、分享数、发布时间、视频描述、评论,以及该视频作者的bilibili原用户空间连接、用户头像链接、用户名、粉丝数、用户介绍。存储方法:
models.Model
的类Movie
和User
,并声明其成员变量的类型;python manage.py loaddata data.json
指令,将爬取的json格式数据导入Django的SQLite数据库。查询方法(只展示视频查询代码,用户查询同理):
前端网页输入关键词,通过get
请求,将关键词传给后端py文件中;
<form action="/bilibili/movielist" method="get">
<input type="text" name="keyword" id="search" placeholder="请输入关键词……"/>
<button type="submit" value="搜索" class="searchButton">搜索</button>
</form>
后端views.py文件中通过request
获取get
请求的关键词,用Django的SQLite数据库自带的filter
函数进行筛选,实现关键词查询。
movie_list = models.Movie.objects.all().filter(moviename__icontains=keyword) | models.Movie.objects.all().filter(moviedescription__icontains=keyword)
base_url = 'https://search.bilibili.com/upuser?keyword=%E8%88%9E&page='
,通过for循环生成数个用户搜索结果页url = base_url + '&page=' + str(i)
;url
,利用伪装User-Agent
的headers
,用requests.get
函数获取该网址的静态html内容,每次请求间隔3秒;BeautifulSoup
处理获取的html内容,再用find_all
/find
函数来找到所有含有某参数信息/第一个含某参数信息的内容,获得用户ID相关信息。webdriver.Chrome
函数创建驱动(本项目使用谷歌浏览器驱动),通过前述爬取的用户ID相关信息生成链接如url = 'https://space.bilibili.com/' + str(userID) + '/video'
后,用get
函数打开网页并获取该网页动态生成的html内容;find_element_by_css_selector
/find_elements_by_css_selector
函数定位到含该css参数的信息,来获得用户相关信息/其制作的视频链接信息;get
函数打开视频网页并获得动态生成的html内容,通过find_elements_by_css_selector
函数获得视频相关信息(不包括评论);execute_script('window.scrollBy(0,document.body.scrollHeight)')
以及execute_script('window.scrollBy(0,1000)')
函数实现向下滚动页面,来动态获取评论区内容,并在评论区内容已生成后,通过find_elements_by_css_selector
获得评论区内容;quit()
函数退出驱动。list
转化为numpy.array
格式,实现更快速的数组运算。matplotlib.pyplot.scatter
函数实现散点图,matplotlib.pyplot.bar
函数实现柱状图,matplotlib.pyplot.pie
实现饼图。References:
http://www.biyezuopin.vip
https://www.bilibili.com/video/av81157381https://blog.xieqk.com/posts/36033.html
https://blog.csdn.net/weixin_45304503/article/details/104815267
https://www.jianshu.com/p/7f5640f571ba
https://blog.csdn.net/s_kangkang_A/article/details/102911301
https://blog.csdn.net/weixin_39756416/article/details/110706294
https://blog.csdn.net/qq_44267691/article/details/104262616
https://blog.csdn.net/qq_39360565/article/details/104358982
https://blog.csdn.net/zdx1996/article/details/86583676
https://blog.csdn.net/qq_42874635/article/details/114636142
https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css
https://blog.csdn.net/weixin_42347925/article/details/112379383
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。