【Java爬取赛事网站】命令行输出(仅供学习)

news2025/1/13 7:52:01

Java爬取赛事网站


在这里插入图片描述


参与社区的问题回答

问题回答
这个作业属于哪个课程软件工程-23年春季学期
这个作业要求在哪里软件工程实践第二次作业—文件读取
这个作业的目标完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献

Gitcode项目地址

点击这里前往查看源码

在这里插入图片描述
运行🛠️

Java -jar AOSearch.jar input.txt output.txt


PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3090
• Estimate• 估计这个任务需要多少时间3090
Development开发570630
• Analysis• 需求分析 (包括学习新技术)12060
• Design Spec• 生成设计文档6060
• Design Review• 设计复审6090
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)3010
• Design• 具体设计6090
• Coding• 具体编码180180
• Code Review• 代码复审3030
• Test• 测试(自我测试,修改代码,提交修改)3030
Reporting报告9090
• Test Repor• 测试报告3030
• Size Measurement• 计算工作量3030
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划3030
total合计690810


💡

解题思路描述

  1. 获取有关网站中 : 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用例

列举:

测试 查询比赛中的选手的信息如果没有选手系统会不会出错

    @Test
    public 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);
    }
    @Test
    public 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


异常处理

  1. 文件读取都添加了,文件读取不到的异常处理

FileNotFoundException

  1. 对付无法转义,阻止程序出现编译失败

UnsupportedEncodingException

  1. 其他的没发现,统一有问题就直接捕获

IOException


心路历程与收获

  1. 对Java类的相互引用,封装,测试有了更深的了解
  2. 学会了运用 fastJson调用json文件
  3. 学习了阿里巴巴代码编写规范后,对企业级编码的规范有了了解,也发现这样写代码最后检查也更加方便
  4. 优化了Idea的自定义注释
  5. 对先打代码还是先写计划有了体会,在计划会省去很多不必要的边写边改的过程,而且可以在编写之前解决大部分对代码不熟悉的部分,减轻过程中因为知识受限造成的问题
  6. 单元测试不是很明白
  7. 总的来说:掌握了 fastjson,junit,Lib类编写,主函数调用这样的方式。还有在测试和总结和收集数据方面的欠缺。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka-Kraft 模式架构部署

Kafka-Kraft 模式架构部署 Kafka网址&#xff1a;https://kafka.apache.org/ PS&#xff1a;因环境原因此文档内端口都有修改&#xff01; 1.去官网下载二进制包 PS&#xff1a;3.4.0是目前最新的版本&#xff01;需要jdk1.8及以上版本启动。 [rootk8s-node1 ~]# wget https:/…

Linux下各种锁的理解和使用及总结解决epoll惊群问题(面试常考)

一.锁 锁出现的原因 临界资源是什么: 多线程执行流所共享的资源 锁的作用是什么, 可以做原子操作, 在多线程中针对临界资源的互斥访问... 保证一个时刻只有一个线程可以持有锁对于临界资源做修改操作... 任何一个线程如果需要修改&#xff0c;向临界资源做写入操作都必须持…

如何在 Primavera P6 中使用赢得值/挣值管理

目录 演示案例 如何在Primavera中绘制EVM图&#xff1f; 你是否想过如何在Primavera P6调度工具中应用挣值管理&#xff1f; 事实上&#xff0c;Primavera P6 能够使用挣值管理技术来控制项目进度和绩效&#xff0c;将项目成本与项目进度整合起来 演示案例 我们以一个简单…

JVM方法区详解有这篇就够了

1、方法区在哪里《Java虚拟机规范》中明确说明&#xff1a;“尽管所有的方法区在逻辑上是属于堆的一部分&#xff0c;但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&#xff0c;方法区还有一个别名叫做Non-Heap&#xff08;非堆&#xff09…

记录面试问题

以下问题不分先后&#xff0c;按照印象深浅排序&#xff0c;可能一次记录不完成&#xff0c;后面想起来会及时补充&#xff0c;如有不对&#xff0c;恳请各位围观大佬多多指教&#x1f64f; 印象最深的是一道很简单很简单的题目&#xff0c;我结束面试之后赶紧代码敲敲发现答错…

简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

【案例11-2】 简易计算器 【案例介绍】 1.案例描述 本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。 2.运行结果 运行结果 【案例分析】 要制作一个计算器&#xff0c;首先要知道它由哪些部分组成&#xff0c;如下图所示&#xff1a; 一…

见山,见路,见天地:OpenHarmony的开源共建攀登

自诞生之日起&#xff0c;OpenHarmony就引起着各方的关注&#xff0c;可谓是盛况空前。但一款开源操作系统的成功&#xff0c;困难不在第一步&#xff0c;而是第一步后面的一万步。那么&#xff0c;踏出开源第一步之后的OpenHarmony&#xff0c;后面的故事如何发展了呢&#xf…

(五十三)大白话基于主键的索引是如何设计的,以及如何根据主键索引查询?

上回我们说了数据页分裂的过程&#xff0c;在你不停的往表里灌入数据的时候&#xff0c;会搞出来一个一个的数据页&#xff0c;如果你的主键不是自增的&#xff0c;他可能会有一个数据行的挪动过程&#xff0c;保证你下一个数据页的主键值都大于上一个数据页的主键值。 在这个…

开启MySQL慢查询以及慢查询日志使用

目录 要开启慢查询&#xff0c;需要关注这几个参数 打开慢查询日志 把日志文件存储在文件中 模拟慢查询 如何寻找并查看慢查询日志 把日志文件存储在表中&#xff1a; 其他关注参数 log_slow_admin_statements Slow_queries 在生产环境中&#xff1a;mysqldumpslow工具分…

问题与解决办法整理一

文章目录1. Linux报错&#xff1a;terminate called after throwing an instance of ‘std::regex_error‘ what(): regex_error;[regex报错,需要将G,GCC都要升级才可以](https://blog.csdn.net/qq_56101220/article/details/127371121)2. ctemplate时遇到连接库失败的问题,将l…

redis(12)持久化操作-RDB

前言 Redis 提供了 2 个不同形式的持久化方式&#xff1a; RDB(Redis DataBase) AOF(Append Of File) RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c; 也就是行话讲的 Snapshot 快照&#xff0c;它恢复时是将快照文件直接读到内存里。 备份是如何执行的 Re…

自动化测试框架/工具选择

单元测试&#xff08;白盒测试&#xff09; XUnit等(一般开发自己做) 接口自动化测试&#xff08;灰盒测试&#xff09; soapUI&#xff0c;优点&#xff1a;上手快 缺点&#xff1a;商业工具 postMan&#xff1a;chrome插件 优点&#xff1a;免费 缺点&#xff1a;用例管理…

深入了解Apache InLong和重点理解Sort的应用

深入了解Apache InLong和重点理解Sort的应用一、产品优势二、产品架构三、模块四、已支持数据节点五、基本概念六、Agent 插件七、Sort插件八、Manager 插件九、DataProxy插件十、重点理解Sort的应用1.支持多种数据节点2.安装部署3.启动 InLong Sort 任务4.MySQL to PostgreSQL…

数据库——3.数据库的设计规范(实用版)

前面也出过一篇文章&#xff0c;那篇文章里面详细介绍了数据库的设计规范&#xff0c;包括方方面面的内容。说实话&#xff0c;其实里面好多东西都是一种习惯的问题&#xff0c;用不用都影响不大&#xff0c;只要知道那个概念&#xff0c;遇见时能理解&#xff0c;需要时会使用…

云原生可观察性工具泛滥的思考

前言 对于采用容器环境和kubernetes的公司来说&#xff0c;可观察性正变得越来越重要。CNCF最近的一份报告发现&#xff0c;72%的受访者使用了多达9种不同的工具来监控他们的云原生环境和应用程序。当然&#xff0c;如果不使用足够的监控工具&#xff0c;可能会导致隐藏的安全…

【链表OJ题(一)】移除链表元素

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录链表OJ题(一)1. 移除…

FreeRTOS入门(06):任务通知

文章目录目的基础说明使用演示作为二进制信号量作为计数信号量作为事件组作为队列或邮箱相关函数总结目的 任务通知&#xff08;TaskNotify&#xff09;是RTOS中相对常用的用于任务间交互的功能&#xff0c;这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章&…

「JVM 高效并发」锁优化

为了线程间更高效的共享数据及解决竞争问题&#xff0c;提高程序执行效率&#xff0c;JDK 6 做了大量锁优化&#xff0c;如适应性自旋&#xff08;Adaptive Spinning&#xff09;、锁消除&#xff08;Lock Elimination&#xff09;、锁膨胀&#xff08;Lock Coarsening&#xf…

2、监控界面设计

【任务描述】本任务要求使用相对布局或约束布局以及相应的控件完成智慧园区监控系统界面开发一、相对布局&#xff08;RelativeLayout&#xff09;概述相对布局&#xff08;RelativeLayout&#xff09;是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。使用相对布…

《机器学习》- 习题解析 - 第一章

《机器学习》- 习题 - 第一章 文章目录《机器学习》- 习题 - 第一章一、示例-计算表1.1中的版本空间二、习题 1 - 计算题目中的版本空间三、单个合取式&析合范式的概念四、习题 2 - 计算题目中假设空间的规模大小一、示例-计算表1.1中的版本空间 首先从概念上理解版本空间…