011:获取上证50的所有股票代码,并下载各个股K线数到excel表中

2023-10-12 06:52

本文主要是介绍011:获取上证50的所有股票代码,并下载各个股K线数到excel表中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们结合《获取上证50的所有股票代码》,《根据股票代码和起始日期获取K线数据到excel表》两文中的脚本,搞出新的脚本:
 

import tkinter as tk
from tkinter import messagebox
from tkcalendar import Calendar
import pandas as pd
import requests
from urllib.parse import urlencode
import requests
from bs4 import BeautifulSoup
import os
import shutildef gen_secid(rawcode: str) -> str:'''生成东方财富专用的secidParameters----------rawcode : 6 位股票代码Return------str: 指定格式的字符串'''# 沪市指数if rawcode[:3] == '000':return f'1.{rawcode}'# 深证指数if rawcode[:3] == '399':return f'0.{rawcode}'# 沪市股票if rawcode[0] != '6':return f'0.{rawcode}'# 深市股票return f'1.{rawcode}'def get_k_history(code: str, beg: str, end: str, klt: int = 101, fqt: int = 1) -> pd.DataFrame:'''功能获取k线数据-参数code : 6 位股票代码beg: 开始日期 例如 20200101end: 结束日期 例如 20200201klt: k线间距 默认为 101 即日kklt:1 1 分钟klt:5 5 分钟klt:101 日klt:102 周fqt: 复权方式不复权 : 0前复权 : 1后复权 : 2 '''EastmoneyKlines = {'f51': '日期','f52': '开盘','f53': '收盘','f54': '最高','f55': '最低','f56': '成交量','f57': '成交额','f58': '振幅','f59': '涨跌幅','f60': '涨跌额','f61': '换手率',}EastmoneyHeaders = {'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 is None:if secid[0] == '0':secid = f'1.{code}'else:secid = f'0.{code}'params['secid'] = secidurl = base_url+'?'+urlencode(params)json_response: dict = requests.get(url, headers=EastmoneyHeaders).json()data = json_response.get('data')if data is None: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 dfdef select_start_date():def on_date_selected():selected_date = cal.selection_get()start_date_entry.delete(0, tk.END)start_date_entry.insert(0, selected_date.strftime('%Y%m%d'))top.destroy()top = tk.Toplevel(root)cal = Calendar(top, selectmode='day')cal.pack()confirm_button = tk.Button(top, text='确认', command=on_date_selected)confirm_button.pack()def select_end_date():def on_date_selected():selected_date = cal.selection_get()end_date_entry.delete(0, tk.END)end_date_entry.insert(0, selected_date.strftime('%Y%m%d'))top.destroy()top = tk.Toplevel(root)cal = Calendar(top, selectmode='day')cal.pack()confirm_button = tk.Button(top, text='确认', command=on_date_selected)confirm_button.pack()def get_kline_data(code,index):# code = stock_code_entry.get()start_date = start_date_entry.get()end_date = end_date_entry.get()# 修改文件保存的位置save_path = os.path.join('sz50_all_k_data', f'{code}.csv')try:df = get_k_history(code, start_date, end_date)df.to_csv(save_path, encoding='utf-8-sig', index=None)print(index,'提示', f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')except:print(index,'错误',{code}, '获取K线数据失败')def get_sz50_all_data():url = "https://q.stock.sohu.com/cn/bk_4272.shtml"response = requests.get(url)soup = BeautifulSoup(response.text, "html.parser")# 找到包含class为'e1'的元素elements = soup.find_all(class_="e1")# 提取数据并剔除非数字的成员data_list = [element.text for element in elements if element.text.isdigit()]# 打印list最终的成员print(data_list)#遍历所有成员,并调用get_kline_data# 检查并创建目录if not os.path.exists('sz50_all_k_data'):os.makedirs('sz50_all_k_data')else:shutil.rmtree('sz50_all_k_data')os.makedirs('sz50_all_k_data')index=0for code_tmp in data_list:index += 1get_kline_data(code_tmp,index)print(">>>>>>>>>>>>>>>>完成")root = tk.Tk()
root.title('上证50所有个股数据获取')# stock_code_label = tk.Label(root, text='股票代码')
# stock_code_label.pack()
# stock_code_entry = tk.Entry(root)
# stock_code_entry.pack()start_date_label = tk.Label(root, text='起始日期')
start_date_label.pack()
start_date_entry = tk.Entry(root)
start_date_entry.pack()select_start_date_button = tk.Button(root, text='选择日期', command=select_start_date)
select_start_date_button.pack()end_date_label = tk.Label(root, text='结束日期')
end_date_label.pack()
end_date_entry = tk.Entry(root)
end_date_entry.pack()select_end_date_button = tk.Button(root, text='选择日期', command=select_end_date)
select_end_date_button.pack()get_data_button = tk.Button(root, text='获取K线数据', command=get_sz50_all_data)
get_data_button.pack()root.mainloop()

效果:

保存到名为sz50_all_k_data的文件夹中:

这篇关于011:获取上证50的所有股票代码,并下载各个股K线数到excel表中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194107

相关文章

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.