Skip to content

ntu-infoplat/nolcrawler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 

Repository files navigation

執行需求

  • Python 3,編寫時使用的是 Python 3.4

  • PycURL,用於連線 HTTPS

  • lxml,用於讀取網頁

檔案用途

  • nol_lib.py: 下載和分析 nol 網頁資料

  • nol_app.py: 簡單的命令列前端程式

輸出格式

原則上盡可能模仿 Excel 檔中的欄位,Excel 檔中沒有但是有包含在輸出中的欄位會加上 PRIVATE____ 標示,例如 PRIVATE____ceiba 。時間教室欄位 clsrom 因為原有的 Excel 檔格式不易使用,所以改成 (星期, 節課, 教室) 。注意 nol 上的 資料常常有許多意外狀況,所有欄位都有可能是 null 或是空字串,甚至連星期和節課 都可能空白。也可能有些 nol 頁面裡的課程不滿 15 項,這時候會直接用 {'not_found': True} 表示。

注意節次代號在 104 學年度有修改過,因此 104-1 的 ['8', '9', '10'] 會 對應到 103-2 的 ['7', '8', '9'] 。103 學年度以前並不存在第 10 節課, 如果有出現會自動對應為第 A 節課。

nol_app.py 使用說明

nol_app.py 學期 開始位置 > 輸出檔案
  • 第一個參數是 nol 上的學期名稱,像是 103-2、104-1,省略則表示是目前這學期。

  • 第二個參數是用來指定從第幾筆課程資料開始下載,省略表示從頭開始。

  • 第三個參數可有可無,有加用 pprint 輸出,不加則用 json 輸出。

  • 進度列會顯示在 stderr。

  • 程式的輸出會直接送到 stdout,所以記得要將 stdout 重導向到檔案。

  • 由於 nol 有時候會故障,所以遇到錯誤會不斷重試。如果使用時發現 nol 網站正常,但是 nol_app.py 一直印出重複的錯誤訊息,那應該就是 bug,請記得回報!

nol_lib.py API 說明

from nol_lib import NolCrawler
  • static methods

    • get_semesters(): 取得可用的學期清單。

    • get_default_semester(): 取得目前這學期的名稱。

    • get_course_count("103-2"): 取得這個學期的課程數量。

  • constructor

    • NolCrawler("103-2"): 必須提供學期名稱,有需要可加入 ceiba=False 關閉 CEIBA 網站查詢功能以加快下載速度或是在 CEIBA 關站時使用。

  • member methods

    • get_course(0): 下載一筆課程資料,實際上則是一次下載一整頁的資料並存入內部的 cache,之後取得同一頁的資料會直接從 cache 中取得。

    • flush_cache(0): 清除指定的 cache 資料。

    • flush_cache_all(): 清空整個 cache。

Releases

No releases published

Packages

No packages published

Languages