120
社区成员
1.(1.1)在Github仓库中新建一个学号为名的文件夹,同时在博客正文首行给出作业Github链接。
https://github.com/102101438/102101438.git
一、PSP表格
(2.1)在开始实现程序之前,在附录提供的PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。
(2.2)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 45 · Estimate · 估计这个任务需要多少时间 30 45 Development 开发 870 1200 · Analysis · 需求分析 (包括学习新技术) 180 240 · Design Spec · 生成设计文档 30 45 · Design Review · 设计复审 30 30 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 120 180 · Design · 具体设计 60 120 · Coding · 具体编码 360 480 · Code Review · 代码复审 30 45 · Test · 测试(自我测试,修改代码,提交修改) 60 75 Reporting 报告 60 100 · Test Repor · 测试报告 30 60 · Size Measurement · 计算工作量 15 20 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 15 20 · 合计 960 1345
二、任务要求的实现
(3.1)项目设计与技术栈。从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。
- 在本次任务中,我把任务分为了五个环节:设计任务流程,学习相关知识,设计代码、编程、整理结果。
- 通过视频网站和csdn以及和同学的交流,了解和学习爬虫所需要的python知识,以及爬虫的基本流程,最终完成各项环节。
- 技术栈:requests,re,bs4,jieba等。
(3.2)爬虫与数据处理。说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,他们之间的关系),并对关键的函数或算法进行说明。
- 总体思路时先获取一页视频的链接并获取bv号
- 更改视频链接可以找到弹幕地址的链接
- 进入弹幕地址就能找到该视频的所有弹幕
- 提取弹幕后生成词云图
一、通过get请求获取搜索界面的视频的html,再获取视频的url
def get_video_url(): #获取视频html video_url = [] if page == 1: url = 'https://search.bilibili.com/all?keyword=%E6%97%A5%E6%9C%AC%E6%A0%B8%E6%B1%A1%E6%9F%93%E6%B0%B4%E6%8E%92%E6%B5%B7&from_source=webtop_search&spm_id_from=333.1007&search_source=3' else: url = 'https://search.bilibili.com/all?vt=46889243&keyword=%E6%97%A5%E6%9C%AC%E6%A0%B8%E6%B1%A1%E6%9F%93%E6%B0%B4%E6%8E%92%E6%B5%B7&from_source=webtop_search&spm_id_from=333.1007&search_source=3&page={page}&o={(page-1)*20}' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76' } response = requests.get(url=url, headers=headers) response.encoding = 'utf-8' #获取弹幕地址 content_list = re.findall('bvid:"(.*?)"', response.text) video_url += content_list return video_url
二、改变链接进入可找到弹幕地址的界面
def get_dm_url(video_url): dm_url=[] for bv in video_url: #改变链接 url='https://www.ibilibili.com/video/'+bv dm_url.append(url) return dm_url
三、进入弹幕地址
def get_danmu_url(dm_url): danmu_url=[] for url in dm_url: response = requests.get(url=url) response.encoding = 'utf-8' dan_url = re.findall('<a href="(.*?)" class="btn btn-default" target="_blank">弹幕</a>', response.text) danmu_url += dan_url return danmu_url
四、将弹幕地址中的弹幕保存到文档中
def get_danmu(danmu_url): for url in danmu_url: response = requests.get(url=url) response.encoding = 'utf-8' danmu_list = re.findall('<d p=".*?">(.*?)</d>', response.text) for danmu in danmu_list: with open('dm.txt', mode='a', encoding='utf-8') as f: f.write(danmu) f.write('\n')
五、生成词云
import jieba import wordcloud f = open('dm.txt', encoding='utf-8') txt = f.read() string = ' '.join(jieba.lcut(txt)) #词云图格式 wc = wordcloud.WordCloud( width=700, height=700, background_color='white', font_path='msyh.ttc', scale=15, ) wc.generate(string) wc.to_file('dmcy.png')
(3.3)数据统计接口部分的性能改进。记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS /JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。
每个函数花费时间各有不同
(3.4)数据结论的可靠性。介绍结论的内容,以及通过什么数据以及何种判断方式得出此结论。
- 根据词云图可以看出,“保护海洋”,“保护地球”的呼声最高,可见大家对于排放核污水是极其反对的,表达出人们爱护环境,追求美好世界的诉求,日本的做法无疑是在开历史倒车。
(3.5)数据可视化界面的展示。在博客中介绍数据可视化界面的组件和设计的思路。
- 通过jieba对弹幕进行分词,再利用wordcloud生成了如下词云图:
三、心得体会
(4.1)在这儿写下你完成本次作业的心得体会,当然,如果你还有想表达的东西但在上面两个板块没有体现,也可以写在这儿~
- 这次的作业对我来说是一个空前的挑战,没有python基础这点让我步履维艰,但我通过主动查找资料,寻找视频学习操作,向同学学习,完成了多数任务。我从基础做起,当我成功将一个视频的弹幕提取到文档中,并且绘制出词云图时,这给我的成就感是不言而喻的,只后循序渐进进行多个视频的弹幕爬取。另一方面我也深感自己的学识和技能粗浅,过程中也遭遇了不少的困难,我也见识到实践的挑战极大,前方的未知令我压力倍增,所幸我还能通过各种渠道解决多数难题。这次作业让我在实践方面有了比较明显的提升,但我投入的时间还是较少,整个流程显得很粗糙,总体上仍然没理清一些部分的根本原理,之后要好好整理知识,争取下次做得更好。