先上个展示图
股票代码为 600519 的股票 1 分钟数据

代码展示

获取当日分钟线数据

from urllib.parse import urlencodeimport pandas as pdimport requestsdefgen_secid(rawcode: str) -> str:''' 生成东方财富专用的secid Parameters ---------- rawcode : 6 位股票代码 Return ------ str: 指定格式的字符串 '''# 沪市指数if rawcode[:3] == '000':returnf'1.{rawcode}'# 深证指数if rawcode[:3] == '399':returnf'0.{rawcode}'# 沪市股票if rawcode[0] != '6':returnf'0.{rawcode}'# 深市股票returnf'1.{rawcode}'defget_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:''' 功能获取k线数据 Parameters ---------- code : 6 位股票代码 beg: 开始日期 例如 20200101 end: 结束日期 例如 20200201 klt: k线间距 默认为 101 即日k klt:1 1 分钟 klt:5 5 分钟 klt:101 日 klt:102 周 fqt: 复权方式 不复权 : 0 前复权 : 1 后复权 : 2 Return ------ DateFrame : 包含股票k线数据 ''' EastmoneyKlines = {'f51': '日期','f52': '开盘','f53': '收盘','f54': '最高','f55': '最低','f56': '成交量','f57': '成交额','f58': '振幅','f59': '涨跌幅','f60': '涨跌额','f61': '换手率', } EastmoneyHeaders = {'Host': '19.push2.eastmoney.com','User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Referer': 'http://quote.eastmoney.com/center/gridlist.html', } fields = list(EastmoneyKlines.keys()) columns = list(EastmoneyKlines.values()) fields2 = ",".join(fields) secid = gen_secid(code) params = ( ('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'), ('fields2', fields2), ('beg', beg), ('end', end), ('rtntype', '6'), ('secid', secid), ('klt', f'{klt}'), ('fqt', f'{fqt}'), ) params = dict(params) base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get' url = base_url+'?'+urlencode(params) json_response: dict = requests.get( url, headers=EastmoneyHeaders).json() data = json_response.get('data')if data isNone:if secid[0] == '0': secid = f'1.{code}'else: secid = f'0.{code}' params['secid'] = secid url = base_url+'?'+urlencode(params) json_response: dict = requests.get( url, headers=EastmoneyHeaders).json() data = json_response.get('data')if data isNone: print('股票代码:', code, '可能有误')return pd.DataFrame(columns=columns) klines = data['klines'] rows = []for _kline in klines: kline = _kline.split(',') rows.append(kline) df = pd.DataFrame(rows, columns=columns)return dfif __name__ == "__main__":# 股票代码 code = '600519'# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据 df = get_k_history(code)# 保存k线数据到表格里面 df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None) print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

获取当日分钟线数据(每分钟运行一次,直到收盘)

from urllib.parse import urlencodeimport pandas as pdimport requestsimport timedefgen_secid(rawcode: str) -> str:''' 生成东方财富专用的secid Parameters ---------- rawcode : 6 位股票代码 Return ------ str: 指定格式的字符串 '''# 沪市指数if rawcode[:3] == '000':returnf'1.{rawcode}'# 深证指数if rawcode[:3] == '399':returnf'0.{rawcode}'# 沪市股票if rawcode[0] != '6':returnf'0.{rawcode}'# 深市股票returnf'1.{rawcode}'defget_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:''' 功能获取k线数据 Parameters ---------- code : 6 位股票代码 beg: 开始日期 例如 20200101 end: 结束日期 例如 20200201 klt: k线间距 默认为 101 即日k klt:1 1 分钟 klt:5 5 分钟 klt:101 日 klt:102 周 fqt: 复权方式 不复权 : 0 前复权 : 1 后复权 : 2 Return ------ DateFrame : 包含股票k线数据 ''' EastmoneyKlines = {'f51': '日期','f52': '开盘','f53': '收盘','f54': '最高','f55': '最低','f56': '成交量','f57': '成交额','f58': '振幅','f59': '涨跌幅','f60': '涨跌额','f61': '换手率', } EastmoneyHeaders = {'Host': '19.push2.eastmoney.com','User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Referer': 'http://quote.eastmoney.com/center/gridlist.html', } fields = list(EastmoneyKlines.keys()) columns = list(EastmoneyKlines.values()) fields2 = ",".join(fields) secid = gen_secid(code) params = ( ('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'), ('fields2', fields2), ('beg', beg), ('end', end), ('rtntype', '6'), ('secid', secid), ('klt', f'{klt}'), ('fqt', f'{fqt}'), ) params = dict(params) base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get' url = base_url+'?'+urlencode(params) json_response: dict = requests.get( url, headers=EastmoneyHeaders).json() data = json_response.get('data')if data isNone:if secid[0] == '0': secid = f'1.{code}'else: secid = f'0.{code}' params['secid'] = secid url = base_url+'?'+urlencode(params) json_response: dict = requests.get( url, headers=EastmoneyHeaders).json() data = json_response.get('data')if data isNone: print('股票代码:', code, '可能有误')return pd.DataFrame(columns=columns) klines = data['klines'] rows = []for _kline in klines: kline = _kline.split(',') rows.append(kline) df = pd.DataFrame(rows, columns=columns)return dfif __name__ == "__main__":# 重复 1000 次for _ in range(1000):# 股票代码 code = '600519'# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据 df = get_k_history(code)# 保存k线数据到表格里面 df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None) print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')# 240 行说明收盘了,结束if len(df) >= 240: print('已收盘')break time.sleep(60)

运行环境说明

Python版本要求
Python 3
需要安装的库
pandas

requests
库的安装方法是:打开 cmd(命令提示符或者其他终端工具),输入以下代码
pip install pandas requests
输入完毕,按 Enter 键执行代码,等待 successfully 出现即可
原文链接:zhihu.com/question/438404653/answer/1794419766
文章转载:Python编程学习圈
(版权归原作者所有,侵删)
点击下方“阅读原文”查看更多
继续阅读
阅读原文