• 第二次结对编程


    作业要求 <第二次结对作业:班级成绩表>
    作业目标 <爬取云班课上的数据>
    作业源代码 [pair]https://gitee.com/ender29/pair
    罗童 <211803324>
    许培腾 <211804229>
    预计 实际
    需求分析 5min
    学习时间 5-8h 6-7h
    编码时间 1-2h 2h
    代码量 100-200 203
    运行时间 1.5min

    1. 结对的感受

    罗童(me):本来打算这次我把比较难的登录部分做了,把提取经验部分让他完成,但因为我没用准确获取到每个课堂完成部分的页面(只获取到第一个)所以他接着做时遇到了许多问题,我把这个问题解决后把后面的都做完了,他相信我能完成。

    许培腾:我感觉这次作业难度还好,有比较明显的思路,就是实际操作起来还是会因为一些知识点的不清楚或者遗忘,卡壳,导致编写过程比较久。

    2. 需求分析

      1. 在线获取网页
      2. 全班同学课堂完成部分的经验
      3. 按要求对经验排序,并统计出相应的数据
    

    3. 思路

    ​ 通过htmlunit库解析出xml对象,再通过jsoup解析。htmlunit是无界面浏览器,操作和使用浏览器的逻辑很像,也可以通过选择器进行DOM操作比如登录,获取输入框HtmlForm form = (HtmlForm) page.getByXPath("//form[@class='account-from']").get(0);通过getByXPath()方法获取表单类型的HtmlForm表单对象,通过getInputByName() 分别方法获取HtmlTextInput文本输入框和HtmlPasswordInput密码输入框对象。setValueAttribute()设置你的账户密码。通过选择器获取HtmlButton按钮对象,再通过调用click()方法进入的页面。

    还是通过类似点击的方式进入一个又一个页面。

    解析使用的还是Jsoup,原因是这个库的官方文档只支持英文,功能方法很多,很难有效找到想要的方法,其他有的教程提到的功能也很少。

    分类几个模块,一个模块是返回到活动页面的html对象
    还一个模块就是累加经验值,返回Set集合学生对象的类型。

    4. 难点

    在获取某个课堂完成部分全班经验值后,没有找到返回之前活动页面,也就是上一个页面的相关方法,会导致一直重复爬取该页面,于是又重新获取了活动页面,
    这样就能够获取新的课堂完成部分全班经验值页面。但是有个缺点就是加载时间会很长,相当于每次都是重新加载然后渲染js和配置一些服务。
    * 没有解决的一个问题:在获取经验值时,有些同学的经验值获取不到,测试:单纯获取了
    这个部分的颜色,只要参加了就是绿色,没参加就是灰色。发现某些原网页抓取该部分是绿色,
    但是htmlunit转换成xml解析出来是灰色样式。因为默认设置的score是0,所以这部分同学经验是0。有少部分这种情况。

    4. 效果

      因为那个问题不知道怎么解决,统计出来会有误差。
    

    结果如下(部分):

    参考文献

    5.优化

      感觉运行时间太长了,优化了返回活动页面的代码,不再使用重新请求的方式。通过重新点击的方式返回到活动页面。
    
    优化 之前 现在
    运行速度 1.5min 40s
  • 相关阅读:
    java 计算文件 md5值
    前端项目结构
    路由器下连接路由器教程
    idea 中抽取部分代码
    idea 多行注释 Ctrl shift / 失效问题
    idea Ctrl+shift+F 快捷键失效原因
    Android studio 安装 jrebel for Android 下载不了问题
    利用C#创建和安装一个windows服务
    25条提高Visual Studio编码和调试效率的技巧
    IIS解决 上传文件大小限制
  • 原文地址:https://www.cnblogs.com/ender29/p/13756794.html
Copyright © 2020-2023  润新知