问题
如果存在问题大家肯定看过这篇文章,https://zhuanlan.zhihu.com/p/99808149
但是遗憾的是没法获取到2010.4.26年的数据,朋友的研究需要2010年的数据。
比如到中国金融期货交易所 http://www.cffex.com.cn/lssjxz/ 只能找到每一天的数据,如果要处理下来是非常大的工作量
解决思路
相应的数据都是XML格式的,但是这就给了我们思路,通过python获取每一天的xml进行解析,获取里面的数据即可
废话不多说,最终结果,从2010.4.26开始
代码
python代码
import datetime
import re
import pandas as pd
import numpy as np
import urllib.request
url = f"http://www.cffex.com.cn/sj/hqsj/rtj/202103/25/index.xml"
# http://www.cffex.com.cn/error_page/error_404.html
begin = datetime.date(2015, 4, 16)
end = datetime.date(2021, 4, 25)
close_price = []
date_list = []
pSS = "IF" # 相关指数
# 按时间遍历
for i in range((end - begin).days + 1):
day = begin + datetime.timedelta(days=i)
arr_ = str(day).split("-")
day_ = arr_[0] + arr_[1] + '/' + arr_[2]
url = f"http://www.cffex.com.cn/sj/hqsj/rtj/{day_}/index.xml"
response = str(urllib.request.urlopen(url).read())
if "<dailydatas>" not in response:
print(f"{day_}:_无")
else:
result2 = ""
strs = response.split("<dailydata>")
for j in strs:
# 找到中间是IF的
pat = re.compile("<instrumentid>" + pSS + '(.*?)' + "</instrumentid>", re.S)
result = pat.findall(j)
if len(result) == 1:
pat2 = re.compile("<closeprice>" + '(.*?)' + "</closeprice>", re.S)
result2 = pat2.findall(j)[0]
date_list.append(str(day))
close_price.append(result2)
break
print(f"{day_}:_有_{result2}")
print(url)
rs = []
rs.append(date_list)
rs.append(close_price)
h = ['日期', pSS + '_收盘价格']
rs = np.array(rs).T
df = pd.DataFrame(rs, columns=h, )
df.to_excel("./" + pSS + ".xlsx", index=False)