2023软工K班个人编程任务

魏燕清102101110 2023-09-14 23:29:39

GitHub

一.PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3040
-Estimate估计这个任务需要多少时间16201335
Development开发14401195
-Analysis需求分析(包括学习新技术)420300
-Design Spec生成设计文档3030
-Design Review设计复审6030
-Coding Standard代码规范6035
-Design具体设计6060
-Coding具体编码660600
-Code Review代码复审6020
-Test测试(自我测试,修改代码,提交修改)90120
Reporting报告9060
Test Repor测试报告6020
Size Measurement计算工作量3060
合计16201375

二.任务要求的实现

2.1项目设计和技术栈

从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。

这一次的个人编程任务拆分成了三个环节;分别是获取数据、解析数据、数据可视化。
通过查找B站、CSDN、博客园和Github资源完成各个环节。
技术栈:Python+HTML+JS

2.2爬虫与技术处理

说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,他们之间的关系),并对关键的函数或算法进行说明。

业务逻辑:
这次任务总共需要爬取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')

2.3数据统计接口部分的性能改进

记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS /JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。

2.4数据结论的可靠性

介绍结论的内容,以及通过什么数据以及何种判断方式得出此结论。
通过对爬取到的弹幕进行整理分析,可以知道我国大部分网民对日本将核污染水排海持反对态度,并且呼吁大家要保护海洋。

2.5数据可视化界面的展示

在博客中介绍数据可视化界面的组件和设计的思路。

词云图


通过使用python中的jieba进行分词,然后利用wordcloud生成词云图
三.心得体会

通过这次作业,我深刻地认识到自己的编程能力有多么多么的欠缺....一开始就知道这种题目肯定要用Python写,但是我之前根本没学过.然后在这两周的时间里恶补(速成,然后在网上各种搜索有没有可以利用的差不多的案例.反正最后终于勉强算是完成了吧.
通过这次作业 对python有了一点点了解,学到了很多新东西/(ㄒoㄒ)/~~

...全文
36 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
魏燕清102101110 2023-09-14
精选
  • 打赏
  • 举报
回复

img

魏燕清102101110 2023-09-14
  • 打赏
  • 举报
回复

img

118

社区成员

发帖
与我相关
我的任务
社区描述
2023福州大学软件工程K班
软件工程 高校 福建省·福州市
社区管理员
  • kevinkex
  • Devil angel
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧