台灣彩券最新開獎號碼

目前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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**取得頁面html */
const doRequest = (url)=>{
return new Promise((resolve, reject)=>{
request({
url: url,
method: "GET"
}, (error, res, body) => {
// 如果有錯誤訊息,或沒有 body(內容),就 return
if (error || !body) {
reject(error);
}
else{
resolve(body);
}
});
});
}

/**取得所有樂透彩資訊 */
const crawlerAll = async () => {
//台灣彩券-最新開獎結果
url = "https://www.taiwanlottery.com.tw/result_all.htm";

let getBody = async ()=>{
return await doRequest(url);
};

let body = await getBody();
let $ = cheerio.load(body);
}

簡單說明上述程式碼:

  • 行2,函式「doRequest」,是為使用套件「request」,以取得指定網址(頁)的html。
  • 行20,函式「crawlerAll」,是為呼叫doRequest方法,取得html後,後續再使用cheerio來分析,以取得想要的資訊。
    ※注意,此函式使用async-await的方式來取得資料。
  • 行29,利用套件「cheerio」分析html,並且取得指定的資料。

以下為取得3星彩資訊的方法:

台灣彩券3星彩開獎頁HTML

台彩最新開獎結果頁面HTML碼(參考來源:https://www.taiwanlottery.com.tw/result_all.htm

1
2
3
4
5
/**取得三星彩資訊 */
function get3D($){
var result = $.find("table.tableWin tbody tr:eq(4) td:eq(1)");
return result.text().replace(/[\s]/g, "");
}

下述程式碼「$」代表上圖中的「intx01」這個項目,所以經由上述程式碼行3的find,就可以取到text()為「846」這三個數字。

這邊的find方法其實很像jQuery的find,也像CSS的Selector,所以對於前端工程師來說,取得指定資料不算問題,重點在於理解HTML結構,後續取得資料就不成問題了。

目前此程式也有放上github:https://github.com/chihpindu/lottoCrawler

有興趣的人可以下載研究。

使用方式與執行結果如下:

爬蟲專案執行結果