2010年9月3日 星期五

不!我真的很懶惰,還是交給 python 抓成交量吧!

研究生找資料常常都會遇到一個問題,就是資料來源本身不連續,就要自己手動抓取處理,但這樣對一個像我一樣懶惰的人來說,一直重複著相同動作是要了研究生的命。

我的論文研究有一部份要抓取大盤(加權指數)日成交量的數據,在證交所網站上是以為單位下載。而我需要遠到 1997 年的資料,這樣我必須下載 175 次,然後再做至少 175 次的資料合併!不!我真的很懶惰,還是交給 python 吧!

以下就是順手寫的小程式抓取資料:
class ggm(年度,儲存檔名):
  • 年度:都是以最新往前到指定的年度為止,包含該年度
  • 儲存檔名:是指最後資料輸出成 csv 檔的檔名

例如:
ggm(1997,'2010-1997-Data')
跑完就會出現 '2010-1997-Data.csv' 檔案,裡面就有相關的大盤日成交量資料。

有需要的就請參考以下程式吧:

不過我還是要說啦!東西做出來就是我賺到了,老闆念我都在處理技術的問題,但我就是喜歡這樣一次抓完的爽度,我就是不喜歡一筆一筆慢慢來,所以 ... 繼續懶惰!

22 則留言 :

  1. Hi~~你好

    我試著 class ggm(1997,'2010-1997-Data'):
    卻出現以下的錯誤

    File "stock.py", line 9, in
    class ggm(1997,'1997'):
    TypeError: Error when calling the metaclass bases
    int() takes at most 2 arguments (3 given)

    請教是委什麼呢??? Thank you

    回覆刪除
  2. 我不太清楚你是怎樣執行的,我是這樣做。
    python
    >>> import stock
    >>> stock.ggm(1997,'1997')
    ...(就開始執行...)

    回覆刪除
    回覆
    1. hi~~

      可以了 Thank you very much

      刪除
    2. Hi
      先謝謝你的無私分享
      但我想加問一下
      我把程式copy複製貼上
      然後 F5開始執行
      可是
      import stock時
      出現
      Traceback (most recent call last):
      File "", line 1, in
      import stock
      ImportError: No module named stock

      這是為什麼呢?
      可以的話 請告訴我 謝謝..

      刪除
    3. 你有把檔案存成 stock.py 嗎?
      要在同一個資料夾底下執行 python

      刪除
    4. 我發覺是我笨了..
      原來直接執行ggm(1997,'2010-1997-Data')
      即可

      抱歉 因為只有python可是卻幾乎沒用過XD
      真的很方便唷
      不過我想題外問一下
      我有辦法在程式裡加一些語法然後變成自動加總某段資料嗎
      像是把某月份全部日成交量加總起來變成月成交量
      換句話說
      關於月成交量這個部分
      您有什麼高見嗎?
      謝謝您的分享 感激不盡

      刪除
  3. 既然 python 語法不熟,我就建議你還是交給 excel 處理就好,或是你有興趣可以參考我另外寫的網站或套件。

    網站 http://grs.toomore.net/
    套件 http://pypi.python.org/pypi/grs

    回覆刪除
  4. 您好,我下載您在http://pypi.python.org/pypi/grs的附件grs-0.2.0-py2.7.egg與grs-0.2.0.tar.gz,並將grs-0.2.0-py2.7.egg覆蓋grs-0.2.0.tar.gz內的檔案,可是在python的GUI打入網站上的指令from grs import stock 卻會發生

    Traceback (most recent call last):
    File "", line 1, in
    from grs import stock
    ImportError: No module named grs

    能否請您幫忙一下,我的信箱u9211008@gmail.com,謝謝.

    回覆刪除
    回覆
    1. 建議用 pip 安裝才不會有路徑問題
      pip install grs

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 您好,我依據網站上建立一個my_new_env資料夾在C槽並且用pip安裝了grs,可是我現在不管在Python的GUI或command line下輸入form grs import stock都會出現
      >>> from grs import stock
      Traceback (most recent call last):
      File "", line 1, in
      ImportError: No module named grs

      不知道是哪邊沒有注意到,請您跟我說一下盲點在哪,謝謝.
      下面為我參考的網站
      http://quest.keitheis.org/post/6713569631/pip-install-on-windows-linux-mac

      刪除
    4. 您好,我目前已經能夠使用您寫的模組了,現在遇到一個問題是我測試某些股票的時候是沒有問題的,可是測試到一檔股票的時候出現錯誤訊息,奇怪的是可顯示出當日的即時股價卻無法顯示均線,這檔股票是3232,以下為錯誤訊息
      Traceback (most recent call last):
      File "", line 1, in
      print g.MA(5)
      File "C:\Python27\lib\site-packages\grs\fetch_data.py", line 188, in MA
      return self.__cal_MA(date, 6)
      File "C:\Python27\lib\site-packages\grs\fetch_data.py", line 165, in __cal_MA
      cont = self.__cal_continue(re)
      File "C:\Python27\lib\site-packages\grs\fetch_data.py", line 184, in __cal_continue
      return cont * diff_data[0]
      IndexError: list index out of range

      刪除
    5. 3232 是上櫃,這只能擷取上市股票 ...

      刪除
  5. 版主您好,
    謝謝您的分享,找了好久,終於有用的資訊
    有個問題想請教,
    如果我只想取得"即時的大盤總成交量" 一個欄位的CSV
    要下什麼http request?
    謝謝您!

    回覆刪除
    回覆
    1. 這個只能抓 "日成交量的數據" ...
      其他的需求可以參考我做的另外一個套件,感謝!
      https://pypi.python.org/pypi/grs

      刪除
  6. 版主您好,
    比方說我用下列url 可以得到即時的台灣50的資訊
    http://mis.tse.com.tw/data/0050.csv
    0050 -0.25 13:30:05 62.9 54.7 ........
    以得到的CSV前幾欄來說, 依序為"股票代號" "目前漲跌" "報價時間" "漲停價" "跌停價"
    但是後面還有一長串,
    每個欄位的各別代表意義要去哪裡查?
    謝謝您

    回覆刪除
  7. Hello,版主您好,
    身為一個新手打算抓證交所的資料從你的這段程式碼開始,下載了python 3.4,然後稍微改一下urllib2的部分。(根據網路資源顯示3.4之後的版本將urllib2跟urllib合併,變成urllib.request) 然後試著跑這段程式碼。

    跑完了,csv檔案有創造出來。但是檔案裡是沒有資料的@@

    錯誤的訊息為:
    "File "D:\Python34\stock.py", line 20, in __init__
    for i in self.fetch_data(daterange):
    _csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)"

    不知道是那兒出了問題了呢?

    回覆刪除
    回覆
    1. 不行吧,這只能在 Python2 底下執行。

      刪除
    2. ooops......,不論如何,謝謝你。

      刪除
  8. 感謝版主的分享, 我是python2新手,能夠這樣抓資料好方便阿~非常感謝

    回覆刪除