这个作业属于哪个课程 | 2023秋-福州大学软件工程 |
---|---|
这个作业要求在哪里 | 2023秋软工实践个人作业二 |
这个作业的目标 | 学习爬虫,tkinter库创建GUI界面,Chatgpt框架生成,copilot代码辅助 |
学号 | 102299210 |
目录
1. Github代码库
2. 项目介绍
我把本次的作业拆解成了几个步骤:
- 编写爬虫程序,使用request,beautifulsoup库爬取洛谷题目。
- 编写爬虫程序,将爬到的题目以markdown文件保存下来。
- 使用TKinter库编写GUI图形界面。
首先配置copilot,按照b站教程。
其次,询问Newbing给出合适的方向。但实际上newbing不是很好用…后面换成了chatgpt,果然还是ai一哥好用。
查看 洛谷robots协议
从robots协议我们得知,洛谷是具有反爬虫机制的。因此用了time.sleep()函数,降低爬取频率,以免触发反爬机制。
接下来研究洛谷网站的url:
因为洛谷网页是前后端分离编写的,所以架构非常规范。很容易想要的内容推出对应的url。
以https://www.luogu.com.cn/problem/list?difficulty=3&tag=&page=1
为例:
difficulty
是难度tag
是对应的标签page
是网页页码
很容易更具规律得知难度是对应着数字0-7的。
① 代码逻辑:
这段代码实现了一个用于爬取洛谷(Luogu)题目的命令行工具。以下是代码的简要介绍:
-
映射难度等级:定义了一个字典
difficulty_dict
,用于将数字难度等级映射到文本表示,方便用户选择。 -
navigateToLuoguDifficultyPage
函数:该函数接收三个参数,分别是难度等级、关键词和题目数量。它根据用户提供的难度等级构建洛谷网页的URL,发送HTTP请求获取页面内容,然后使用Beautiful Soup解析页面,提取题目信息。根据关键词和数量的条件,保存满足条件的题目的Markdown内容为文件。 -
getProblemMarkdown
函数:接收一个题目的URL,发送HTTP请求获取题目页面的HTML内容,然后使用Beautiful Soup解析页面,提取题目的Markdown内容。 -
saveProblemMarkdown
函数:接收一个包含题目信息的字典,根据题目的编号和标题创建一个文件夹,并将题目的Markdown内容保存为一个Markdown文件。 -
主程序部分:用户在命令行中输入难度等级、关键词和题目数量,然后调用
navigateToLuoguDifficultyPage
函数开始爬取。
总体而言,这段代码实现了一个基本的洛谷题目爬取工具,用户可以根据难度等级、关键词和数量的要求来获取题目的Markdown内容并保存为文件。这可以帮助用户离线查看和管理洛谷上的题目。
② 图形界面
包括难度选择,关键词搜索,题目数量。
* 未完成的功能——标签选择
本来想为Jason哥弄一个可以多样选择的标签栏。然后发现时间实在是来不及,没能完成这个开发。但感觉自己花了很多时间,还是想在博客里展现一下。
- 我先是找到了一些规律,洛谷的标签其是对应着url中的tag参数
- 因此我手动收集了每个标签对应的tag值,并让chatgpt帮我写一个简单的工具程序转换成json格式。
- 写一个函数让用户选择标签,然后根据json文件找到对应的tag值,跳转对应url。
(未完成)
3. 测试样例
爬虫测试:
- 测试样例1(难度+关键词+题目数量:每个变量都配全)
生成的markdown
- 测试样例2
生成的markdown
- 测试样例3(不配关键词参数)
生成的markdown:
4. ALGC
子任务 | 预估哪些部分使用AIGC | 实际中哪些部分使用AIGC |
---|---|---|
HTTP请求发送和响应处理 | 部分使用 | request库的使用 |
页面解析 | bs4库的应用 | 提供了几个函数,beautifulsoup,re正则式表达等 |
数据预处理和存储 | 部分使用 | json转换python的编写 |
反爬虫 | 提供方法 | timesleep和header生成 |
前端设计 | 提供框架 |
AIGC技术的优点:
- 快速编写代码
比如一个简单的爬虫框架 - 可以辅助代码思路
将一个复杂的任务进行拆解。
AIGC技术的缺点:
- 对于问题的解决不够明确,比如洛谷的网页就需要人类去观察,chatgpt还不能做到找规律。很多函数模块的编写并不能自行生成,需要人类提供引导(或者说是给出创新的idea)。
- 理解问题上还是和人类有很大的差距的。提出需求后并不能给出让人很满意的答案。
AIGC技术适合用方面:
- 辅助编程:使编程任务便利,有助于程序员自动生成代码片段、函数、注释等,加速编码过程,提高开发效率
- 自动代码完成:可用于自动完成代码,提供代码建议,减少手动编写重复代码的工作
- 代码修改和编辑:对所写代码的语法和思路提供帮助,检查拼写和语法错误,同时辅助思路
AIGC技术不适合实现功能:
- 编写复杂任务:不适合编写大规模或复杂的任务,提供的代码需求实现不完整,不适用于复杂开发。
- 无程序员编程:对代码的提供的帮助有限,需要有经验的程序员辅助该工具才能实现任务的全部要求。
5. 个人心得
学会的内容:
- 学会分析网站数据流,实现初始URL地址的获得。
- 用AIGC技术来自动生成爬虫需求文档和URL地址。
- 独立学会对tkinter库的简单使用。
- 利用Tkinter库来制作GUI页面,实现数据的展示和交互。
- 扩展了对python语言的学习。
- 基于BeautifulSoup对解析网页内容或JSON数据,提取需要的数据字段。
心得体会:
本次软工挺有成就感的,因为在编写爬取代码的时候感觉自己的思路非常清晰,不过实际做出来的总是和脑袋里想的有很大的差距。
这次的软工真的学到了很多东西也真的非常辛苦…熬了好多夜,眼睛视力大降,但是碍于开发能力太有限了,确J实没有能够很好把握住项目的完整度。但是我能说我确实尽我所能了(T^T),下次开发要注意一下时间a地把控!!!
Jason哥刷题辛苦了,记得劳逸结合啊!
6. 个人总结
PSP表格
任务 | 预估耗时(min) | 实际耗时(min) |
---|---|---|
需求分析 | 45 | 60 |
计划 | 15 | 20 |
开发 | 16*60 | 18*60 |
UI美化 | 3*60 | 2*60 |
test | 60 | 90 |
总结及优化方向总结 | 15 | 25 |
Total | 1275 | 1395 |
个人评价
- 做的好的地方有:
- 对新技术的探索和应用
- 对编程和爬虫的基本知识和技能的掌握和运用
- 实现了数据的展示和交互
- 值得改进的地方:
- 时间的把控真的很重要!!!本来以为可以用AI的话感觉效率会大大提高,但实际上花了非常多的时间去跑它生成的代码,报错地方太多了,参数也不准确,要花很多时间去找bug和测试。
- 学计算机真的要找同学多问问,多交流,不能一个人坐在电脑前苦思冥想。有时候问一下其他同学感觉豁然开朗,也节省了不少时间!
参考资料:
【python爬虫】爬取洛谷习题并转为md格式