台灣彩券最新開獎號碼
目前github專案-lottoCrawler,於2022/06/12可正確爬蟲取得獎號資訊,日後台彩更新頁面可能會導致無法正確取得獎號資訊。
本篇文章說明如何使用Node.js爬蟲,用來取得台灣彩券的開獎號碼
網路上目前查閱到的資料,關於爬蟲,大部份都是使用Python + Beautifulsoup,並且可能會因為網頁的特性,加入一些亂數,或是實際使用瀏覽器核心(即真的去啟動瀏覽器),去取得網頁的資訊,有些比較熱門的資訊,為了避免太多Request要求,造成網頁伺服器的負擔(太多request要求就類似ddos攻擊),所以會加上一些防護措施,不過本篇說明的台彩頁面目前並沒有這些防護措施,所以也不需要特別加入應對的方式。
此次爬蟲需求套件如下:
- request
- cheerio
套件安裝的方式,相信使用過node的人應該都知道使用npm套件管理程式下載,套件安裝之後,還不急著去使用套件去取得想要的資料,首先可以先觀察一下自己需要的資料位於HTML中的哪一個DOM,html程式碼結構為何,是不是有一定的架構規則,釐清自己想要的資料,並且理解結構之後,就可以開始著手程式碼的設計了。
台灣彩券主要固定開獎的項目為:威力彩、大樂透、今彩539、雙贏彩、3星彩、4星彩、38樂合彩、39樂合彩、49樂合彩。如果是剛入門爬蟲取資料,建議可以先由最簡單的3星彩入手。
不過首要的任務是先取得網頁的html程式碼,相關程式如下:
1 | /**取得頁面html */ |
簡單說明上述程式碼:
- 行2,函式「doRequest」,是為使用套件「request」,以取得指定網址(頁)的html。
- 行20,函式「crawlerAll」,是為呼叫doRequest方法,取得html後,後續再使用cheerio來分析,以取得想要的資訊。
※注意,此函式使用async-await的方式來取得資料。 - 行29,利用套件「cheerio」分析html,並且取得指定的資料。
以下為取得3星彩資訊的方法:
台彩最新開獎結果頁面HTML碼(參考來源:https://www.taiwanlottery.com.tw/result_all.htm)
1 | /**取得三星彩資訊 */ |
下述程式碼「$」代表上圖中的「intx01」這個項目,所以經由上述程式碼行3的find,就可以取到text()為「846」這三個數字。
這邊的find方法其實很像jQuery的find,也像CSS的Selector,所以對於前端工程師來說,取得指定資料不算問題,重點在於理解HTML結構,後續取得資料就不成問題了。
目前此程式也有放上github:https://github.com/chihpindu/lottoCrawler
有興趣的人可以下載研究。
使用方式與執行結果如下: