在資料一線通之中尋寶

國家終於有任務俾我

Posted by silau on September 16, 2019

事緣公司的大佬將一份XML文件交給我,並叫我將之轉換成人類可以閱讀的格式,言下之意,即是Excel檔。

當我第一次知道要拍那個洗頭水廣告,啊搞錯對白了,是做這個文件轉換格式的時候,其實我是拒絕的!因為將XML轉換成CSV或者EXCEL檔,技術含量太低。所以我在網上找了一個免費在線工具,再教公司大佬如何幫XML文件做DATA CLEANING,大佬自行鼓搗一會就得到想要的數據了。

先介紹一下這份文件好了,這是由政府資料一線通網站下載的食肆牌照文件,由食物環境衞生署每日更新。資料來源點我

事實上由單份文件抽取數據並不是太有用,例如當中有哪些牌照是最近加入的?有哪些牌照剛剛更新?跟一個月前的數據相比,缺少了哪些牌照?純粹單份文件的數據並不足以解答這些問題。

又回想起以前寫網頁爬蟲的一些經驗,當時爬的是HTML,今次要對付的是XML,而XML比HTML更簡單更規範。

所以就決定以一個小型項目的模式來展開,項目目標:

  1. 在XML文件中抽取特定數據
  2. 設立每日自動爬取文件的crob job機制
  3. 以數據庫儲存得來的資料,要合理設計數據結構及處理foreign key及many-to-many的關係
  4. 提供用戶界面顯示資料,以及回答上面提及的問題

而為了增加可重用性,再加入以下限制:

  • 以模塊化,Class based 的風格來編寫
  • XML的數據抽取模組應該具備擴展性及一般性,以提供處理HTML文件的能力
  • 將資料寫入數據庫的部分應該具有普遍性,以為其他項目助力

結果以上的各項內容都完成了,除了在應付many-to-many的關係上沒有可重用的方案,其他內容的具有一定的可重用性,雖然將來再用的時候少不免要進行重構(Refactoring),但以一個小型項目而言,已可收貨。

成品在這裡(按我)

最後因為這個mini-blog目前只支援最簡單的Rich Text,暫時就不放截圖及代碼了(我不會說其實是因為代碼風格寫得太差),以後有更好的內容再放上來。