当前位置: 首页 > news >正文

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

Java爬取赛事网站


在这里插入图片描述


Java爬取赛事网站

  • Java爬取赛事网站
    • 参与社区的问题回答
    • Gitcode项目地址
    • PSP表格
    • 解题思路描述
      • 问题
    • 接口设计和实现过程
      • 编写中的测试
    • 关键代码展示
    • 性能改进
    • 单元测试
    • 异常处理
    • 心路历程与收获


参与社区的问题回答

问题回答
这个作业属于哪个课程软件工程-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用例

列举:

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

    @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


异常处理

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

FileNotFoundException

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

UnsupportedEncodingException

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

IOException


心路历程与收获

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

在这里插入图片描述

相关文章:

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

Java爬取赛事网站 Java爬取赛事网站Java爬取赛事网站参与社区的问题回答Gitcode项目地址PSP表格解题思路描述问题接口设计和实现过程编写中的测试关键代码展示性能改进单元测试异常处理心路历程与收获参与社区的问题回答 问题回答这个作业属于哪个课程软件工程-23年春季学期这…...

redis主从复制原理

在 Redis 中&#xff0c;我们可以通过 SLAVEOF 命令或者 slaveof 选项&#xff0c;让一个服务器去复制另一个服务器&#xff0c;被复制的服务器称为“主服务器”&#xff0c;发起复制的服务器称为“从服务器”&#xff0c;由两种服务器组成的模式称为“主从复制”。 主从复制原…...

buu刷题(第一周)

目录 [DDCTF 2019]homebrew event loop action:trigger_event%23;action:buy;5%23action:get_flag; [CISCN2019 华东南赛区]Web4 [RootersCTF2019]babyWeb [GWCTF 2019]mypassword [NESTCTF 2019]Love Math 2 [BSidesCF 2019]Pick Tac Toe [RootersCTF2019]ImgXweb [SW…...

算法训练营 day62 单调栈 每日温度 下一个更大元素 I

算法训练营 day62 单调栈 每日温度 下一个更大元素 I 每日温度 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c…...

ChIP-seq 分析:Peak 注释与可视化(9)

1. 基因注释 到目前为止&#xff0c;我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义&#xff0c;转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定&#xff0c;因此我们通常会通过一组简单的规则来注释基因的峰&#xff1a; 如果峰与…...

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例 基本步骤: 配置IO板分配IO信号这里以DeviceNet总线的DSQC652为例进行说明: 配置IO板的基本步骤:  配置IO板的型号  连接到总线  配置IO板的地址 (1台机器人可以配置多个IO板连接到DeviceNet总线,为了让机…...

2023 年网络安全漏洞的主要原因

​  网络安全漏洞已经并将继续成为企业面临的主要问题。因此&#xff0c;对于企业领导者来说&#xff0c;了解这些违规行为的原因至关重要&#xff0c;这样他们才能更好地保护他们的数据。 在这篇博文中&#xff0c;我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…...

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 34. 二叉树中和为某一值的路径 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节…...

2023前端vue面试题(边面边更)

Vue中key的作用 vue 中 key 值的作用可以分为两种情况来考虑&#xff1a; 第一种情况是 v-if 中使用 key。由于 Vue 会尽可能高效地渲染元素&#xff0c;通常会复用已有元素而不是从头开始渲染。因此当使用 v-if 来实现元素切换的时候&#xff0c;如果切换前后含有相同类型的…...

webpack配置完全指南

前言 对于入门选手来讲&#xff0c;webpack 配置项很多很重&#xff0c;如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单&#xff0c;基础的配置可以分为以下几个方面&#xff1a; entry 、 output 、 mode 、 resolve …...

juju创建lxd容器时如何使用本地镜像(by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-03-01 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 没有外网&#xff0c;所以配置了一个local custom镜像库&#xff0c;也使用了container-image-meta…...

后端程序员学习前端开发之第一步环境搭建

一、安装 Node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。Node.js官网 二、安装 npm 镜像 因为 npm 是国外的&#xff0c;所以使用起来速度比较慢。我们这里使用了淘宝的 cnpm 镜像安装 vue。使用淘宝的 cnpm 命令管理工具代替默认的 npm 管理工具。 进入c…...

【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库

前提&#xff1a;Flask使用SQLAlchemy数据库 本质&#xff1a;依赖包版本不匹配 问题1&#xff1a;报错RuntimeError&#xff1a;working outside of application context. 运行程序报错&#xff0c;如下错误&#xff1a; 原因&#xff1a;flask-sqlalchemy 版本过高导致&am…...

自动化测试难点案例分析,其实自动化你用错方向还不如不用

随着国内企业软件开发及测试水平的提升&#xff0c;许多企业开始尝试开展自动化测试的应用&#xff0c;以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍&#xff0c;但国内许多企业对于软件自动化测试的理解还停留在表面上&#xff0c;没有深入的理解到企业…...

866363-70-4,N3-C5-NHS ester,叠氮-C5-NHS 主要物理性质分享

●外观以及性质&#xff1a;Azido-Aca-NHS淡黄色或无色油状&#xff0c;叠氮化物可以与炔烃、DBCO和BCN进行铜催化的点击化学反应。NHS酯可以与胺基反应&#xff0c;形成稳定的酰胺键。●中文名&#xff1a;叠氮-C5-NHS ester&#xff0c;6-叠氮己酸活性酯●英文名&#xff1a;…...

字符流定义及如何深入理解字符流的编码

IputSrem类和OupuSrem类在读写文件时操作的都是字节&#xff0c;如果希望在程序中操作字符&#xff0c;使用这两个类就不太方便&#xff0c;为此JDK提供了字符流。同字节流样&#xff0c;字符流也有两个抽象的顶级父类&#xff0c;分别是Reader和Writer其中&#xff0c;Reader是…...

什么是pod类型

很久很久以前&#xff0c;C 语言统一了江湖。几乎所有的系统底层都是用 C 写的&#xff0c;当时定义的基本数据类型有 int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据&#xff0c;编译器都可以正确的把它解…...

2023年中小企业实施智能制造的建议

智能制造的载体是制造系统&#xff0c;制造系统从微观到宏观有不同的层次&#xff0c;主要包括制造装备、制造单元、制造车间&#xff08;工厂&#xff09;、制造企业和企业生态等。随着智能制造的深入推进&#xff0c;未来智能制造将向以下五个方向发展。 &#xff08;一&…...

【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 1. 题目介绍&#xff08;19. 正则表达式匹配&#xff09; 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符&#xff0c;而’*表示它前面的字符可以出现任意…...

linux和windows中安装emqx消息服务器

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号雄雄的小课堂 现在是&#xff1a;2023年3月1日21:53:55 前言 最近几天看了下mqtt&#xff0c;通过不断的搜索资料&#xff0c;也将mqtt集成到项目中&#xff0c;跑了个demo运行&#xff0c;和预想中的差不多&#x…...

Audio Pixel Studio生产环境部署:Nginx反向代理+HTTPS安全访问配置详解

Audio Pixel Studio生产环境部署&#xff1a;Nginx反向代理HTTPS安全访问配置详解 1. 项目概述与部署需求 Audio Pixel Studio作为一款基于Streamlit的轻量级音频处理Web应用&#xff0c;在生产环境部署时需要解决两个核心问题&#xff1a; 性能优化&#xff1a;原生Streaml…...

Pi0视觉-语言-动作模型企业应用:低成本具身智能开发平台构建方案

Pi0视觉-语言-动作模型企业应用&#xff1a;低成本具身智能开发平台构建方案 想象一下&#xff0c;你是一家小型机器人公司的技术负责人&#xff0c;老板给你下达了一个任务&#xff1a;开发一个能理解自然语言指令、观察环境并控制机械臂完成任务的智能系统。预算有限&#x…...

0620-输液控制(固定阀值)-系统设计(51+1602+AD0832+U2003+KEY4)

功能描述 1、采用51单片机作为主控芯片&#xff1b; 2、采用光电传感器检测点滴滴速&#xff1b; 3、通过电机调整吊瓶高度以控制滴速&#xff1b; 4、当液位小于3cm时进行报警&#xff1b; 5、采用1602显示当前滴速、设置滴速、液位&#xff1b; 电路设计 采用Altium Desig…...

Docker 27正式版工业部署实战指南:从CI/CD流水线到OT网络隔离的7大关键配置

第一章&#xff1a;Docker 27工业部署的演进逻辑与核心变革Docker 27并非官方版本号&#xff08;Docker CE 最新稳定版为 26.x 系列&#xff09;&#xff0c;但“Docker 27”在工业界已成为一种隐喻性代称——特指以 Docker Engine v24.0 为基底、深度整合 BuildKit、Rootless …...

MySQL列转行避坑指南:为什么你的UNION ALL结果不对?

MySQL列转行实战避坑&#xff1a;UNION ALL的隐秘陷阱与高阶解法 当你需要在MySQL中将学生成绩表的列数据&#xff08;语文、数学、物理&#xff09;转换为行数据时&#xff0c;UNION ALL似乎是直觉选择。但实际执行后&#xff0c;结果集的行数可能超出预期3倍&#xff0c;排序…...

Win10系统下Pybluez蓝牙通信模块的Python安装避坑指南

1. Pybluez简介与Win10环境准备 Pybluez是Python语言中用于蓝牙通信的核心模块&#xff0c;它封装了底层蓝牙协议栈的复杂操作&#xff0c;让开发者可以用简单的API实现设备发现、数据传输等功能。在智能硬件开发、物联网项目中尤为常见。但很多开发者在Windows 10系统上安装时…...

Navicat太贵?这3款免费数据库工具帮你省下每一分钱(附详细配置指南)

三款免费数据库管理工具深度评测与实战指南 在数据库管理领域&#xff0c;专业工具的选择往往直接影响开发效率与工作流程。对于中小团队或个人开发者而言&#xff0c;如何在预算有限的情况下获得高效可靠的数据库管理体验&#xff1f;本文将深入剖析三款完全免费的替代方案—…...

散点图进阶玩法:用颜色+大小+形状同时展示5个维度的数据

散点图高阶可视化&#xff1a;5维度数据融合呈现的艺术 当我们需要在单一图表中同时展示五个维度的数据关系时&#xff0c;传统二维散点图就显得力不从心了。本文将深入探讨如何通过颜色映射、大小比例和形状区分这三种视觉编码技术&#xff0c;在ECharts中实现多维数据的优雅呈…...

擎策·知海全球专利数据库 检索赋能创新 让每一份研发投入都有价值

科技创新的价值&#xff0c;在于突破与落地&#xff0c;而无效研发、方向偏差&#xff0c;往往让大量研发投入付诸东流。对于企业研发人员、高校科研人员、发明人等各类科技创新者而言&#xff0c;一款专业、实用的专利数据库&#xff0c;不仅是检索工具&#xff0c;更是规避研…...

Django 学习 Part 3: 视图与模板系统

本教程基于 Django 6.0 官方文档&#xff0c;承接第二部分的数据库模型&#xff0c;深入讲解 Django 的视图&#xff08;Views&#xff09;和模板系统&#xff08;Templates&#xff09;。 一、什么是视图&#xff1f; 在 Django 中&#xff0c;视图&#xff08;View&#xff…...