📘
Python web crawler note
  • Introduction
  • 1. 環境安裝與爬蟲的基本
  • 1.1 環境安裝
  • 1.2 IDE設定
  • 1.3 一隻很原始的爬蟲
  • 1.4 幫爬蟲裝煞車
  • 2. 用BeautifuSoup來分析網頁
  • 2.1 BeautifulSoup範例 - 1
  • 2.2 BeautifulSoup說明
  • 2.3 BeautifulSoup範例 - 2
  • 2.4 加入Regular Expression
  • 2.5 Dcard今日十大熱門文章
  • 3. 更多實際的應用
  • 3.1 PTT八卦版今日熱門文章
  • 3.2 Yahoo奇摩電影本週新片
  • 3.3 蘋果日報/自由時報今日焦點
  • 3.4 Google Finance 個股資訊
  • 3.5 Yahoo奇摩字典
  • 4. 基於API的爬蟲
  • 4.1 八卦版鄉民從哪來?
  • 4.2 Facebook Graph API
  • 4.3 imdb電影資訊查詢
  • 4.4 Google Finance API
  • 4.5 台灣證券交易所API
  • 5. 資料儲存
  • 5.1 痴漢爬蟲(PTT表特版下載器)
  • 5.2 儲存成CSV檔案
  • 5.3 儲存至SQLite
  • 6. 不同編碼/文件類型的爬蟲
  • 6.1 非UTF-8編碼的文件
  • 6.2 XML文件
  • 7. 比價爬蟲
  • 7.1 momo購物網爬蟲
  • 7.2 PChome 24h API爬蟲
  • 7.3 比價圖表程式
  • 8. 處理POST請求/登入頁面
  • 8.1 空氣品質監測網
  • 9. 動態網頁爬蟲
  • 9.1 台銀法拍屋資訊查詢
  • 10. 自然語言處理
  • 10.1 歌詞頻率與歌詞雲
Powered by GitBook
On this page

Was this helpful?

4.5 台灣證券交易所API

這個API長得大概像這樣:

http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20160501&stockNo=2330

比較重要的地方是date這個參數, 基本上你給的值一定要是yyyyMMdd的形式, 但是真正作用的只有yyyy與MM, 因為他會把這段request解讀成你想要看stockNo股票在yyyy年MM月的紀錄, 所以dd基本上沒有太大意義, 但卻是不可少的部分.

import requests
import time


TWSE_URL = 'http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json'


def get_web_content(stock_id, current_date):
    resp = requests.get(TWSE_URL + '&date=' + current_date + '&stockNo=' + stock_id)
    if resp.status_code != 200:
        return None
    else:
        return resp.json()


def get_data(stock_id, current_date):
    info = list()
    resp = get_web_content(stock_id, current_date)
    if resp is None:
        return None
    else:
        if resp['data']:
            for data in resp['data']:
                record = {
                    '日期': data[0],
                    '開盤價': data[3],
                    '收盤價': data[6],
                    '成交筆數': data[8]
                }
                info.append(record)
        return info


def main():
    stock_id = '2330'
    current_date = time.strftime('%Y%m%d')
    current_year = time.strftime('%Y')
    current_month = time.strftime('%m')
    print('Processing data for %s %s...' % (current_year, current_month))
    get_data(stock_id, current_date)
    collected_info = get_data(stock_id, current_date)
    for info in collected_info:
        print(info)


if __name__ == '__main__':
    main()

執行結果:

Processing data for 2017 05...
{'日期': '106/05/02', '開盤價': '198.50', '收盤價': '196.50', '成交筆數': '15,718'}
{'日期': '106/05/03', '開盤價': '198.00', '收盤價': '198.00', '成交筆數': '9,259'}
{'日期': '106/05/04', '開盤價': '198.50', '收盤價': '198.00', '成交筆數': '8,787'}
{'日期': '106/05/05', '開盤價': '197.00', '收盤價': '197.50', '成交筆數': '6,078'}
{'日期': '106/05/08', '開盤價': '199.00', '收盤價': '202.50', '成交筆數': '15,190'}
{'日期': '106/05/09', '開盤價': '205.50', '收盤價': '203.50', '成交筆數': '15,467'}
{'日期': '106/05/10', '開盤價': '204.00', '收盤價': '205.50', '成交筆數': '11,094'}
{'日期': '106/05/11', '開盤價': '204.50', '收盤價': '207.50', '成交筆數': '16,478'}
{'日期': '106/05/12', '開盤價': '205.00', '收盤價': '206.00', '成交筆數': '7,515'}
{'日期': '106/05/15', '開盤價': '204.00', '收盤價': '206.00', '成交筆數': '8,141'}
{'日期': '106/05/16', '開盤價': '205.00', '收盤價': '204.50', '成交筆數': '11,066'}
{'日期': '106/05/17', '開盤價': '203.00', '收盤價': '204.00', '成交筆數': '9,323'}
{'日期': '106/05/18', '開盤價': '202.50', '收盤價': '203.50', '成交筆數': '6,983'}
{'日期': '106/05/19', '開盤價': '203.50', '收盤價': '203.00', '成交筆數': '6,014'}
{'日期': '106/05/22', '開盤價': '203.50', '收盤價': '205.00', '成交筆數': '5,278'}
{'日期': '106/05/23', '開盤價': '205.00', '收盤價': '205.00', '成交筆數': '7,003'}
{'日期': '106/05/24', '開盤價': '205.00', '收盤價': '205.50', '成交筆數': '5,141'}
{'日期': '106/05/25', '開盤價': '206.00', '收盤價': '207.00', '成交筆數': '7,406'}
{'日期': '106/05/26', '開盤價': '205.00', '收盤價': '207.00', '成交筆數': '8,059'}

Process finished with exit code 0
Previous4.4 Google Finance APINext5. 資料儲存

Last updated 5 years ago

Was this helpful?

原始碼

點我