第二次结对作业

作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11250
作业目标 在线爬取云班课经验值
作业源代码 https://gitee.com/hshzbc/pair
队员1 211806387--黄世辉
队员2 211806424--张家豪
代码行数 130
需求分析时间 1.5h
编码时间+学习时间 10h

分析需求的思路

1.Cookie的设置:

Properties prop = new Properties();
		prop.load(new FileInputStream("./resources/config.properties"));
		// 用connect的方法携带cookies连接到云班课,在线解析
		Document doc = Jsoup.connect(prop.getProperty("url")).header("Cookie", prop.getProperty("cookie")).get();

2.获取云班课中课堂完成部分的每个div,从中得到url:

通过网页源代码分析出每个活动是一个div,div的class名都是"interaction-row",里面的data-url存着活动页面的地址

Elements elements = doc.select("div[class=interaction-row]");
		for (Element p : elements) {
			if (p.text().contains("课堂完成部分")) {
				String url = p.attr("data-url");
				urlNum[un] = url;
				un++;
			}
		}

3.成功进入url后,获取信息,存储信息

  • 姓名所在

  • 学号所在

  • 经验值

  • 创建一个对象数组存储数据

①. Student是一个POJO类,变量有name,id,scorem,包含一个全参构造方法和一个无参构造方法,重写ToString(),equals()方法,实现Comparable接口.

②.在循环中存信息进入Student数组中,根据find()函数返回的值判断该学生是否已存在数组中,存在则叠加经验值,不存在就加入数组中.


③.利用Arrays.sort()方法进行排序

④.io流实现输出txt文件

		File txt = new File("score.txt");
		PrintWriter out = new PrintWriter(new FileWriter(txt));
		String first = "最高经验值为:" + stuList[0].getScore() + "," + "最低经验值为:" + stuList[stuNum - 1].getScore() + ","
				+ "平均经验值为:" + aver / stuNum;
		
		out.print(first + "\r\n");
		for (Student stu : stuList)
			out.print(stu.toString() + "\r\n");
		out.close();

不会的知识的学习过程、记录修改优化的过程

在cookie的设置方面参照了老师提供的范文,用了最简单粗暴的手动设置方法,没有什么问题,存储数据方面一开始是想集合比较合适的,但缺漏确实是比较多,再加上先给自己放了两天假...导致进度有点赶,用了对象数组进行存储.有一个问题是排序的时候,如果数组原本设置过大,会导致后面的数据都是null,当调用排序方法时会出现空指针的错误:,解决方案是在最先获取到班级的成员数,把对象数组的大小设死.在最后的.txt格式输出结果时,明明也添加了转义换行符,输出还是一坨:

查阅相关资料后了解到

流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“/n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"/r/n"序列转成"/n",在写入时把"/n"转成"/r/n" archim 's opinion )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。
如果用文本方式打开文件,会把“0D 0A”自动变换成“/n”来存在内存中。写入的时候反向处理。 而二进制方式打开的话,就不会有这个过程。

最后输出结果:

结对的过程

结对的感受:

在合作学习过程中,小组成员之间只有建立相互信任、团结互助的关系,才能以诚相待、荣辱与共,不计较个人的复兴得失,为一个共同的目标而努力.

对对方的评价:

对我队友的评价:张家豪同学是一个有干劲的人,美中不足的地方他也会向我提出,代码测试帮了团队很大的忙,在过程中起到了领航的作用.

队友对我的评价:黄世辉在结对过程中有计划有目标,为团队提供了明确的方案,虽然缺漏比较多,但也在过程中不断学习.

结对照片:

自我发挥:

本次作业是第一次个人编程作业的提升,但在选取页面元素时很大一部分可以沿用上次的方法,对上次用到的jsoup方法进行了巩固.过程中也发现了许多不足:集合的使用存在很大的缺漏,文件io流部分的基础也几乎为0,一些java的接口类也不是很熟悉,基础还是太薄弱,慢慢恶补吧!

参考资料:

1.获取html中包含的url:https://www.it1352.com/1810076.html

2.cookie的设置:https://www.cnblogs.com/jamaler/p/11645569.html

3.获取页面元素的方法:https://www.open-open.com/jsoup/

4.\n不换行的问题:https://zhidao.baidu.com/question/1500715744985610499.html

posted @ 2020-10-04 01:52  頂不住了  阅读(234)  评论(2编辑  收藏  举报