第一次個人編程作業:我的分數我做主 (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 總結 將篩選部分的具體思路寫出,但還是覺得不夠高效率,接下來的周末可以研究下如何用網絡爬蟲解決問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM