20220408

今年:用 python 幫我做瑣碎的事

來看我多久會完成...

========================

3/9 洗澡時候突發奇想,覺得平常每天抓股票資料好煩,最近又因為戰爭關係局勢不穩,所以年初到現在都還沒操作過,可是這就跟錢過不去啊!所以立下一個目標:在寫完 python 選股之前,我不去操作股票。感覺我寫完整後,局勢應該也穩定了(三分鐘熱度的個性,有目標要寫下來才能落實啊…)

抓取台股的部份,有試了 twstock 這一款,感覺不是我要的,所以這條線就暫停在這裡了。

後來又想到,我連最基本的清單來源都沒有,所以應該要從清單開始才對。所以用了 BeautifulSoup 去抓資料。首先卡在 selectfind_all 之間,比起來用 select 習慣,我就繼續用下去。接著是怎麼拿到 innerHTML ,要:

select_item.decode_contents()

有了清單後,想把他寫在檔案裡,再去抓每天收盤資料,所以我又看了怎麼讀檔、寫檔的事。隨便在檔案裡寫了「2330 台積電」後讀檔時候就碰到:

UnicodeDecodeError: 'cp950' codec can't decode

這樣的 error ,原來要指定編碼才行:

list_file = open('list.txt', 'r', encoding="utf-8")

03.22 這幾天決定要去抓取 Yahoo Finance 的資料,所以要先把「2330 台積電」寫成 "2330.TW" 才行,這時候套了 regular expression. 到此我覺得每日清單已經告一段落了,已經比之前手動找少了很多時間。

要去抓 yahoo 資料,在看了幾篇文章後,都提醒要增加 headers 才不會被擋住,所以 request 裡要加上 headers 這個值

res = requests.get(url, headers=ua)

Scrape Yahoo! Finance Home Page with Python 這一篇看到一半,我找到我要的資料所包的 script 區塊,可是還不知道怎麼從裡面擷資料出來,所以又卡著了。

後來發現有寫好 yfinance 這一套,剛裝完而已,要來試後面的步驟。

先從 info 下手:

import yfinance as yf

tsmc = yf.Ticker("2330.TW")
print(tsmc.info)

本來以為拿其中的值很簡單的,

print(tsmc.info.dayHigh)

結果完全不是我想的那樣... 這一卡又兩個晚上過去了。後來才想到說:萬一他是字串怎麼辦?所以趕快確認一下,結果是 <class 'dict'> 這種神奇的東西。之前也沒學,都不認得這種 type. 要拿值的話,我現在記這種方法:

tsmc.info["dayHigh"]

如此一來,我就有很多基本值可以用了。(過一陣子再補齊 dictionary ...)

難得有空,多寫一點。我原先挑選有一個條件是: 3MA > 5MA. 這時候想起初始研究裡大家推薦的 pandas. 首先先抓 5 天的值後,建立 DataFrame. 接著直接:

df["Close"].mean()

平均值就算完了,超方便的。

花了幾天在算指標上面,原本是想說找公式然後自己算,可是現在看到公式就暈了... 後來發現大家會推 TA Lib 這一套,可是怎麼裝都會遇到錯誤,這裡又卡了幾天了。因為有看到 source code, 所以打算 build 看看,可是要自己 make, 要多建立 C++ compiler 的環境,然後就去下載 VS 2022 回來。好不容易 nmake 成功,要裝 TA Lib 還是失敗。看來看去是因為我裝 x64 的 python 可是 build 出 x32 的版本,到此放棄了,就用別人的 whl 好了,再來裝都成功,我要的指標也完成了。

接近一個月的時間,完成了我想要做到的事,可是戰爭還沒結束啊...

========================

22.11.02 update

因為電腦重灌的關係,要一步一步找回原本的設定,發現 yfinance 一直裝不成功,說缺少 libxml2. 因為是 C++ 的 library, 所以先裝了 Microsoft Visual C++ 然後在 Archived: Python Extension Packages for Windows - Christoph Gohlke 找到需要的檔案後安裝,接著再安裝 yfinance, 這才成功。

0 comments:

張貼留言