国际快递网站建设合肥百度seo排名
Java爬取赛事网站
Java爬取赛事网站
- Java爬取赛事网站
- 参与社区的问题回答
- Gitcode项目地址
- PSP表格
- 解题思路描述
- 问题
- 接口设计和实现过程
- 编写中的测试
- 关键代码展示
- 性能改进
- 单元测试
- 异常处理
- 心路历程与收获
参与社区的问题回答
问题 | 回答 |
---|---|
这个作业属于哪个课程 | 软件工程-23年春季学期 |
这个作业要求在哪里 | 软件工程实践第二次作业—文件读取 |
这个作业的目标 | 完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序 |
其他参考文献 | 无 |
Gitcode项目地址
点击这里前往查看源码
运行🛠️
Java -jar AOSearch.jar input.txt output.txt
PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 90 |
• Estimate | • 估计这个任务需要多少时间 | 30 | 90 |
Development | 开发 | 570 | 630 |
• Analysis | • 需求分析 (包括学习新技术) | 120 | 60 |
• Design Spec | • 生成设计文档 | 60 | 60 |
• Design Review | • 设计复审 | 60 | 90 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
• Design | • 具体设计 | 60 | 90 |
• Coding | • 具体编码 | 180 | 180 |
• Code Review | • 代码复审 | 30 | 30 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 90 | 90 |
• Test Repor | • 测试报告 | 30 | 30 |
• Size Measurement | • 计算工作量 | 30 | 30 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
total | 合计 | 690 | 810 |
💡
解题思路描述
- 获取有关网站中 : players,results 的相关json 数据
实现: 开发者工具,监听页面加载的网络请求,找到json,通过预览确定是哪个文件
问题
players出现和results一开始出现问题,监听中没有出现
采用 jsoup,爬取网页页面里面的内容,就可以找到源地址,然后再打开
接口设计和实现过程
把所有的json放在一个文件夹,然后通过fastjson, 在Lib.java 工具类里面去访问
实现: 举例:players.json的调用
编写中的测试
设置 项目调试配置,构建并运行,主函数 args的 arg[0],arg[1]
关键代码展示
outFile 循环输出到 output文件
public void outPutAllPlayers(BufferedWriter bw) {try {allPlayers temp = getAllPlayers();int num = Integer.parseInt(temp.getAllPlayersNums());System.out.println(num);for (int i=0;i< num;i++) {allPlayers.Players tempMedals=temp.playersList.get(i);bw.write("full_name"+tempMedals.getFull_name()+"\n");bw.write("short_name:"+tempMedals.getShort_name()+"\n");bw.write("gender:"+tempMedals.getGender()+"\n");bw.write("Birth_place:"+tempMedals.getBirth_place()+"\n");bw.write("coach:"+tempMedals.getCoach()+"\n-----\n");}bw.close();}catch (IOException e) {e.printStackTrace();}}
读取 Json 文件
/*** @param fileName:* @return str* @ClassName: readJsonFile* @author 14533* @description TODO* @date 2023/2/26 14:52*/public static String readJsonFile(String fileName) throws FileNotFoundException {String str="";FileInputStream inputStream = new FileInputStream(fileName);try {int ch=0;BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));StringBuffer sb = new StringBuffer();try {while ((ch=br.read())!=-1) sb.append((char)ch);br.close();str=sb.toString();return str;}catch (IOException e) {e.printStackTrace();return null;}}catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}
性能改进
共计 788 个选手信息,包括大量的图片信息,创建java类,先json读取指定json内容然后再返回
class allPlayers {private String players;public List<Players> playersList;/*** @ClassName Players:* @author 14533* @description TODO* @date 2023/2/26 14:21*/public static class Players {private String full_name;private String short_name;private String gender;private String birth_place;private String coach;public Players() { }/*** @param fullname:* @param shortname:* @param sgender:* @param birthplace:* @param coachs:* @return void* @author 14533* @description TODO* @date 2023/2/26 14:29*/public void setPlayers(String fullname, String shortname, String sgender, String birthplace, String coachs) {full_name = fullname;short_name = shortname;gender = sgender;birth_place = birthplace;coach = coachs;}public String getFull_name() {return full_name;}public String getShort_name() {return short_name;}public String getGender() {return gender;}public String getBirth_place() {return birth_place;}public String getCoach() {return coach;}}/*** @param total:* @param listPlayers:* @return null* @author 14533* @description TODO* @date 2023/2/26 14:31*/public allPlayers(String total, List<Players> listPlayers) {players = total;playersList = listPlayers;}public String getAllPlayersNums() { return players; }
}
单元测试
junit 选择test用例
列举:
测试 查询比赛中的选手的信息如果没有选手系统会不会出错
@Testpublic void whichPlayerTestNull() {boolean flag = false;JSONArray winners = null;JSONArray uuids = JSONArray.parseArray("['240324-69652871-6852368']");for(int i = 0; i < uuids.size(); i++) {flag = true;}assertTrue(flag);}@Testpublic void whichPlayerTestEmpty() {JSONArray winners = null;JSONArray uuids = JSONArray.parseArray(null);for(int i = 0; i < uuids.size(); i++) {flag = true;}assertTrue(flag);}
两个测试类,用判断是否能进去for做断言的结果
情况 | 结果 |
---|---|
传入的选手uuid不在选手列表 | 循环继续但return不输出结果 |
传入null,表示没有获取到uuid | 循环不继续,程序直接退出 |
调整
循环结果强制退出输出 null
for循环前判断 uuids.size() 长度 == 0 跳过循环输出 error
异常处理
- 文件读取都添加了,文件读取不到的异常处理
FileNotFoundException
- 对付无法转义,阻止程序出现编译失败
UnsupportedEncodingException
- 其他的没发现,统一有问题就直接捕获
IOException
心路历程与收获
- 对Java类的相互引用,封装,测试有了更深的了解
- 学会了运用 fastJson调用json文件
- 学习了阿里巴巴代码编写规范后,对企业级编码的规范有了了解,也发现这样写代码最后检查也更加方便
- 优化了Idea的自定义注释
- 对先打代码还是先写计划有了体会,在计划会省去很多不必要的边写边改的过程,而且可以在编写之前解决大部分对代码不熟悉的部分,减轻过程中因为知识受限造成的问题
- 单元测试不是很明白
- 总的来说:掌握了 fastjson,junit,Lib类编写,主函数调用这样的方式。还有在测试和总结和收集数据方面的欠缺。