Hello Mat

 找回密码
 立即注册
查看: 3013|回复: 0

Python抓取股票数据

[复制链接]

1319

主题

1547

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22631
发表于 2021-12-22 20:41:33 | 显示全部楼层 |阅读模式
Python抓取股票数据
  1. # -*- coding: utf-8 -*-
  2. """
  3. Spyder Editor
  4. This is a temporary script file.
  5. """
  6. from urllib.parse import urlencode
  7. import pandas as pd
  8. import requests
  9. def gen_eastmoney_code(rawcode: str) -> str:
  10.     '''
  11.     生成东方财富专用的secid

  12.     Parameters
  13.     ----------
  14.     rawcode : 6 位股票代码
  15.     Parameters
  16.     ----------
  17.     str : 按东方财富格式生成的字符串
  18.     '''
  19.     if rawcode[0] != '6':
  20.         return f'0.{rawcode}'
  21.     return f'1.{rawcode}'
  22. def get_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:
  23.     '''
  24.     功能获取k线数据
  25.     Parameters
  26.     ----------
  27.     code : 6 位股票代码
  28.     beg: 开始日期 例如 20200101
  29.     end: 结束日期 例如 20200201
  30.     klt: k线间距 默认为 101 即日k
  31.         klt:1 1 分钟
  32.         klt:5 5 分钟
  33.         klt:101 日
  34.         klt:102 周
  35.     fqt: 复权方式
  36.         不复权 : 0
  37.         前复权 : 1
  38.             后复权 : 2
  39.     Return
  40.     ------
  41.     DateFrame : 包含股票k线数据
  42.     '''
  43.     EastmoneyKlines = {
  44.         'f51': '时间',
  45.         'f52': '开盘',
  46.         'f53': '收盘',
  47.         'f54': '最高',
  48.         'f55': '最低',
  49.         'f56': '成交量',
  50.         'f57': '成交额',
  51.         'f58': '振幅',
  52.         'f59': '涨跌幅',
  53.         'f60': '涨跌额',
  54.         'f61': '换手率',
  55.     }
  56.     EastmoneyHeaders = {
  57.         'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
  58.         'Accept': '*/*',
  59.         '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',
  60.         'Referer': 'http://quote.eastmoney.com/center/gridlist.html',
  61.     }
  62.     fields = list(EastmoneyKlines.keys())
  63.     columns = list(EastmoneyKlines.values())
  64.     fields2 = ",".join(fields)
  65.     secid = gen_eastmoney_code(code)
  66.     params = (
  67.         ('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'),
  68.         ('fields2', fields2),
  69.         ('beg', beg),
  70.         ('end', end),
  71.         ('rtntype', '6'),
  72.         ('secid', secid),
  73.         ('klt', f'{klt}'),
  74.         ('fqt', f'{fqt}'),
  75.     )
  76.     base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'
  77.     url = base_url+'?'+urlencode(params)
  78.     json_response = requests.get(
  79.         url, headers=EastmoneyHeaders).json()
  80.     data = json_response['data']
  81.     # code = data['code']
  82.     # 股票名称
  83.     # name = data['name']
  84.     klines = data['klines']
  85.     rows = []
  86.     for _kline in klines:
  87.         kline = _kline.split(',')
  88.         rows.append(kline)
  89.     df = pd.DataFrame(rows, columns=columns)
  90.     return df
  91. if __name__ == "__main__":
  92.     # 股票代码
  93.     code = '002503'
  94.     beg= '16000101'
  95.     end= '20500101'
  96.     klt = 101
  97.     fqt = 1
  98.     # 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据
  99.     df = get_k_history(code, beg, end, klt, fqt)
  100.     # 保存k线数据到表格里面
  101.     spath = r'D:\994-WiTiAi\WITIAI_InvestmentIncome\Python'
  102.     # df.to_csv(spath +'//'+ f'{code}.csv', encoding='utf-8-sig', index=None)
  103.     df.to_csv(spath + '//' + f'{code}.csv', encoding='utf-8-sig', index=None)
  104.     print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')
  105.    
复制代码


参考:【1】如何用 python 获取实时的股票数据?


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-10-31 18:23 , Processed in 0.214137 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表