第一次个人编程作业:我的分数我做主 (9.10更新截取数据的思路)

第一次个人编程作业:我的分数我做主



博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1
作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11110
作业目标 <[初步使用Git进行源代码管理] [尝试PSP开发流程] [记录整个过程并写总结]>
作业源代码 https://gitee.com/wang-bingwei/personal
学号 <211806342>



1.记录自己的代码行数,需求分析时间,编码时间


预估时间(小时) 实际时间(小时)
计划
需求分析 0.5 0.5
具体设计 0.5 2
开发
编码 1 6
测试 0.5 0.5
记录与总结 2 3
合计花费时间 4.5 12



2.分解需求的思路


  • small.html和all.html作为参数传入Score
  • 使用Jsoup分别截取经验值,并在截取的同时累计
  • 按比例计算输出



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


  1. 如何记录和总结?

    Typora记录过程和总结,后使用Atom进行排版预览,最后发表博客

  2. 如何用Atom进行预览?

    打开Atom编辑器
    快捷键Ctrl+Shift+P,打开命令输入页面
    输入 markdown preview toggle
    实现左边编辑右边预览

  3. 准备工作:

    • Git的操作
    • Markdown的使用
    • Java命名规范和代码格式
  4. 如何导入和读取配置文件?

    https://blog.csdn.net/amosjob/article/details/82747733?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

  5. 如何解析HTML文件?

    https://www.cnblogs.com/youyoui/p/11065923.html

    https://www.jb51.net/article/43485.htm

    https://www.cnblogs.com/sam-uncle/p/10922366.html

  6. 如何使用Jsoup?

    https://blog.csdn.net/zhangboy1234/article/details/38893955

    https://www.open-open.com/jsoup/

    https://developer.ibm.com/zh/articles/j-lo-jsouphtml/

    (此链接由张同学提供,感觉写的特别好故贴出)https://www.jb51.net/article/140545.htm

  7. 如何导入jar包?

    https://blog.csdn.net/qq_37591637/article/details/84563744



以下为9.10更新部分


  1. 在Webstorm中打开html文件和格式混乱,如何对齐代码?

    • centOS 下 webstorm 格式化代码的快捷键:

      	Ctrl + Shift + i
      
    • windows 下 webstorm 格式化代码的快键键

      	Ctrl + Alt + i
      
    • mac 下 webstorm 格式化代码的快捷键

      	Option + Command + i
      

  1. jsoup用法--从元素抽取属性,文本和HTML

    在解析获得一个Document实例对象,并查找到一些元素之后要得在这些元素中的数据

    方法:
    要取得一个属性的值,可以使用Node.attr(String key) 方法
    对于一个元素中的文本,可以使用Element.text()方法
    对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或 Node.outerHtml()方法
    示例:

    String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
    Document doc = Jsoup.parse(html);//解析HTML字符串返回一个Document实现
    Element link = doc.select("a").first();//查找第一个a元素
    String text = doc.body().text(); // "An example link"//取得字符串中的文本
    

10. 截取特定数据的思路

首先在webstorm中打开small.html,一键格式化代码,并分析;

通过观察可以得出要判断的三个信息都在 class="interaction-row" 的div内;

  • 我们要判断三个关键信息是:

    • 题目类型
    • 是否参加
    • 经验值得分

  • 经过简化的目标区域(删除部分信息):
<div class="interaction-row" data-appraise-type="TEACHER">	//i
    <img>
    <div>	//i.1 即 child(1)
        
        <div>	//i.1.1 child(1).child(0)
            <span>已结束</span>
            <span>2020-04-17编程题:数据访问类</span>
        </div>
        
        <div>	//i.1.2 即child(1).child(1)
        </div>
        
        <div>	//i.1.3 即child(1).child(2)
            
            <div>	//i.1.3.1 即child(1).child(2).child(0)
                <span>共 </span>
                <span>5</span>
                <span>人参与</span>
                <span style="margin:0 5px;">|</span>
                <span>2020-04-17</span>
                <span style="margin:0 5px;">|</span>
                <!-- 经验值 START -->
                <!-- 已参与 -->
                <!-- 被评价得分 -->
                <span style="color:#EC6941;">13 经验</span>	// 即child(1).child(2).child(0).select("span").get(6)	
                <!-- 含有互评份额 -->
                <!-- 经验值 END -->
                <!-- 剩余时间 -->
            </div>
            
            <div class="clear">	//i.1.3.2
            </div>
        </div>
    </div>
</div>

  • 由此判断要截取的三个关键信息的所处位置是:

    • 题目类型:在i.1.1 的第二个span内

    • 是否参加:在i.1.3.1内

    • 注:此处调用.toString().contains("已参与")即可判断是否参加活动

    • 经验值得分:在i.1.3.1的第七个span内

有了具体的位置信息就可以开始截取需要的信息了


  • jsoup三个好用的方法:
.child(i);  //查找第i个子元素

.get(i);	//查找第i+1个元素

.select("div[class=interaction-row]");	//查找特定元素

  • 以单个div为例验证截取结果是否正确:


9.9 代码行数:125行(含注释)

9.10 代码行数:156行(含注释)


9.9 总结:一开始一直在原地打转浪费了不少时间:在如何截取字符的方案上犹豫不决,直到参考其他同学的作业后发现采用Jsoup竟如此简单代码效率如此之高,才确定下方案(之前受限于水平,用Jsoup一直达不到目的,困扰了一晚上直到看到别人的代码才茅塞顿开,在此由衷感谢陈同学们和谢同学!)。由此反思,自己的能力水平不堪入目,且写出的代码不够简练,在实现相同目的的方式上也更繁琐。接下来的时间需要更多地复习和练习上学期学的java高级开发课程内容,要尽快弥补上自己的缺点,更熟练地使用java。

9.10 总结 将筛选部分的具体思路写出,但还是觉得不够高效率,接下来的周末可以研究下如何用网络爬虫解决问题

posted @ 2020-09-10 04:28  栩岸  阅读(480)  评论(6编辑  收藏  举报