当前位置: 首页 > news >正文

python东方财富api股票数据获取程序

```python
"""
股票数据获取程序,并写入get_stocks.xslx文件,程序具备较完善错误处理
"""import pandas as pd
import requests
import logging
import osdef fetch_stock_data(stock_code):"""获取股票数据的核心函数参数:stock_code (str): 股票代码,如"688360"返回:dict: 包含股票数据的字典"""# 配置日志记录logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')logger = logging.getLogger('StockDataFetcher')# 原始API端点api_url = "https://push2.eastmoney.com/api/qt/stock/get"try:# 6开头为沪市(代码1),其他为深市(代码0)market_code = 1 if stock_code.startswith("6") else 0# 构建请求参数request_params = {"fltt": "2","invt": "2","fields": "f57,f58,f84,f85,f127,f116,f117,f189,f43","secid": f"{market_code}.{stock_code}",}logger.info(f"正在请求股票数据: {stock_code}")# 发送API请求(超时处理)response = requests.get(api_url, params=request_params, timeout=10)response.raise_for_status()  # 检查HTTP状态码logger.info("数据获取成功")return response.json()except requests.exceptions.RequestException as e:logger.error(f"请求失败: {e}")return Noneexcept Exception as e:logger.error(f"处理过程中发生错误: {e}")return Nonedef process_stock_data(raw_data):"""处理从API获取的原始股票数据参数:raw_data (dict): API返回的原始数据返回:pd.DataFrame: 处理后的股票数据"""if not raw_data or "data" not in raw_data:return pd.DataFrame()# 原始字段到中文名称的映射field_mapping = {"f57": "股票代码","f58": "股票简称","f84": "总股本","f85": "流通股","f127": "行业","f116": "总市值","f117": "流通市值","f189": "上市时间","f43": "最新价",}try:# 提取核心数据stock_data = raw_data.get("data", {})# 创建数据列表 - 使用列表推导式更高效processed_data = []for field, display_name in field_mapping.items():# 只处理存在的字段if field in stock_data:processed_data.append({"字段标识": field,"项目": display_name,"数值": stock_data[field]})# 转换为DataFramedf = pd.DataFrame(processed_data)# 如果数据为空,返回空DataFrameif df.empty:return df# 仅保留需要的列return df[["项目", "数值"]]except Exception as e:logging.error(f"数据处理失败: {e}")return pd.DataFrame()def display_stock_info(stock_code):"""显示股票信息的主函数参数:stock_code (str): 股票代码"""# 获取原始数据raw_data = fetch_stock_data(stock_code)if not raw_data:print(f"无法获取股票 {stock_code} 的数据")return# 处理数据stock_df = process_stock_data(raw_data)if stock_df.empty:print(f"股票 {stock_code} 的数据处理失败")return# 格式化输出print("\n股票信息:")print(stock_df.to_string(index=False))print("\n")file_path = 'get_stocks.xlsx'try:# 检查文件是否存在file_exists = os.path.isfile(file_path)mode = 'a' if file_exists else 'w'writer_kwargs = {'engine': 'openpyxl','mode': mode}if mode == 'a':writer_kwargs['if_sheet_exists'] = 'replace'with pd.ExcelWriter(file_path, **writer_kwargs) as writer:stock_df.to_excel(writer, sheet_name=stock_code, index=False)print(f"股票 {stock_code} 的数据已成功写入 {file_path}")except Exception as e:print(f"写入股票 {stock_code} 数据到 Excel 时出错: {e}")# 主程序
if __name__ == "__main__":# 示例股票代码 - 包含不同市场的股票stock_codes = ["601288","000937","688360", "603300", "002195", "300014"]# 为每个股票代码获取并显示信息for code in stock_codes:display_stock_info(code)在这里插入代码片

输出的股票信息

PS C:\Users\czliu> & “C:/Program Files/Python313/python.exe” c:/Users/czliu/Documents/python/stocks_get.py
2025-07-17 18:26:35,917 – INFO – 正在请求股票数据: 601288
2025-07-17 18:26:36,043 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 601288
股票简称 XD农业银
总股本 349983033873.0
流通股 319244210777.0
行业 银行
总市值 2145395997641.48999
流通市值 1956967012063.01001
上市时间 20100715
最新价 6.13

股票 601288 的数据已成功写入 get_stocks.xlsx
2025-07-17 18:26:36,282 – INFO – 正在请求股票数据: 000937
2025-07-17 18:26:36,385 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 000937
股票简称 冀中能源
总股本 3533546850.0
流通股 3433394152.0
行业 煤炭行业
总市值 20847926415.0
流通市值 20257025496.800003
上市时间 19990909
最新价 5.9

股票 000937 的数据已成功写入 get_stocks.xlsx
2025-07-17 18:26:36,432 – INFO – 正在请求股票数据: 688360
2025-07-17 18:26:36,530 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 688360
股票简称 德马科技
总股本 263745667.0
流通股 252286035.0
行业 通用设备
总市值 5617782707.1
流通市值 5373692545.5
上市时间 20200602
最新价 21.3

股票 688360 的数据已成功写入 get_stocks.xlsx
2025-07-17 18:26:36,582 – INFO – 正在请求股票数据: 603300
2025-07-17 18:26:36,678 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 603300
股票简称 海南华铁
总股本 1990650596.0
流通股 1990650596.0
行业 专用设备
总市值 23230892455.32
流通市值 23230892455.32
上市时间 20150529
最新价 11.67

股票 603300 的数据已成功写入 get_stocks.xlsx
2025-07-17 18:26:36,716 – INFO – 正在请求股票数据: 002195
2025-07-17 18:26:36,813 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 002195
股票简称 岩山科技
总股本 5681544596.0
流通股 5612251612.0
行业 互联网服务
总市值 32043911521.439999
流通市值 31653099091.679996
上市时间 20071212
最新价 5.64

股票 002195 的数据已成功写入 get_stocks.xlsx
2025-07-17 18:26:36,868 – INFO – 正在请求股票数据: 300014
2025-07-17 18:26:36,966 – INFO – 数据获取成功

股票信息:
项目 数值
股票代码 300014
股票简称 亿纬锂能
总股本 2045721497.0
流通股 1861434646.0
行业 电池
总市值 92057467365.0
流通市值 83764559070.0
上市时间 20091030
最新价 45.0

股票 300014 的数据已成功写入 get_stocks.xlsx

http://www.dtcms.com/a/284996.html

相关文章:

  • Vue3从入门到精通
  • Django `transaction.atomic()` 完整使用指南
  • SWD和JTAG区别
  • 【47】MFC入门到精通——MFC编辑框 按回车键 程序闪退问题 ,关闭 ESC程序退出 问题
  • git merge 和 git rebase 的区别
  • LoRA:大模型低秩适配技术全景——原理、演进与高效微调革命
  • MongoDB社区版安装(windows)
  • 第4.3节 iOS App生成追溯关系
  • 联发科MT6897 5G智能手机应用处理器 软件寄存器表:通用闪存(UFS)
  • Kafka——无消息丢失配置怎么实现?
  • C++:list
  • 博客摘录「 Springboot入门到精通(超详细文档)」2025年7月4日
  • ubuntu 22.02 带外进单用户拯救系统
  • 人工智能之数学基础:概率论和数理统计在机器学习的地位
  • 什么是 M4A 和 WAV?这两种音频互转会导致音质发生变化吗
  • python爬虫入门(小白五分钟从入门到精通)
  • 振石股份闯关上市:业绩连降,资产、负债两端暗藏隐忧
  • leetcode 3202. 找出有效子序列的最大长度 II 中等
  • 18650锂电池点焊机:新能源制造的精密纽带
  • Unreal5从入门到精通之如何实现第一人称和第三人称自由切换
  • 电脑重启后快速找回历史复制内容的实操方法
  • YOLOv8 PTQ、QAT量化及其DepGraph剪枝等压缩与加速推理有效实现(含代码)
  • Leetcode 494. 目标和
  • 力扣 hot100 Day47
  • #systemverilog# 关键字之 protected 用法
  • Python在字符串中查找所有匹配字符索引的多种方法 | Python字符串操作教程
  • h264编码总结
  • C语言(20250717)
  • select_shape_proto 用起来很省事
  • 4G模块 A7680通过MQTT协议连接到华为云