雅虎財經取數-excel vba VS python

年前,有這麼個問題,需要把yahoo finance 網站上600000這支的股票每天收盤價格記錄並下載下來。

剛開始是想的用excel內置數據獲取加excel vba實現。
我花了一個小時的時間錄宏,
大致就是在打開excel之後,
定時去從網站獲取數據粘貼到另外的sheet頁裏邊,
基本實現了功能。
代碼如下:
<pre name="code" class="vb">Sub Macro2()
'
' Macro2 Macro
'
'
Dim 主菜單欄 As CommandBar
         On Error Resume Next
         Application.CommandBars("我的主菜單").Delete
      Set 主菜單欄 = Application.CommandBars.Add
        With 主菜單欄
              .Visible = True
              .Name = "我的主菜單"
              .Position = msoBarTop
        End With
        '菜單恢復
        '
        DoEvents

    Sheets("網站下載").Select
    Range("A2:G2").Select
    Selection.Copy
    Sheets("數據表").Select
    Range("A4180").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A4179").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A4180").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWindow.ScrollRow = 4142
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 1
    Rows("2:2").Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 4126
    ActiveWindow.ScrollRow = 4147
    Range("H4179").Select
     Application.OnTime Now + TimeValue("09:30:00"), "Macro1"
    '定時每10秒執行一次,直到11點13分
    '

End Sub
*********************************************************** 
Sub doevent()
Dim 主菜單欄 As CommandBar
         On Error Resume Next
         Application.CommandBars("我的主菜單").Delete
      Set 主菜單欄 = Application.CommandBars.Add
        With 主菜單欄
              .Visible = True
              .Name = "我的主菜單"
              .Position = msoBarTop
        End With
        '菜單恢復
        '

         DoEvents
 
If Sheets("網站下載").Range("A2").Value = Sheets("數據表").Range("A4179").Value Then Exit Sub Else Application.OnTime Now, "Macro2"
 '比較數據,如果相同則退出
        '
   End Sub



************************************************************************** 
後來覺得這個方法不太好玩。
就換了python2.7。 
簡單說就是利用 urllib庫去取數然後再保存,
還挺快。畫圖就比較醜了,跟matlab一樣。 
###################取數######################
import urllib
url = 'http://chart.finance.yahoo.com/table.csv?'
url +='s=600000.SS'
url += '&a=7&b=4&c=2000' #開始時間
url +='&d=2&e=16&f=2016'#結束時間
url +='&g=d&ignore=.csv'
#params=urllib.urlencode({})
connect =urllib.urlopen(url)
data = connect.read()
#print data
urllib.urlretrieve(url,'./msft.csv')


###################取數######################

####################繪圖##################
import numpy as np
import pandas as pd

url = 'http://chart.finance.yahoo.com/table.csv?'
url +='s=600000.SS'
url += '&a=7&b=4&c=2000' #開始時間
url +='&d=2&e=16&f=2016'#結束時間
url +='&g=d&ignore=.csv'

data = pd.read_csv(url, parse_dates=['Date'])
data.plot(x='Date',y='Close')


####################繪圖##################
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章