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

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1
    作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11250
    作业目标 通过网络爬取云班课的数据
    作业源代码 https://gitee.com/wang-bingwei/pair
    王冰炜 211806342
    徐笑龙 211806354



    预估时间(小时) 实际时间(小时)
    计划
    需求分析 5分钟 5分钟
    具体设计 1 1
    开发
    编码 8 5
    测试 0.5 2
    记录与总结 1 1.5
    合计花费时间 10.5 9.5

    代码行数:315





    1.结对的感受


    徐:此次结对,由于是第二次结对合作编程,一回生两回熟,比第一次合作更加默契了。


    王: 逆境是人生最好的导师;逆境中人,往往受到了环境和逆势的极限考验,深深地领悟了什么叫生杀予夺,什么叫山重水复疑无路,柳暗花明又一村。这是一次紧张的极限编程挑战,带来全新的体验,项目进展速度令人惊喜。




    2.对对方的评价


    徐:“哪里有天才,我是把别人睡觉的工夫都用在写代码上的。”队友王冰炜如是说。强如阿伟,通宵完成了代码,我认为他是个非常认真负责兢兢业业的队友,为他的努力点赞


    王:“感激每一个新的挑战,因为它会锻造你的意志和品格。”队友徐笑龙如是说。共同的项目,共同的难题,可以使人产生忍受一切的力量。为队友不畏艰险迎难而上精神点赞!




    3.需求分析


    • 需求分析

      通过网络爬取云班课上,全班的课堂完成部分的经验值,根据经验值排序,同时计算出平均经验、最低经验、最高经验。最终输出至文本文件score.txt


    • 9月28日

      1. 制定流程,明确有几个步骤;

      1. 与搭档进行短暂沟通,确认思路无误;

      2. 与助教沟通,再次确认思路无误;


    • 9月29日
      1. 推送第一版程序,实现作业要求;
      2. 第一版对一些步骤没有进行封装,可读性不够强,后续继续跟进优化;
      3. 对HttpClient的使用仅停留在能完成作业的水平上,后续要继续学习;
      4. 此次为初试极限编程,还不太适应这种高强度的工作方式,以后可多加训练;

    • 结对照片




    4.记录不会的知识的学习过程,记录修改优化的过程


    1. 初期:针对目标数据进行静态抓取

    经过第一次的编程作业,面对抓取页面特定区域的信息已是手到擒来;故在这一阶段直接上手,保存几个目标页面的html文件至本地,格式化代码后立即进行分析。

    这次作业要筛选的数据有三,它们分别是:

    • 活动页面各章节:课堂完成页面的URL地址

      Elements es1 = document.getElementsByAttributeValue("class", "interaction-rows");
      for (Element element1 : es1) {
          Elements es2 = element1.getElementsByAttributeValue("class", "interaction-row");
          for (Element element2 : es2) {
              if (element2.toString().contains("课堂完成部分")) {
                  //获得某一次课堂完成活动页面的URL
                  String url = element2.attr("data-url");
              }
          }
      }
      
    • 成员页面的个人信息:学号、姓名

      Document document = Jsoup.parse(file, "UTF-8");
      Elements es = document.getElementsByAttributeValue("class", "full-name");
      Elements es2 = document.getElementsByAttributeValue("class", "members-list-data").first().getElementsByAttributeValue("class", "student-no");
      for (int i = 0; i < es.size() - 3; i++) {
          //学生姓名
          String name = es.get(i + 1).text().toString();
          //学生学号
          int number = new Scanner(es2.get(i).text()).nextInt();
      }
      
    • 某一个课堂完成页面的信息:姓名、对应的经验值

      //使用jsoup查找分值并统计
      Document document = Jsoup.parse(file, "UTF-8");
      Elements es = document.getElementsByAttributeValue("class", "homework-item");
      for (int i = 0; i < es.size(); i++) {
          if (!es.get(i).toString().contains("未提交")) {
              //学生姓名
              String name = es.get(i).select("span").get(0).text().toString();
              //多一个判断,是否是"尚无评分"的特殊情况
              if (es.get(i).getElementsByAttributeValue("class", "appraised-box cl").select("span").get(3).toString().contains("尚无评分")) {continue;}
              //学生经验值
              int score = new Scanner(es.get(i).getElementsByAttributeValue("class", "appraised-box cl").select("span").get(3).text()).nextInt();
          } else
              continue;
      }
      

    1. 中期:在eclipse上对前面三个目标数据分别实现查模块化查找功能,数据源采用静态html文件,同时远程推送至仓库

    1. 后期:学习完基础的爬虫知识后决定将项目转移至在IJ上(引入HttpClient的依赖非常方便),整合模块代码,查缺补漏,完成目标。

    1. 过程中遇到的一些问题:

      • 如何“爬取”网页信息?

        使用Java的HTTP协议客户端 HttpClient,即可实现抓取网页数据。

      • 什么是Cookie?它在哪?我能用它做什么?

        每次访问需授权的网址时,带上 Cookie 作为通行证,即可代替输入账号密码;使用Cookie可实现模拟登陆的功能,获得目标网页的源码。

      • 评分情况多变问题

      普通情况1:此时有两个评分,“助教/学生评分” 和 “最终得分”


      普通情况2:此时没有评分,显示未提交


      特殊情况1:此时仅有一个评分,““最终得分”


      特殊情况2:此时两个评分都没有经验值


       使用jsoup筛选时要多加留意,避免筛选逻辑出错
      



    5.最终结果与git记录




    参考资料:

    java下载html页面---把网页内容保存成本地html:

    https://blog.csdn.net/zzq900503/article/details/44035901/

    Java通过httpclient获取cookie模拟登录:

    https://www.cnblogs.com/zeze/p/4953414.html

    HttpClient详细使用示例:

    https://blog.csdn.net/justry_deng/article/details/81042379

    Maven存储库:

    https://mvnrepository.com/

  • 相关阅读:
    ES6 新属性 Symbol
    box-shadow 属性详解
    在vue 中 使用 tinymce编辑器
    var let const 结合作用域 的探讨
    防抖和节流在vue中的应用
    分享几个按钮样式
    队列学习
    栈的学习
    Object—常用的遍历
    从零认识Java Package
  • 原文地址:https://www.cnblogs.com/211806342wbw/p/13747783.html
Copyright © 2011-2022 走看看