iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

學習如何從交易所獲取實時市場數據

資料表位於網頁何處?
https://www.twse.com.tw/zh/index.html
台灣證券交易我

首先,在證交所首頁上方列點擊「產品與服務」->「證券編碼公告」

那我們今天要試著抓一些網頁上的資料

本國上市證券國際證券辨識號碼一覽表
(https://isin.twse.com.tw/isin/C_public.jsp?strMode=2)

示範如何使用 Python 進行數據串接

爬蟲實作-上市股票清單
Python常見的用法就是 requestsBeautifulSoup 套件

requests:用於請求伺服器回傳資料,正則表達式篩選所需的資料。
beautifulsoup:對特定的目標加以分析、擷取的模組。
常用屬性和方法:
select() 以 CSS 選擇器的方式尋找指定的 標籤。
find_all() 找出物件中所有的指定的標籤
find() 以所在的 標籤位置,尋找第一個找到的 標籤。
find_parents()、find_parent() 以所在的 標籤 位置,尋找父層所有指定的 tag 或第一個找到的 標籤。
find_next_siblings()、find_next_sibling() 以所在的 標籤 位置,尋找同一層後方所有指定的 標籤 或第一個找到的標籤。
find_previous_siblings()、ind_previous_sibling() 以所在的 標籤 位置,尋找同一層前方所有指定的 tag 或第一個找到的標籤。
find_all_next()、find_next() 以所在的 標籤 位置,尋找後方內容裡所有指定的 標籤 或第一個找到的 標籤。
find_all_previous()、find_previous() 所在的 標籤 位置,尋找前方內容裡所有指定的 標籤 或第一個找到的 tag。

首先,我們先 import 這兩個套件:

import **requests** 
# 引入 Beautiful Soup 模組
from bs4 import BeautifulSoup

透過 requests 套件的 get來訪問這個頁面,回傳結果存進 res。

url = "https://isin.twse.com.tw/isin/C_public.jsp?strMode=2" 
res = requests.get(url)

使用BeautifulSoup解析回傳內容,這個表格由tr(表格行)和td(表格列)標籤組成。每個tr標籤代表一行資訊,而每個td標籤則包含了該行的每個單元格資訊。因此,我們首先使用findAll找出所有的tr標籤,然後使用for迴圈逐行提取資料。
我們將每一行tr的資料提取出來,然後再使用td解析,並使用get_text()方法取得每個td標籤中的文本值。這樣我們就能得到包含每個值的列表,程式碼中的table就是我們要抓的表格
然而,我們需要確保table列表中包含的值數量是7,根據網頁上的table 有用的資訊應該有7個值。因此,我們加入了一個資料長度的檢查以過濾掉無用的資訊。

soup = BeautifulSoup(res.text, "lxml") 
tr = soup.findAll('tr')

tds = []
for raw in tr:
     table = [td.get_text() for td in raw.findAll("td")]
     if len(table) == 7:
         tds.append(table)

這樣,我們成功地從表格中提取了所需的資訊,並可以使用pd.DataFrame將其轉換成DataFrame,以便進一步分析和處理。

import pandas as pd 
pd.DataFrame(tds[1:],columns=tds[0])

總結
獲取實時市場數據是投資和交易中不可或缺的一部分。通過使用Python,我們可以輕鬆地訪問不同交易所和數據提供者的API,獲取實時數據並進行進一步的分析。這為投資者提供了更多的信息和洞察,有助於制定更明智的投資決策。無論您是長期投資者還是日常交易者,掌握實時數據串接的技能都將對您的投資過程產生積極的影響。


上一篇
風險管理策略
下一篇
交易執行
系列文
嘗試使用Python與Open Data 打造自動化投資30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言