RでYahooファイナンスを取得するモジュール、RFinanceYJを改造し使っていたのですが、あまりの遅さに閉口してしまいました。丸一日掛けても14年分の日次株価は1000銘柄程度しか撮れていません。やり方はこの辺りにまとめています。
http://d.hatena.ne.jp/anagotan/searchdiary?word=%2A%5BR%5D
RaspberryPiを手に入れたこともあり、pythonで書き直してみました。pythonは2.7です
master.py
マスターを取得します
#!/bin/env python
# coding:utf-8
import urllib
import urllib2
from lxml import etree
import time
def get_stockmaster(hira):
p=1
ret="dummy"
ss=""
while(ret!=""):
ret,plen=get_stockmaster_page(hira,p)
#print ret
if ret != "":
ss=ss+ret
p=p+1
return ss
def get_stockmaster_page(hira,p):
hira=hira.encode('utf-8')
url="http://stocks.finance.yahoo.co.jp/stocks/qi/?%s"
params={"js":hira,"p":p}
data=urllib.urlencode(params)
#print data
res=urllib.urlopen(url % data)
page=res.read()
root=etree.fromstring(page,etree.HTMLParser())
elem=root.xpath("//a[contains(@href,'/stocks/detail')]")
i=0
ret=""
for ele in elem:
if ele.text != None:
if i%3==0:
ret=ret+ele.text+"\t"
if i%3==1:
ret=ret+ele.text.encode('utf-8')+"\n"
i=i+1
time.sleep(1)
return ret,len(elem)
def get_stockmasterall():
hira=u"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよわ"
size=len(hira)
ss=""
for i in range(0,size):
print hira[i:i+1]
#print i
ss=ss+get_stockmaster(hira[i:i+1])
f=open("data/master.txt","w")
f.write(ss)
f.close()
if __name__ == '__main__':
get_stockmasterall()
hist.py
時系列データを取得します
#!/bin/env python
# coding:utf-8
import urllib
import urllib2
from lxml import etree
import time
def get_stockdata(code,sy,sm,sd,ey,em,ed,tm):
p=1
plen=53
ss=""
while(plen>=53):
ret,plen=get_stockdata_page(code,sy,sm,sd,ey,em,ed,tm,p)
ss=ss+ret
p=p+1
f=open("data/"+code+".txt","w")
f.write(ss)
f.close()
def get_stockdata_page(code,sy,sm,sd,ey,em,ed,tm,p):
url="http://info.finance.yahoo.co.jp/history/?%s"
params={"code":code,"sy":sy,"sm":sm,"sd":sd,"ey":ey,"em":em,"ed":ed,"tm":tm,"p":p}
data=urllib.urlencode(params)
#print data
res=urllib.urlopen(url % data)
page=res.read()
root=etree.fromstring(page,etree.HTMLParser())
elem=root.xpath("//table")
ret=""
plen=len(elem[1].xpath("//tr"))
for tr in elem[1].xpath("//tr"):
if len(tr.findall("td"))==7:
str=""
for td in tr.findall("td"):
s=td.text.encode('utf-8').replace(',','').replace('年','-').replace('月','-').replace('日','')
str=str+s+"\t"
str=str+code
ret=ret+str+"\n"
time.sleep(1)
return ret,plen
def get_stockdata_all(sy,sm,sd,ey,em,ed,tm):
f=open("data/master.txt")
lines=f.readlines()
f.close()
for line in lines:
ay=line.split("\t")
print ay[0]
get_stockdata(ay[0],sy,sm,sd,ey,em,ed,tm)
if __name__ == '__main__':
get_stockdata_all("2000","01","01","2014","08","27","d")
やっつけで作成しましたがとりあえずファイルに落とすところまでは確認できました。
ちなみに動作環境はRapberryPITypeB+のRASPBIANVersion:June 2014で動いています