作业要求 |
作业要求 |
作业目标 |
学会使用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/