程式語言-股票爬蟲(含0050)
難易程度★★
Published in
4 min readDec 14, 2018
此篇文章使用 Anaconda的 Jupyter寫程式,測試環境 python3.6,事先完成 pandas 及 numpy套件安裝
前一篇 程式語言-股票爬蟲 裡用短短幾行就把台股當日資料抓下來,但ETF台灣 50(0050) 居然不見了
這個問題出在當初0050前面有個 '=' 號,被我們篩選掉了
有鑑於此,我們決定慢慢解析dataframe裡的資料,看看如何試圖找回
上次我們分解原碼為aa, bb, cc, dd, ee等五部分,來看一下其個別的資料型態
跟不上進度請回 程式語言-股票爬蟲 課程先看一下
結果為
aa:字典 bb:列表 cc:列表 dd:字串 ee:系統空間
要把 '=' 拿掉,最常見的寫法就是用replace(取代)的方式,文件寫法如下
str.replace(old, new[, max])
所以要用replace,前面一定要是string(字串)
也就是dd的型態可以做這個動作
我們把程式碼做個修改,cc後面的條件刪掉
cc = [i.translate({ord(c): None for c in ‘ ‘})
for i in r.text.split(‘\n’)
if len(i.split(‘“,’)) == 17 and i[0] != '=']
改成這樣
cc = [i.translate({ord(c): None for c in ‘ ‘})
for i in r.text.split(‘\n’)
if len(i.split(‘“,’)) == 17]
dd已經變成string的型式了,但0050前面還是有 '='
dd = "\n".join(cc)
type(dd)
此時,套入公式,'=' 不見了
dd = "\n".join(cc).replace('=', '')
後面的程序一樣,我就不再贅述
原始碼如下
import requests
from io import StringIO
import pandas as pd
import numpy as npdatestr = '20181212'r = requests.post('http://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=' + datestr + '&type=ALL')df = pd.read_csv(StringIO("\n".join([i.translate({ord(c): None for c in ' '})
for i in r.text.split('\n')
if len(i.split('",')) == 17]).replace('=', '')), header=0)df.head()
課後補充
可以看到上面的表格有一些無用的資料,例如 '漲跌(+/-)' 跟 'Unnamed: 16'
要如何刪去呢??
用drop(刪除)可以解決這個問題
若要刪除一欄(column),須設定dataframe的軸為axis=1
補充說明:欄 (axis = 1) , 列 (axis = 0)
df.drop(['漲跌(+/-)', 'Unnamed: 16'], axis=1).head()
出來的效果一樣~~而且還含0050~~(灑花)
這次的教學教了
- 優化程式
- replace的用法
- drop的用法
- axis的設定