(Python網路爬蟲)爬取台銀上一個營業日歷史匯率

本篇將使用pandas.read_html()函式,實作爬取台銀上一個營業日匯率的網路爬蟲。
可用Google Colab線上實作,不需安裝Python與套件。

台銀牌告/歷史匯率網址

No.類別URL
1歷史匯率-上一個營業日https://rate.bot.com.tw/xrt/all/day
2歷史匯率-某一個營業日https://rate.bot.com.tw/xrt/all/yyyy-mm-dd
3牌告匯率https://rate.bot.com.tw/xrt

上表為台銀各類匯率URL,視需求使用,此篇是以爬取「上一個營業日歷史匯率」為實作案例,「歷史匯率」與「牌告匯率」爬取回來的內容不太一樣,請視請狀自行修改。

爬取匯率資料

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
import numpy as np

# 歷史匯率-上一個營業日 URL
url = 'https://rate.bot.com.tw/xrt/all/day'

# 讀取網頁
bot_data = pd.read_html(url)

# 匯率資料為爬取回來的網頁資料第一個表格
df = bot_data[0]

# 將column從二維轉為一維
df.columns = [' '.join(col).strip() for col in df.columns.values]

# 刪除dataframe最後三欄不需要的資料
df.drop(columns=df.columns[-3:], axis=1, inplace=True)

# 重新命名column name
df.columns = ['幣別', '現金匯率買入', '現金匯率賣出', '即期匯率買入', '即期匯率賣出']

# 將幣別欄內容轉為幣別碼,從第一個括號()中的幣別碼取出,例如: "美金 (USD) 美金 (USD)" => "USD"
df['幣別'] = df['幣別'].apply(lambda x: x[x.find("(")+1:x.find(")")])

整理後df內容如下圖

匯出成CSV或EXCEL檔案

若要匯出CSV檔:

1
2
3
4
5
# 不保留index和column,加上參數index=None, columns=None
df.to_csv('exrate.csv', index=None, columns=None, encoding='utf_8_sig')

# 保留index和columns,加上encoding='utf_8_sig'避免產生亂碼
df.to_csv('exrate.csv', encoding='utf_8_sig')

若要匯出excel檔:

1
2
3
4
5
6
7
8
9
10
# 將'-'轉換為NaN
df = df.replace('-', np.nan)

# 將匯率欄位轉換為數值格式
df[['現金匯率買入', '現金匯率賣出', '即期匯率買入', '即期匯率賣出']] = df[['現金匯率買入', '現金匯率賣出', '即期匯率買入', '即期匯率賣出']].apply(pd.to_numeric, errors='ignore')

##### 上面兩個步驟,用途是事先處理資料格式,匯出至excel檔,各個cell都已經是數值格式

# to_excel需安裝openpyxl
df.to_excel("ExchangeRate.xlsx",sheet_name='Sheet_name_1')