2014Q1 工作心得 (1)

2014 年 Mary Meeker 的網際網路趨勢報告中說明了巨量資料趨勢,其中針對 Data-Generating Consumers 會需要提供最好的使用者界面幫助他們更容易的使用資料,在面對非結構化的資料,我們會透過寫程式的方式將其轉換成結構化的資料,這樣的過程也就是「爬蟲」,不論是影片和音樂的資料,皆有一個共通性那就是原始影音檔的連結網址散佈在網際網路各大影音網站平台之中,例如 Youtube 和 Dailymotion ,此時我們會需要透過程式將網站平台中的相關資料擷取至資料庫之中,技術方面主要是透過 Node.js 搭配 cheerio 套件解釋 HTML 網頁內容中的資料轉換成實用的資訊,接著儲存至 Amazon 架設的後台資料庫之中,最後再以 Node.js 搭配 expressjs 套件透過 API 提供結構化的 JSON 資料給 iPhone 或 Android 等行動裝置直接應用,呈現最好的使用者界面給 Data-Generating Consumers。

可是在此過程中並非想像中的簡單,一開始進行爬蟲時會遭遇編碼的問題,基本上若是英文資料,此時只要需要透過 ASCII 編碼就能夠進行解析,可是若是中文資料,此時就會需要透過 UNICODE 編碼方式進行解析,除此之外還是存在許多編碼的方式需要進行解決,像是簡體中文的網站可能就會需要 GB2312 或 GBK 編碼進行解析。等待編碼問題處理完成,接著需要花些時間觀察所需的資料要如何從網頁結構中取出,此時若發現所需的資料無法按照網頁結構取出,就必需以常用的正規表示式 (Regular Expression) 的方式解析最原始的網頁資料。

當上述問題解決之後接著就需要找出清單列表,根據清單列表中的資訊撰寫排程程式進行資料的擷取,此時若請求網頁內容的次數太頻繁,某些網站就會開始進行阻擋,以致於無法很順利的按照排程時間的規劃進行,就必需針對不同網站進行客製化的調整。當我們將大量資料擷取下來之後,常常會發現部份擷取下來的資料還是需要透過人工編輯的方式進行資料校正,此時就必提供管理平台讓編輯者能更方便的進行資料校正與確保品質。

最後還需要考慮自動更新的問題,就必需針對爬蟲程式進行排程時間的規劃,看似已經能上線正常運作之後,此時會發現某些網頁內容改變真頻繁,以致於剛剛完成的爬蟲程式立即又要根據網頁內容進行改版,總而言之,爬蟲看似簡單的工作,卻是巨量資料分析重要的第一步,且往往會有許多細節要注意。