跳到主要內容區
 
 

www.com.tw 資料轉換匯出程式

簡介

交叉查榜::落點分析 www.com.tw』是一個公開提供去識別化後的各學年度各大專院校的繁星、學測個人申請、分科測驗等榜單資料與交叉查榜的網站,不過網站上的資料除了經過去識別化程序部份遮蔽了應試證號碼與考生姓名以外,還使用了許多方式來阻礙直接將網頁中的資料轉存到 Excel 試算表中:

  1. 使用 Cloudflare 的機器人管理功能做網路爬蟲偵測與阻擋
  2. 正、備取資訊以及部份遮蔽後的應試號碼與學生姓名使用圖片呈現,並且以 data URI 的方式編碼後直接內嵌在頁面 HTML 中

www.com.tw 資料轉換匯出程式」是一個針對上述第 2 點做處理,使用 Node.js 寫成的命令列工具程式,功能是能把由 www.com.tw 的「學測查榜」與「大學繁星」兩個項目中的目標頁面 HTML 原始碼檔案,轉換成 XLSX 格式的 Excel 檔案。

www.com.tw 資料轉換匯出程式主要利用了以下幾個 Node.js 的套件:

  • jsdom - jsdom 模擬了大多數的 DOM API,主要是用來解析 HTML 文件的內容。
  • exceljs - exceljs 是一個純 JavaScript 實作的 Excel 工作簿管理員,可以用來讀取、輸出、操作 XLSX 工作簿。

其餘還使用了一些輔助性的套件如 data-uri-to-bufferjimp 等等。

www.com.tw 除了使用 Cloudflare JS Challenge 防堵爬蟲程式以外,還把一些部分的資訊以圖檔 data URI 的方式內嵌在頁面上。理論上要解析這些部分的資料,需要使用到 OCR 辨識,但因為使用開源的 Tesseract OCR 4/5 測試後發現辨識率不穩定且偏低,因此本程式並沒有做 OCR,而是對正、備取序這樣的重複性固定內容建立對照表,用對照表「轉換」圖檔成對應的文字。不過現階段這個對照表並不完整,所以轉換有可能會有遺漏,殘留 HTML 標籤在檔案中。

會使用 Node.js 來撰寫這個轉換程式的原因除了因為比較熟悉以外,還有 JavaScript 本身就是網頁用的程式語言,因此拿來做網頁內容的解析會比較方便。另外 Node.js 在主要的作業系統平台上都有,所以用 Node.js 寫的程式就比較容易可以在各個平台上執行,比較不會被綁定在某個特定的平台上。

目前這個程式只能算是 PoC (Proof-of-Concept 概念驗證) 實作而已,還有相當多的改進空間。

 

下載

  • 0.2.1 版
    MD5: 00c68798fb88dd20a41427b97640c0e7
    SHA256: 7a3f7dbf7d4e8ae18ec5cdc7c62195f18b3f36784c1e855439ac05e4571b834a
  • 0.2.0 版
    MD5: 1025c52e63e3c726b4d81b01ed6cccad
    SHA256: e966559e991025639873567d903337610a4b87f7f0b95113f8ed80f160ffe731
  • 0.1.1 版
    MD5: 8f46c0a35b03bb7f6a827bf102edf0af
    SHA256: c62297cc7736c47501c7bc25e9f74341d9fc3d57ed7c7c755855fb90743654cc
  • 0.1.0 版
    MD5: 0b7b375a97c28573895d4e4ebca7b851
    SHA256: 360e9d124d25ba805ab84b223a0519e0c882039b1ad3f41171c654dc4e1731fc
  • 0.0.2 版
    MD5: 36bb509f6338cc20973c88978410c071
    SHA256: 7622555e689f0fc71659cd64850ffc26c4d0cb2ba9a917e93f1e653c61befa1a

 

Colab 記事本

由於「www.com.tw 資料轉換匯出程式」是個命令列工具程式,根據經驗來看,命令列操作對許多人來說會非常不適應,因此就借用了 Google Colab 系統,寫了個簡單的使用範例記事本,一方面透過記事本「www.com.tw 資料轉換程式使用範例.ipynb」來簡單展示 Node.js 環境準備、程式壓縮檔下載、程式使用方式等步驟,並且提供一個簡易的類圖形界面,讓使用者也可以透過執行該記事本來上傳 www.com.tw 目標頁面的 HTML 原始碼檔案,然後透過程式轉換成 XLSX 檔案後再下載回來。記事本的連結如下:

單純要開啟記事本的話,只要點擊以上連結即可,但如果要執行該記事本,則必須要登入 Google 帳號以便能連線到 Google 提供的執行階段 (runtime) 的虛擬機器。

 

常見問答集