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

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@