9.1 KiB
@import "for_md.md"
2025软工K班个人编程任务
【作业链接】https://code.educoder.net/projects
【知士荟博客链接】请在此处填写知士荟本次作业博客链接
一、PSP表格
| PSP阶段 | 任务内容 | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| 计划规划 | 需求分析、技术选型、任务分解 | 20 | 30 |
| 环境搭建 | 开发环境配置、依赖包安装 | 30 | 20 |
| 数据获取 | B站弹幕爬虫实现 | 40 | 70 |
| 数据处理 | 数据清洗、统计分析 | 20 | 20 |
| 可视化实现 | 词云图、图表制作 | 20 | 10 |
| 测试优化 | 单元测试、性能优化 | 40 | 30 |
| 文档撰写 | 实验报告编写 | 100 | 50 |
| 总计 | 310 | 240 |
二、任务要求的实现
2.1项目设计与技术栈
技术栈:
- 编程语言:python
- 爬虫工具:request
- 数据处理:csv
- 可视化云图:python stylecloud库
- 其他工具:pytest,bs4,panda,csv
核心类与函数关系:
graph TD
A[主程序] --> B[爬虫模块]
A --> C[数据处理模块]
A --> D[可视化模块]
B --> E[网络请求]
B --> F[数据解析]
C --> G[数据清洗]
C --> H[统计分析]
关键算法说明:
- 弹幕去重:使用Counter类进行自动去重和词频统计
- 关键词提取方法:使用提前准备好的keywords文件对爬取的数据进行提取
- 排名统计逻辑:根据数据的词频排序
业务逻辑设计:
- 分析目标网站(b站)视频结构,设计爬虫
- 获得基础url_base
self.url_ref = 'https://search.bilibili.com/all?vt=83547368&keyword=LLM'
self.headers = {
"Referer":
self.url_ref,
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
}
self.url_interface_cid = "https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"
self.url_page_base = "https://search.bilibili.com/all?vt=85151086&keyword=LLM&page={page}&o={offset}"
- 获取LLM视频页面链接
- 使用浏览器f12获取视频链接selector
"#i_cecream > div > div:nth-child(2) > div.search-content--gray.search-content > div > div > div > div.video.i_wrapper.search-all-list > div > div:nth-child(1) > div > div.bili-video-card__wrap > a"
-
根据视频链接获取视频cid,再根据cid通过b站弹幕API接口网站获取弹幕 url_interface_cid = "https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"
提取结果: 链接地址: https://www.bilibili.com/video/BV12N411x7FL/ 链接文本: 19.2万21208:10 得到CID: 1308288574
- 对爬取的数据进行清洗,使用关键字检索LLM
- 使用tool.keywords.py提供的words库,使用re为word_filter实现关键词检索和口语化弹幕剔除
class DanmakuFilter: """弹幕过滤器,去除口语化内容,保留专业讨论""" def __init__(self): # 定义语气词和口语化表达 import tool.keywords as kw # 编译正则表达式 self.colloquial_regex = re.compile('|'.join(kw.colloquial_patterns)) self.llm_regex = re.compile('|'.join(kw.keywords), re.IGNORECASE)
- 对统计数据进行词云图绘制
- 使用python的stylecloud对处理好的弹幕进行词云图绘制
gen_stylecloud( text=text, # 处理好的文本 size=1024, # 图片尺寸,越大越清晰 font_path='msyh.ttc', # 指定中文字体路径(如微软雅黑) output_name='ai_danmu_stylecloud.png', # 输出文件名 icon_name='fas fa-question-circle', custom_stopwords=['的', '了', '在', '是', '我', '有', '和', '机'], # 自定义停用词 palette='colorbrewer.qualitative.Set1_8', # 使用预设配色方案 # background_color='white', # 背景色 gradient='horizontal', # 颜色渐变方向 max_font_size=200, # 最大字体大小 max_words=500, # 最多显示词数 )
2.2接口测试
- 测试方案:针对每个技术模块使用本地 name=='main'进行本地化测试
2.3 数据统计接口性能改进
性能分析过程:
- 使用cProfile对main函数的整个处理流程进行性能分析
import cProfile
import pstats
from io import StringIO
if __name__ == "__main__":
# 爬虫性能分析部分
scawler = Scawler()
profiler = cProfile.Profile()
profiler.enable()
ls = scawler.work(1, 4)
danmu_counter = analyze_danmu_statistics(ls)
shower = Cloud_shower()
shower.to_show(danmu_counter)
profiler.disable()
stream = StringIO()
stats = pstats.Stats(profiler, stream=stream)
stats.sort_stats('cumulative') # 按累计时间排序
stats.print_stats(20) # 显示前20行
print("\n=== 详细分析报告 ===")
print(stream.getvalue())
性能分析图:
消耗最大函数分析:
改进思路:
- 预计使用异步爬虫或多线程加上ip代理进行request的爬取速度优化和避免被ban
2.4 数据结论
数据样例展示
主要发现:
- LLM视频内学习打卡弹幕数量巨大
- 少有真正讨论LLM的弹幕内容,内容更偏向于口语化评价
- 数据量过少无法得到充分信息
2.5 数据可视化界面展示
@import "for_md.md"
词云图实现:
- 将数据转化为文本,传入stylecloud,自动生成对应词云图
词云图展示:
三、心得体会
技术收获:
1. 全栈数据科学技能提升
- 掌握了完整的"数据采集→清洗→分析→可视化"工作流程
- 实践了从网络爬虫到数据可视化的端到端项目开发
- 学习了B站API接口调用和XML数据解析技术
2. 文本处理与自然语言处理技术
- 实现了基于正则表达式的智能文本过滤系统
- 掌握了关键词匹配和口语化内容识别算法
3. 工程化开发能力
- 采用模块化设计,实现了高内聚低耦合的代码架构
- 使用面向对象编程思想,设计了可扩展的类结构
- 实践了类型提示、异常处理等Python实践
4. 数据可视化技术
- 掌握了stylecloud词云生成技术
- 学习了配色方案、字体优化等可视化美学设计
- 实现了从原始数据到专业图表的自动化流程
遇到的问题与解决方案:
1. B站反爬虫机制挑战
- 问题:直接爬取容易被封IP,动态加载内容难以获取
- 解决方案:模拟真实浏览器请求头,使用官方API接口获取CID,间接获取弹幕数据
2. 数据清洗复杂度高
- 问题:弹幕包含大量口语化、情绪化内容,干扰专业分析
- 解决方案:构建双层过滤系统(口语化模式匹配+专业关键词筛选)
3. 性能优化需求
- 问题:大规模数据处理时效率低下
- 解决方案:使用Counter进行高效词频统计,优化正则表达式匹配逻辑
4. 中文处理特殊性问题
- 问题:中文分词、字体显示等技术难题
- 解决方案:配置中文字体路径,使用专业的文本处理库
未来改进方向:
1. 技术架构升级
- 引入异步爬虫提升数据采集效率
- 集成机器学习模型进行智能内容分类
- 添加数据缓存机制减少重复请求
2. 分析维度扩展
- 增加情感分析功能,量化用户态度倾向
- 实现时间序列分析,追踪观点演变趋势
- 添加用户画像分析,识别不同群体关注点
3. 系统功能完善
- 开发Web可视化界面,提升用户体验
- 实现定时自动爬取和报告生成
- 添加数据导出和分享功能
项目总结:
本项目构建了一个专业级的大语言模型弹幕分析系统:
成长收获:通过本项目,全面提升了全栈开发能力、数据处理能力和工程化思维,为未来从事数据科学和AI应用开发奠定了坚实基础。
个人成长: 通过本次项目,我不仅提升了编程技能和数据分析能力,更培养了解决复杂问题的系统思维。从需求分析到技术实现,从问题排查到性能优化,全过程锻炼了我的工程实践能力和创新思维,为未来从事更复杂的数据科学项目奠定了坚实基础。
参考资源
- B站开放API文档
- 相关技术博客
- 数据处理工具文档









