[Python] 抓取證券編碼一覽表

知道如何抓取個股歷史資料後,接著就是透過股票列表來捉所有股票資料囉。

我們可以到證交所網頁上找到這個「本國上市證券國際證券辨識號碼一覽表」,但因為東西太多了,開網頁的時間可能會有點漫長 (Q),連結如下

http://isin.twse.com.tw/isin/C_public.jsp?strMode=2

爬蟲程式

使用 Python3 結合 Requests 與 BeautifulSoup 套件進行截取。

import requests
from bs4 import BeautifulSoup

def getList():
    url = "http://isin.twse.com.tw/isin/C_public.jsp?strMode=2"
    res = requests.get(url, verify = False)
    soup = BeautifulSoup(res.text, 'html.parser')
    
    table = soup.find("table", {"class" : "h4"})
    c = 0
    for row in table.find_all("tr"):
        data = []
        for col in row.find_all('td'):
            col.attrs = {}
            data.append(col.text.strip().replace('\u3000', ''))
        
        if len(data) == 1:
            pass # title 股票, 上市認購(售)權證, ...
        else:
            print(data)

getList()

程式執行截圖

stock crawler - [Python] 抓取證券編碼一覽表
Jerry
Jerry

樂於分享的軟體工程師,曾在新創與大型科技公司實習,獲得黑客松競賽冠軍,擔任資安研討會講者。長期熱衷於資訊安全、雲端服務、網路行銷等領域,希望將科技知識分享給更多人。內容轉載請來信:jlee58tw@gmail.com

4 則留言

  1. Jerry 您好

    我在Macbook上用Jupyter 可以執行, 但是在測試的Docker環境裡, 陸續有安裝requests, BeautifulSoup module 但仍遇到下面的訊息,可能是抓取資料時,有中文,所以print(data) 會有錯誤,請問這是要先轉編碼再print嗎? 謝謝。

    root@9bf88a7b1c93:/tmp# python3 get_stock_number.py
    Traceback (most recent call last):
    File “get_stock_number.py”, line 25, in
    getList()
    File “get_stock_number.py”, line 23, in getList
    print(data)
    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-10: ordinal not in range(128)

  2. 我照著這個範例執行
    程式到了 data = re.search(r ‘(.*)  (.*)’, col1)
    就會中斷,請問格式哪邊有誤呢?

發表回應