118
社区成员
发帖
与我相关
我的任务
分享
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
-Estimate | 估计这个任务需要多少时间 | 1620 | 1335 |
Development | 开发 | 1440 | 1195 |
-Analysis | 需求分析(包括学习新技术) | 420 | 300 |
-Design Spec | 生成设计文档 | 30 | 30 |
-Design Review | 设计复审 | 60 | 30 |
-Coding Standard | 代码规范 | 60 | 35 |
-Design | 具体设计 | 60 | 60 |
-Coding | 具体编码 | 660 | 600 |
-Code Review | 代码复审 | 60 | 20 |
-Test | 测试(自我测试,修改代码,提交修改) | 90 | 120 |
Reporting | 报告 | 90 | 60 |
Test Repor | 测试报告 | 60 | 20 |
Size Measurement | 计算工作量 | 30 | 60 |
合计 | 1620 | 1375 |
从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。
这一次的个人编程任务拆分成了三个环节;分别是获取数据、解析数据、数据可视化。
通过查找B站、CSDN、博客园和Github资源完成各个环节。
技术栈:Python+HTML+JS
说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,他们之间的关系),并对关键的函数或算法进行说明。
业务逻辑:
这次任务总共需要爬取300个视频的弹幕数据,在web浏览器上一个页面可以显示30个视频,所以我们总共需要爬取10页。首先,获取视频的url链接;然后得到该视频的cid号,最后进行解析数据和保存弹幕。
第一部分:获取搜索页面url。
def get_next_video_url(search_url):
# 发送GET请求获取搜索页面内容
response = requests.get(search_url)
if response.status_code == 200:
html_content = response.content
# 解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')
# 查找视频链接元素
video_link_element = soup.select_one('.ajax-render')
if video_link_element:
# 获取视频链接
video_url = video_link_element['href']
return video_url
第二部分:获取视频cid号
def get_cid_from_url(video_url):
# 从URL中提取BV号
bv_match = re.search(r"(BV\w+)", video_url)
if bv_match:
bv_number = bv_match.group(1)
# 构造API请求URL
api_url = f"https://api.bilibili.com/x/player/pagelist?bvid={bv_number}"
# 发送GET请求获取API响应
response = requests.get(api_url)
if response.status_code == 200:
# 解析API响应JSON数据
json_data = response.json()
# 获取第一个视频的cid号
if 'data' in json_data and len(json_data['data']) > 0:
cid = json_data['data'][0]['cid']
return cid
第三部分:提取弹幕
def save_bilibili_danmaku(cid,save_path):
# 构建获取弹幕数据的API链接
api_url = f"https://comment.bilibili.com/{cid}.xml"
# 发送GET请求获取弹幕数据
response = requests.get(api_url)
if response.status_code == 200:
danmaku_content = response.content.decode('utf-8')
# 解析XML格式的弹幕数据
root = ET.fromstring(danmaku_content)
danmaku_list = []
for d in root.findall('d'):
danmaku_list.append(d.text)
# 将弹幕数据保存到文件
with open(save_path, 'w', encoding='utf-8') as f:
for danmaku in danmaku_list:
f.write(danmaku + '\n')
print(f"Danmaku data has been saved to {save_path}")
else:
print("Failed to get the danmaku data.")
第四部分:数据可视化
def Word_cloud():
f = open('danmaku.txt', encoding='utf-8')
text = f.read()
print(text)
# 2. 分词 把一句话 分割成很多词汇
text_list = jieba.lcut(text)
print(text_list)
# 列表转成字符串
text_str = ' '.join(text_list)
print(text_str)
# 3.词云图配置
# img = imageio.read('小测.png')
wc = wordcloud.WordCloud(
width=700,
height=700,
background_color='white',
font_path='msyh.ttc', # 字体文件:微软雅黑
# mask = img,
# 设置 停用词
stopwords={'的', '了','\n'}
)
wc.generate(text_str)
wc.to_file('词云图.png')
记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS /JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。
无
介绍结论的内容,以及通过什么数据以及何种判断方式得出此结论。
通过对爬取到的弹幕进行整理分析,可以知道我国大部分网民对日本将核污染水排海持反对态度,并且呼吁大家要保护海洋。
在博客中介绍数据可视化界面的组件和设计的思路。
通过这次作业,我深刻地认识到自己的编程能力有多么多么的欠缺....一开始就知道这种题目肯定要用Python写,但是我之前根本没学过.然后在这两周的时间里恶补(速成,然后在网上各种搜索有没有可以利用的差不多的案例.反正最后终于勉强算是完成了吧.
通过这次作业 对python有了一点点了解,学到了很多新东西/(ㄒoㄒ)/~~