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で動いています