iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
1
Software Development

爬蟲始終來自於墮性系列 第 18

日幣匯率訂閱

定義目標

很多朋友常常到日本去玩,換匯肯定都是要精打細算,挑選個良辰吉日匯點低的時候換匯,但常常因為忙碌就會忘記這件事情,所以我們今天來寫個關於匯率的主題。

匯率的換匯每個人都有自己的習慣和眉角,那我們就先定義一下我想換匯的條件,若目前這個匯率是 14 天以來最低點匯率點,那我應該就會行動,若不是,那麼就通知我目前匯率多少就好了。


實際探訪

想到換匯,我第一個就想到臺灣銀行的牌告匯率,接著看到臺灣銀行有提供日幣的歷史價格,我只需要比對這邊資料的最近七天,然後判斷今天是不是這七天的最低點,就能達成我們的目標了。


分解研究

我們會將這隻爬蟲分解成二個動作:

  1. request 歷史價格頁面
  2. 比對七天最低價格

request 歷史價格頁面

單純的 get request,可以很順利的取得資料。不過這邊有個有趣的狀況,因為這個頁面有歷史線圖和歷史價格 table,所以抓取七天資料可以有兩種做法,一個是直接使用歷史線圖,他的資料來源是 js,所以要用 jsdon 來模擬 js 的執行來取得。另一種是從 table 下手,由 dom 爬取資料。

比對七天最低價格

我們這邊選用 dom parser table 來取得資料,那就來驗證一下是否能順利取得,同時試試看今天是不是今天的最低價格。


實作程式碼

getData function

發送 get request 並且將結果丟給 callback。

function getData(callback){
  request('http://rate.bot.com.tw/xrt/quote/ltm/JPY', (err, res, body)=>{
    callback(body)
  })
}

filter 7 day

取得七天的賣出價格,使用 filter 去取出條件為「本行賣出」和七天內的資料。然後再去取得最這七天的最低匯率點,若是等於今天的匯率點,那麼 gotoBackRightNow 就等於 true,反之等於 false。

var rate = $('.rate-content-cash.text-right.print_table-cell')
    .filter((index)=>{
        return index%2 && index<14
    })
    .map((index, obj)=>{
        return $(obj).text()
    })
    .get()
    
var lowest = Math.min(...rate)
var gotoBackRightNow = (lowest == rate[0])? true: false

完整程式碼

const request = require('request');
const cheerio = require('cheerio');

getData((body) => {
  var $ = cheerio.load(body)
  var rate = $('.rate-content-cash.text-right.print_table-cell')
    .filter((index) => {
      return index % 2 && index < 14
    })
    .map((index, obj) => {
      return $(obj).text()
    })
    .get()

  var lowest = Math.min(...rate)
  var gotoBackRightNow = (lowest == rate[0]) ? true : false
  console.log(gotoBackRightNow);
})

function getData(callback) {
  request('http://rate.bot.com.tw/xrt/quote/ltm/JPY', (err, res, body) => {
    callback(body)
  })
}


衍伸應用

除了日幣以外,任何跟匯率有關的都能抓取,像是比特幣、黃金、期貨...等。每個人都能自己去抓取資料用自己的方法做分析,不過在網路上,其實有很多熱心的人已經做好這些 api,有些收費,有些免費,不過免費的大都會有限制,端看你的使用情況和使用量來決定你要用什麼方式來取得這些資料。

對很多網路上的服務來說,其實難的都不是在技術本身,而是在於當你有了這些資料之後,你會怎麼應用?而不同的人應用的方式不同,就會產生不同的成效,也因為如此 open data 才會如此重要。


上一篇
高鐵、台鐵轉乘查詢
下一篇
商城商品爬蟲
系列文
爬蟲始終來自於墮性34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言