软件工程实践第二次作业——个人实战

软件工程实践第二次作业——个人实战

这个作业属于哪个课程https://bbs.csdn.net/forums/FZU_university
这个作业要求在哪里<https://bbs.csdn.net/topics/619295152
这个作业的目标爬取,文件操作,异常处理 ,单元测试
其他参考文献《构建之法》https://blog.csdn.net/kobepaul123/article/details/128796839

1.Gitcode项目地址

https://devcloud.cn-north-4.huaweicloud.com/codehub/project/de7b03c40d0d4f408249dcfe7024be11/codehub/2692109/home?ref=master&filePath=222200424

2.psp表格

pspPersonal Software Process Stages预估耗时实际耗时间
Planning计划
• Estimate• 估计这个任务需要多少时间1000900
Development开发700800
• Analysis• 需求分析 (包括学习新技术)7070
• Design Spec• 生成设计文档2020
• Design Review• 设计复审55
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)3030
• Design• 具体设计5050
• Coding• 具体编码300400
• Code Review• 代码复审1010
• Test• 测试(自我测试,修改代码,提交修改)2030
Reporting报告5050
• Test Report• 测试报告5060
• Size Measurement• 计算工作量2020
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1020
合计23352465

3.解题思路描述

3.1获取信息

在最初的需求中,我需要从目标网页(https://olympics.com/zh/paris-2024/medals)上抓取每日奖牌数据。为了实现这一需求,我选择了使用 Selenium 驱动的 WebDriver 来加载网页,并利用 JSoup 来解析网页的内容。这种方式可以处理包含动态加载内容的网页,因为 WebDriver 可以模拟浏览器行为,加载完整页面和触发懒加载等。

3.2将获取到的信息保存在本地txt文件中。
3.3处理信息方便后续操作

获取的部分信息与实现需求无关,因此要对信息进行处理。

3.4编写接口
3.5单元测试

参考邹欣老师的博客

4.设计与实现过程

1.用户输入
正常的输入只需要调用不同的功能接口,而对于异常输入分为两种情况,一种是功能二的不规范日期异常,一种是用户乱输,对于不同的情况就需要做不同的处理。

2.爬取
因为网站数据随界面滚动而出现新内容,我通过模拟界面滚动来实现爬取。

3.功能实现
按要求实现所需功能
爬取
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

5.功能实现与关键代码展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.程序性能改进

刚开始爬取时,我直接使用 WebDriver.get(url) 访问页面,并获取页面源代码。然而,这种方法在处理动态内容时存在问题,因为页面中的奖牌数据是只有滚动页面时,新的奖牌数据才会显示出来。因此,仅仅抓取初始页面并不足以获得完整数据。

逐步改进:引入滚动模拟:为了解决懒加载问题,我添加了一个 JavaScript 代码来模拟页面滚动。通过使用 JavascriptExecutor.executeScript,每次滚动 200px,并在每次滚动后等待 1.5 秒,确保新内容能成功加载。这一步的改进解决了动态内容加载的问题,使得我能够获取更多数据。

页面滚动逻辑:通过引入滚动模拟,解决了懒加载问题,确保动态内容能成功加载。

数据去重:通过使用 Set 来存储数据,避免了重复抓取同一奖牌信息,进一步优化了性能。

7.单元测试改进

测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

覆盖率
在这里插入图片描述
在这里插入图片描述

8.异常处理

在文件读取和写入过程中,确保捕捉并处理异常,处理异常都是用try-catch捕获,而不抛给调用者。

BufferedReader br = null;
try {
//在try-catch中获取文件
br = new BufferedReader(new FileReader(“example.txt”));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
//异常捕获
System.err.println("Error reading file: " + e.getMessage());
}

9.心得体会

本次作业让我学习了网页数据爬取的相关操作,也让我对 Java 编程的基本语法和异常处理机制的使用等更加熟练。单元测试的内容是第一次接触,在以后的项目也会多加使用单元测试来多多测试自己写的项目。这次项目的开发经历极大地锻炼了我解决问题的能力,对我来说是一次宝贵的经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值