要取得銀行匯率,需要對網頁原始碼做一些轉換,這裡使用cheerio,因此一開始要先安裝這個套件:
npm install cheerio
匯率方面,採用玉山銀行的匯率網頁。為什麼選擇玉山?因為它的網頁原始碼比較容易抓匯率。
首先取得匯率網頁的全部原始碼:
var request = require("request");
// 玉山銀行匯率
var url = "https://www.esunbank.com.tw/bank/personal/deposit/rate/forex/foreign-exchange-rates";
// 取得網頁資料
request(url, function (error, response, body) {
if (!error) {
console.log(body); // body是網頁原始碼
} else {
console.log("擷取錯誤:" + error);
}
});
玉山銀行的匯率表格叫做inteTable
其中貨幣資料在inteTable下的<tr class="tableContent-light">
現在用cheerio抓出各貨幣的資料:
// 用 cheerio 解析 html 資料
var $ = cheerio.load(body);
// 搜尋各種貨幣的匯率
var queryResult = []
$('.inteTable tr.tableContent-light').each(function(i, elem){
queryResult.push($(this).text().split('\n')); // 把搜尋結果存到array
});
其中".inteTable tr.tableContent-light"的意思是「抓取class名字為inteTable下的tr標籤,這個tr標籤class名字是tableContent-light」如果這時候把queryResult輸出結果如下:
[ [ '\r', ' \r', ' 美元(USD)\r', ' 31.54\r', ' 31.64\r', '\r', ' 31.34\r', ' 31.79\r', ' ' ], ...(下略)
完整程式碼如下:
var request = require("request");
var cheerio = require("cheerio");
// 玉山銀行匯率
var url = "https://www.esunbank.com.tw/bank/personal/deposit/rate/forex/foreign-exchange-rates";
// 取得網頁資料
request(url, function (error, response, body) {
if (!error) {
// 用 cheerio 解析 html 資料
var $ = cheerio.load(body);
// 搜尋各種貨幣的匯率
var queryResult = []
$('.inteTable tr.tableContent-light').each(function(i, elem){
queryResult.push($(this).text().split('\n')); // 把搜尋結果存到array
});
// 整理搜尋結果
var output = []
for(var i=0; i<queryResult.length; i++) {
output.push({
coin: queryResult[i][2].replace(/\s/g, ""), // 貨幣
in: queryResult[i][6].replace(/\s/g, ""), // 現金買入
out: queryResult[i][7].replace(/\s/g, "") // 現金賣出
});
}
console.log(output);
} else {
console.log("擷取錯誤:" + error);
}
});
[ { coin: '美元(USD)', in: '31.34', out: '31.79' }, { coin: '人民幣(CNY)', in: '4.558', out: '4.688' }, { coin: '港幣(HKD)', in: '4.013', out: '4.133' }, { coin: '日圓(JPY)', in: '0.2757', out: '0.2817' }, { coin: '歐元(EUR)', in: '33.26', out: '34.26' }, { coin: '澳幣(AUD)', in: '23.49', out: '24.29' }, { coin: '加拿大幣(CAD)', in: '23.75', out: '24.55' }, { coin: '英鎊(GBP)', in: '38.39', out: '39.39' }, { coin: '南非幣(ZAR)', in: '', out: '' }, { coin: '紐西蘭幣(NZD)', in: '', out: '' }, { coin: '瑞士法郎(CHF)', in: '', out: '' }, { coin: '瑞典幣(SEK)', in: '', out: '' }, { coin: '新加坡幣(SGD)', in: '', out: '' }, { coin: '墨西哥披索(MXN)', in: '', out: '' }, { coin: '泰銖(THB)', in: '', out: '' } ]
如果要取值出來用,以日圓買進為例:
output[3]["in"]
以上就是NodeJS取得銀行匯率的教學。
沒有留言:
張貼留言