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

文章描述了一项软件工程实践作业,涉及爬虫技术、json数据解析、文件操作,通过抓包分析比赛成绩,使用Fastjson提高性能,并分享了代码设计、测试和性能优化的心得体会。
摘要由CSDN通过智能技术生成

这个作业属于哪个课程<软件工程实践-2023学年-W班>
这个作业要求在哪里<软件工程实践寒假作业>
这个作业的目标<学习爬取数据>
其他参考文献CSDN

目录

1 PSP表格

2代码设计

3抓包分析

4.程序编写

5.测试

6.性能优化

7.心得体会

代码地址 helloyzl30 / Project-java · GitCode
1 PSP表格

PSP StageActivityEstimated Time (minutes)Actual Time (minutes)
Planning计划6050
• Estimate估计时间6050
Development开发600300
Analysis需求分析 (包括学习新技术)600400
Design Spec生成设计文档6040
Design Review设计复审5080
Coding Standard代码规范 (为目前的开发制定合适的规范)6040
Design具体设计100150
Coding具体编码600540
Code Review代码复审10060
Test测试(自我测试,修改代码,提交修改)100300
Reporting报告60120
Test Repor测试报告6040
Size Measurement计算工作量1040
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划6030
Total-25602240

2代码设计
刚开始拿到题目以后我先对题目进行了分析 分析里面所需要用的技术 首先要对网站内容进行爬取 会设计到爬虫技术 然后需要对数据进行解析 要设计到json技术 同时也要对文件进行 写入 也用到了文件类相关的一些知识

代码中会有一个主类 代码总体设计模式是这样的 :

首先通过ARGS去接受用户传递的两个参数,一个参数是输入文件的名字,一个参数是输出文件的名字 拿到这两个参数 首先创建一个FILE对象里面的参数是输入文件的名字 获取到FIle对象以后开始对File对象进行解析 然后创建一个集合 将解析出来的数据放入集合中 然后将集合开始遍历

当集合中对象的值 是我们所需要的值类似于players , result women 1m springboard这样的字符串时候 我在集合中加了if语句 如果是这些字符串将会 执行if语句中的代码 先对对应的网站进行访问 访问下来的数据通过fastjson进行 解析 然后写到文件中 如果集合中的对象字符串不能识别的话 我将会返回ERROR的字符串写到 output.txt中

3抓包分析
这是对比赛成绩进行抓包的截图
​​​​在这里插入图片描述

​​
这是对比赛选手进行抓包的截图
在这里插入图片描述

4.程序编写
下方是对运动员数据进行采集的代码

String web = “https://api.worldaquatics.com/fina/athletes?gender=&discipline=&nationality=&name=&page=1&pageSize=50”;
String getdata = getdata(web);
JSONObject jsonObject = JSON.parseObject(getdata);
JSONArray sports = jsonObject.getJSONArray(“content”);
for (Object sport : sports) {
JSONObject jsonObjectSp = JSON.parseObject(String.valueOf(sport));
String fullName = jsonObjectSp.getString(“fullName”);
fileWriter.write(“fullName:”+fullName);
fileWriter.write(“\n”);
String gender = jsonObjectSp.getString(“gender”);
if (gender.equals(“M”)){
gender=“Male”;
}else {
gender=“Female”;
}
fileWriter.write(“gender:”+gender);
fileWriter.write(“\n”);
String nationality = jsonObjectSp.getString(“nationality”);
fileWriter.write(“country:”+nationality);
fileWriter.write(“\n”);
fileWriter.write(“-----”);
fileWriter.write(“\n”);
fileWriter.write(“…”);
fileWriter.write(“\n”);
fileWriter.write(“-----”);
fileWriter.write(“\n”);
首先我们通过url去访问带有运动员数据的接口接口会返还给我们一组json数据,我们通过fastjson对json数据进行 解析 解析以后结果我写入到txt中

这是对 women 1m springboard数据进行爬取以及解析的代码

String web = “https://api.worldaquatics.com/fina/events/09649153-aa3f-46eb-9c39-1ac7498b8eaa”;
String getdata = getdata(web);
System.out.println(getdata);

JSONObject jsonObject = JSON.parseObject(getdata);
JSONArray sports = jsonObject.getJSONArray(“Heats”);
Object Obeject = sports.get(0);
JSONObject jsonObject1M = JSON.parseObject(Obeject.toString());
JSONArray results = jsonObject1M.getJSONArray(“Results”);

for (Object result : results) {
JSONObject jsonObject1 = JSON.parseObject(String.valueOf(result));
String rank = jsonObject1.getString(“HeatRank”);
String fullName = jsonObject1.getString(“FullName”);
JSONArray dives = jsonObject1.getJSONArray(“Dives”);
String totalPoints = jsonObject1.getString(“TotalPoints”);
String Score1;
String Score2;
String Score3;
String Score4;
String Score5;
int i=1;

fileWriter.write( "Full Name:"+fullName);
fileWriter.write("\n");
fileWriter.write( "Rank:"+rank);
fileWriter.write("\n");
fileWriter.write( "Score:");
for (Object dive : dives) {
    i++;
    JSONObject jsonObjectDive = JSON.parseObject(dive.toString());
    String divePoints = jsonObjectDive.getString("DivePoints");
    if (i==6){
        fileWriter.write(divePoints);
    }else {
        fileWriter.write(divePoints+"+");
    }

    System.out.println(divePoints);
}
fileWriter.write( "="+totalPoints);
fileWriter.write("\n");
fileWriter.write("-----");
fileWriter.write("\n");
fileWriter.write("...");
fileWriter.write("\n");
fileWriter.write("-----");
fileWriter.write("\n");

这块代码大致实现思路与运动员相同 但是这个代码的独到之处是里面设计到了双重FOR循环 以及是运动员场次小分是需要再进入一层循环才可以 取到的 对于此我直接设置了循环次数 因为当最后一次分数写入的时候是不能写+需要换成=的 所以我设置当i=6的时候 我遍将=换成了+这次无疑是简便了 代码的逻辑

5.测试
首先我们将程序打成jar包 然后设置后input.txt 然后在cmd窗口进行执行 java -jar springboot-0.0.1-SNAPSHOT.jar input.txt output.txt 命令运行结果如下

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

输出截图
在这里插入图片描述

我们可以看到程序符合我们预期

6.性能优化
在本次程序设计中我最开始采用的json解析框架Gson,但是经过我使用以后我认为其的解析速率不高,然后我换了fastjson来对json数据解析,在使用fastjson对数据进行以后我程序的运行速率提升了一个很快的速度,同时还有一个性能优化的点是我之前的程序设计过于冗余 我会将一些常用的方法封装起来 会使代码的可读性提升了非常之多
在这里插入图片描述
在这里插入图片描述

7.心得体会
经过此次开发,我学习到了很多知识,例如网站的抓包知识,我之前做网站爬取的时候会直接将网页爬取下来再进行解析那样会增加了特别多的工作量,但是经过此次开发以后我发现抓包无疑会让效率提升特别多,因为从网站抓包得来的数据直接就通过fastjson解析以后我就可以直接用来使用了,还有就是程序开发之前一定要先想好此次的开发设计以及流程,但我这次开发是 一遍进行开发一遍进行设计的 为此踩了很多的坑 也浪费了很多时间 下次我要再进行开发的话 我首先会将这个程序设计 设计好 相关技术查阅好以后再进行开发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值