软工作业5:第二次结对作业:班级成绩表

作业要求 作业要求
作业目标 学会使用git进行多人协作同步远程仓库,了解使用java/python的爬虫技术,接触整理爬取数据后的过程
作业源代码 码云仓库
队员1 211806320
队员2 211806345

结对的感受:

  • 队友的角色:轻轻松松的编写代码,也协助了我后期的数据整理
    我的角色:分析理解队友的代码- -,不断恶补知识,并整理数据。
    这次的结对作业让我们更加深刻理解和感受什么是"做中学"。使用java进行网络爬虫算是一个全新的体验,通过使用webmagic框架进行爬虫,在实践中摸索学习框架,完善了自己的学习方法

评价:

  • 我:队友回家后仍然不忘写作业,真是一个好队友!
  • 黄:非常认真细心的一个队友

讨论照片


代码行数 278行
需求分析时间 4h
编码时间 7h

思路:

  • 爬虫
    • 选取哪种爬取方式
      • 在老师发的资源Java 爬虫遇到需要登录的网站,该怎么办?中,提到了手动设置cookie和模拟登陆获取cookie,由于想一劳永逸省去30天一更新cookie的麻烦,而且云班课的登陆也没有验证码相关环节,所以我们就采用了模拟登陆的方法,文章中又提到了jsoup和httpclient两种模拟登陆方法,它们的区别是:jsoup的方法是只要遇到登陆页面就得获取请求,httpclient是只需要请求一次,而webmagic是使用Jsoup作为HTML解析工具,并基于其开发了 解析XPath的工具Xsoup,方便我们定位指定元素的位置,并且整个框架的流程很完整,所以我们最终采用了它来进行爬取网页。
    • 爬取流程
      • ①从云班课初始页面到登录界面
        ②从登录界面进入到自己加入的所有的班课的界面
        ③将进入“java程序高级开发”的请求链接加入到待抓取的队列中
        ④使用Jsoup解析页面信息获取“课堂完成部分”
        • 这里需要对④进行说明:这是完成获取每个课堂完成部分的环节:获取进入每一个“课堂完成部分”的请求链接,并将每个请求链接加入到集合中,然后再将这个集合加入到待抓取队列中,已实现自动抓取每个活动页面,不需要采用for循环的方式来逐个加入每一个课堂完成部分的链接,为后面数据整理提供了极大地方便
    • 数据整理
      • 考虑学生的三种得分情况(已参与已评分,已参与未评分,未参与未评分)
        • 以第一次课堂完成部分的学生名单做学生信息集合的初始化,到第二次乃至最后一次进入课堂完成部分时,直接累加每人的成绩
      • 将累加好的每人的经验值进行排序,并列出最高,最低和平均经验值
        • 遇到的问题:进行排序后,发现每个人学号进行了排序,而每个人的成绩却没有排序,猜测可能是没有一次性完整的将学生对象存入集合(由于经验值需要累加,意味着要不断更新集合中的值)
        • 解决方法:将已经累加完毕的学生信息集合重新一次性的存入另一个集合
      • 将数据写入txt文件中

优化过程

  • 版本迭代:
    • 1.9:初步写出爬虫的流程
      2.0:优化查找学号姓名经验值的xpath路径
      2.1:为爬虫代码添加注释,添加爬取数据后处理数据的代码
      2.2:解决学号排序,经验值却不排序的问题
      2.3:将前期在main方法中存放的配置信息写入配置文件,并生成最后的文件

git记录

参考资料:

http://webmagic.io/docs/zh/

posted @ 2020-10-03 22:34  不断寻找  阅读(227)  评论(3编辑  收藏  举报