zoukankan      html  css  js  c++  java
  • 结对作业2:班级成绩表

    作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11250
    作业目标 <按照要求编写代码,建仓>
    作业源代码 https://gitee.com/liu-ziwen/pair
    队员1 <范青青211806314>
    队员2 <刘子文211806338>

    我们的编码记录

    代码行数 <填写这份作业要求的链接>
    需求分析时间 1h
    编码时间 3天

    需求分析

    • 分析
      • 我们通过手动设置cookie的爬虫的方式将云班课上的课堂完成模块的经验值爬取下来,根据同学们的经验值排序,同时计算出平均经验值
      • 难点:双排序,一个是经验值的降序,一个是学号的升序
    • 分析步骤
      • 读取解析网页源文件
      • 获取所有学生关于课堂部分url
      • 获取学生信息
      • 把数据写入到score.txt
      • 代码运行完成出结果
    • 优势
      • 由于题目没有要求长期采集我们选择了手动设置cookie的爬虫方式,虽然来说是较为简单的方式但是对于我们也更易上手且具有一定的难度可以得到锻炼。

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

    • 按照老师在班课上发布的资源,学习了cookie相关知识,并手动设置了cookie。

      下面为测试

      		Document document = Jsoup.connect(url)
      				// 手动设置cookies
      				.header("Cookie", cookie).get();
      		//
      		if (document != null) {
      			// 获取课程名称节点
      			Element element = document.select(".color-66").first();
      			if (element == null) {
      				System.out.println("没有找到 .color-66 标签");
      				return;
      			}
      			// 取出课程名称
      			String userName = element.ownText();
      			System.out.println("课程名为:" + userName);
      		} else {
      			System.out.println("出错啦!!!!!");
      		}
      

    • 将所有符合要求的地址都爬取下来

    测试每一个“课堂完成部分”的作业URL地址是否都能找到

    				if (rows_ChildElement.select("span").get(1).toString().contains("课堂完成")) {
    					allurls.add(rows_ChildElement.attr("data-url"));
    					System.out.println(rows_ChildElement.attr("data-url"));
    				}
    

    • 在“homework-item”中含有每个同学该作业的完成情况

    在测试的时候发现列出所有同学的学号时,会有一些不符合的数据(如下图)

    所以在后面的代码中对所有爬取下来的学号又进行了一次筛选,将不符合要求的排除掉

    String str = "211";
    String stuno = baseStuDivs.get(k).child(0).child(1).child(1).text().toString();
    if (stuno.indexOf(str) != -1) {
    							// System.out.println(stuno);
    							Stu stu = new Stu();
    							// 设置学号
    							stu.setStuNo(stuno);
    
    • 筛选分数
      通过测试以及观察页面代码可以看出查找出来的所有分数信息有的不是具体的数字,没有参与该作业的就应该将该作业分数设为0

    							// 计算分数
    							if (stusc.contains("尚无评分")) {
    								stu.setStuScore(0.0);
    							}
    							// 没提交的分数为0
    							else if (stusc.contains("批注")) {
    								stu.setStuScore(0.0);
    							} else {
    								// 设置成绩
    
    								stu.setStuScore(Double.parseDouble(stusc.substring(0, stusc.length() - 2)));
    

    1.爬虫过程中数据只得到单个活动经验值

    2.输出的结果成绩没有累加

    3.输出结果有异常

    之后添加上try...catch解决了

    结对过程

    • 结对感受: 这一次的作业布置下来起初以为最大的难点在于爬虫,但是爬虫解决出来后发现数据分析也是很大的阻碍。不过相比较上一次的合作这一次其实也更加默契了,分工也明确了很多,更理解对方的思维,如果双方方有什么不一样还可以一起讨论最后找到最好的方案。同时我们都觉得代码还是要勤加练习,上学期学的去重呀,配置文件呀敲了半天都不对最后还是花了大量的功夫翻看以前的ppt和作业才又搞明白。
    • 结对评价:
      • 刘子文:觉得又有许多新的东西要学习,而且还用到许多以前的知识,但自己掌握的太不熟练了,还要再次找以前的笔记,有些基础的内容也遗忘了不少。
      • 范青青:以前一个人写作业的时候遇到不会的问题如果解决半天解决不出来就会明天再做,但是子文对问题很有钻研精神,这一点很值得我学习。同时我的代码思维真的还是不太成熟,所以最后探讨的时候发现了自己想法还行但是编程出来的代码不够规范也和别人不太一样。

    结对照片记录

    git记录

    应用到的资料网站

  • 相关阅读:
    博客开通第77天
    guzzlephp使用教程
    Mac下php70memcache安装
    opcache开启和关闭
    php的getimagesize方法详解
    Yii2框架解剖
    AES加密:PHP与Java互通问题
    公司网页监控到的各种不能识别的浏览器userAgent,都是些什么啊
    document.write
    js模版引擎v6注解
  • 原文地址:https://www.cnblogs.com/liuziwen/p/13764265.html
Copyright © 2011-2022 走看看