以前作成した、yahooファイナンスの株価をダンロードするツールを動かしてみたら全然動かなくなっていたので手直しをしてみた。
※以前の記事はこちら
http://hatakazu.hatenablog.com/entry/2012/06/28/081734
#-*- coding:utf-8 -*- import re import requests from BeautifulSoup import BeautifulSoup """ yahoo finance get stockPrice """ def stockPriceDict(code,startDay,endDay): url="http://info.finance.yahoo.co.jp/history/?code=%s&sy=%s&sm=%s&sd=%s&ey=%s&em=%s&ed=%s&tm=d&p=%s" stockDay=[] startPrice=[] highPrice=[] lowPrice=[] endPrice=[] volume=[] loop=1 while True: bs=BeautifulSoup(requests.get(url % (code,str(startDay)[0:4],str(startDay)[4:6],str(startDay)[6:8],str(endDay)[0:4],str(endDay)[4:6],str(endDay)[6:8],loop)).text) if len(bs.findAll("td")[3:]) == 0 or len(bs.findAll("td")[3:]) == 1: break for num,line in enumerate(bs.findAll("td")[3:]): if str(line).find("width") == -1: if num % 7 == 0: re1=re.compile(r"(\d{4})年(\d{1,2})月(\d{1,2})日") yyyymmdd="".join([re1.search(line.text.encode("utf-8")).group(i).zfill(2) for i in range(1,4)]) stockDay.append(yyyymmdd) elif num % 7 == 1: startPrice.append(line.text.encode("utf-8")) elif num % 7 == 2: highPrice.append(line.text.encode("utf-8")) elif num % 7 == 3: lowPrice.append(line.text.encode("utf-8")) elif num % 7 == 4: endPrice.append(line.text.encode("utf-8")) elif num % 7 == 5: volume.append(line.text.encode("utf-8")) else: loop += 1 break return {"stockDay":stockDay, "startPrice":startPrice, "highPrice":highPrice, "lowPrice":lowPrice, "endPrice":endPrice, "volume":volume} if __name__ == '__main__': code=7203 print stockPriceDict(code,20150601,20150701)
ちょっと困ったのが、対象日(例:2015年7月22日)の数字部分のみを正規表現で取得しようとして
re1=re.compile(r"(\d{4}).(\d{1,2}).(\d{1,2}).")
と書いてみたがうまく動かず、
re1=re.compile(r"(\d{4})年(\d{1,2})月(\d{1,2})日")
と書いたらうまく動いた。正規表現てよくわからんなー