获取公募基金净值【数据分析系列博文】

摘要

从指定网址获取公募基金净值数据,快速解析并存储数据。
(该博文针对自由学习者获取数据;而在投顾、基金、证券等公司,通常有Wind、聚源、通联等厂商采购的数据)

  1. 导入所需的库:代码导入了一些常用的库,包括ast(用于安全地将字符串转换为Python对象)、pandas(用于数据处理)、requests(用于发送HTTP请求)、re(用于正则表达式匹配)、sqlalchemy和 pymysql(用于数据库操作)。
  2. 定义HTTP请求的头部信息:headers字典包含了HTTP请求的头部信息,包括用户代理、接受的内容类型等。
  3. 主程序入口:使用 if name == ‘main’: 来确保代码在作为脚本运行时才执行。
  4. 发送HTTP请求获取数据:通过 requests.get() 发送HTTP GET请求获取公募基金的净值数据,并使用response.raise_for_status() 来检查是否请求成功。
  5. 解析数据:使用正则表达式从响应文本中提取JSON格式的数据,并通过 ast.literal_eval()将字符串转换为Python对象。
  6. 数据处理:将JSON数据转换为 pandas 的DataFrame对象,并进行必要的数据处理,选择需要的列并添加基金代码列。
  7. 数据库操作:使用 sqlalchemy.create_engine()创建数据库引擎,将DataFrame数据写入MySQL数据库中的指定表格。
  8. 异常处理:使用 try…except… 结构来捕获可能发生的异常,如网络请求错误。

源码

import ast
import pandas as pd
import requests
import re
import sqlalchemy
import pymysql

"""
    desc: 采集公募基金净值
    author: xiong
"""

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Encoding": "gzip, deflate, br, zstd",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Cookie": "st_si=58097080196087; st_asi=delete; qgqp_b_id=7443897b6898879ff2ccc867c516cf28; EMFUND1=null; EMFUND2=null; EMFUND3=null; EMFUND4=null; EMFUND5=null; EMFUND6=null; EMFUND7=null; EMFUND0=null; EMFUND9=04-16%2021%3A02%3A33@%23%24%u4E1C%u5434%u79FB%u52A8%u4E92%u8054%u6DF7%u5408A@%23%24001323; EMFUND8=04-16 21:15:34@#$%u4E1C%u5434%u79FB%u52A8%u4E92%u8054%u6DF7%u5408C@%23%24002170; st_pvi=04007721649495; st_sp=2022-12-16%2010%3A38%3A55; st_inirUrl=https%3A%2F%2Fwww.1234567.com.cn%2F; st_sn=42; st_psi=20240416211534146-112200305282-1968554493",
    "Host": "api.fund.eastmoney.com",
    "Referer": "https://fundf10.eastmoney.com/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}

if __name__ == '__main__':
    print(f'-------------------------开始爬取基金净值-----------------------')
    fund_code = "002170"
    page, page_size = 1, 1000
    start_date, end_date = "2022-04-16", "2024-04-16"
    url = f'https://api.fund.eastmoney.com/f10/lsjz?callback=jQuery18309423849775920161_1713265454102&' \
          f'fundCode={fund_code}&pageIndex={page}&pageSize={page_size}&' \
          f'startDate={start_date}&endDate={end_date}&_=1713273437750'

    try:
        # 1. 爬取数据
        response = requests.get(url=url, headers=headers)
        response.raise_for_status()  # Raises an exception for HTTP errors
        print(f'-------------------------1. 成功爬取数据-----------------------')

        # 2. 解析数据
        data_str = re.findall('\[(.*?)\]', response.text)[0].replace("null", "None")
        data = ast.literal_eval(data_str)
        print(f'-------------------------2. 完成解析数据-----------------------')

        # 3. 数据入库
        fund_nav_df = pd.DataFrame(data)
        fund_nav_df = fund_nav_df[['FSRQ', 'DWJZ', 'LJJZ', 'JZZZL', 'SGZT', 'SHZT']]
        fund_nav_df.insert(0, 'FCODE', fund_code)
        print(fund_nav_df)

        pymysql.install_as_MySQLdb()
        engine: sqlalchemy.engine.Engine = sqlalchemy.create_engine(
            'mysql://root:282013@localhost/xjjjj?charset=utf8', pool_size=50, pool_recycle=200
        )
        fund_nav_df.to_sql('fund_nav', con=engine, if_exists='append', index=False)
        print(f'-------------------------3. 完成数据入库-----------------------')

    except requests.exceptions.RequestException as e:
        print(f"Error fetching data: {e}")

数据库

-- ----------------------------
-- Table structure for fund_nav
-- ----------------------------
DROP TABLE IF EXISTS `fund_nav`;
CREATE TABLE `fund_nav`  (
  `FCODE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '基金代码',
  `FSRQ` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '净值日期',
  `DWJZ` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '单位净值',
  `LJJZ` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '累计净值',
  `JZZZL` double(16, 8) DEFAULT NULL COMMENT '净值增长率',
  `SGZT` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '申购状态',
  `SHZT` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '赎回状态'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

结果

在这里插入图片描述

在这里插入图片描述

预告

下一期:基金十大重仓数据分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/553229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理,以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结: 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2,同时导入utils_paths模块&…

PACNet CellNet(代码开源)|bulk数据作细胞分类,评估细胞命运性能的一大利器

文章目录 1.前言2.CellNet2.1CellNet简介2.2CellNet结果 3.PACNet3.1安装R包与加载R包3.2加载数据3.3开始训练和分类3.4可视化分类过程3.5可视化分类结果 4.细胞命运分类和免疫浸润比较 1.前言 今天冲浪看到一个细胞分类性能评估的R包——PACNet,它与转录组分析方法…

【经验总结】Jupyter 配置内核

1. 背景描述 使用 国家超算互联网中心 的服务器,创建 jupyterlab 容器,想在之前 conda 创建的环境中运行,可是不行,进入容器就直接进入 jupyterlab 2. 解决方法 配置内核 2.1 激活环境 conda activate peft2.2 安装内核 pip…

vector类——常用函数模拟(C++)

在上一篇中我们介绍了 string 类的常用函数模拟,接下来我们将开始讲解 vector 类的常用函数的讲解以及模拟实现,相较于 string 来说,vector 的函数不那么冗余,用法也没有那么多,但是在 vector 中的函数使用和模拟中&am…

单链表的实现(单链表的增删查改)

在顺序表中实现数据的增删的操作时,都要把操作位置之后的数据全部移动一遍,操作效率低下。其次是容量固定(静态顺序表),虽然在动态顺序表中容量可变,但也会造成空间上的浪费。 单链表就完美解决了上述缺点…

微服务架构与Dubbo

一、微服务架构 微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 分布式系统式若干独立系统的集合,但是用户使用起来好像是在使用一套系统。 和微服务对应的是单体式开发,即所有的功能打包在一个WAR…

No spring.config.import property has been defined

运行Springcloud项目出现下面错误: Description: No spring.config.import property has been defined Action: Add a spring.config.importnacos: property to your configuration. If configuration is not required add spring.config.importoptional:nac…

C 排序算法

冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 过程演示&…

校园综合服务平台V3.9.2 源码修复大部分已知BUG

校园综合服务平台,版本更新至V3.9.1 ,源码功能强大,ui 精美, 功能包含但不限于校园跑腿,外卖,组局,圈子,商城,抽奖,投票,团购,二手市场…

ROS学习笔记(12)AEB和TTC的实现

0.前提 在自动驾驶领域有许多关于驾驶安全的措施AEB和TTC就是为了驾驶安全而设计出来的。在这篇文章中我会讲解我对AEB和TTC算法的一些理解。本期ROS学习笔记同时也是ros竞速小车的学习笔记,我会将我的部分代码拿出来进行讲解,让大家更好的理解ttc和aeb…

Zabbix监控系统

一.监控软件的作用: 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果和网站的健康状态 利用一个优秀的监控软件,我们可以: 对系统不间断实时监控实时反馈系统当前状态…

挣钱新玩法,一文带你掌握流量卡推广秘诀

手机流量卡推广项目是什么?听名字我相信大家就已经猜出来了,就是三大运营商为了开发新用户,发起的有奖推广活动,也是为了长期黏贴用户。在这个活动中,用户通过我们的渠道,就能免费办理低套餐流量卡&#xf…

链表OJ - 7(链表的回文结构)

题目描述(来源) 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。…

【SVG】从零开始绘制条形图

效果图 定义背景色和坐标轴颜色 :root {--cord-color: #2be7ca; }body {background-color: #000;}画坐标轴 画X轴 <!-- 坐标轴 --> <g id"cordinate"><!-- x轴 --><line x1"50" y1"600" x2"900" y2"600&q…

同城货运系统的开发与货运搬家软件的技术性探讨和市场分析

一、市场前景展望 随着城市化进程的加快和电商物流的蓬勃发展&#xff0c;同城货运市场展现出了巨大的潜力。尤其是在快节奏的生活环境中&#xff0c;个人和企业对于快速、便捷、可靠的货运搬家服务需求日益增长。同城货运系统与货运搬家软件作为连接货主与货运司机的桥梁&…

Opengl 坐标系统概述

1.谈到opengl 坐标系统 首先要知道三个坐标转换矩阵&#xff0c;模型矩阵&#xff0c;观察矩阵&#xff0c;投影矩阵。 模型矩阵作用在将以物体中心为原点的坐标系统&#xff0c;转换到世界坐标。 观察矩阵作用在将世界坐标系统转换到观察坐标系统 投影矩阵作用在将观察坐标…

2024年苹果审核4.3相关问题综述

苹果审核中的4.3问题是开发者关注的焦点之一&#xff0c;本文对此进行了综述&#xff0c;总结了不同情况下的处理方式和优化策略。 第一种4.3 该类问题常见于代码或UI的重复率过高&#xff0c;苹果会直接拒绝应用。开发者需注意避免此类情况的发生&#xff0c;特别是在更新应…

亚信安全数据安全运营平台DSOP新版本发布 注入AI研判升维

在当今快速发展的数字经济时代&#xff0c;企业对于数据的依赖日益加深&#xff0c;数据安全已成为企业的生命线。亚信安全推出数据安全运营平台DSOP全新版本&#xff0c;正是为满足企业对数据安全的高度需求而设计。这款平台以其卓越的能力和技术优势&#xff0c;为企业的数据…

逆向案例二十七——某笔网登录接口非对称加密算法RSA,涉及全扣代码,浏览器断点调试,和补环境

网址&#xff1a;aHR0cHM6Ly93d3cuZmVuYmkuY29tL3BhZ2UvaG9tZQ 点击账号密码登录&#xff0c;找到登陆的包&#xff0c;发现password进行了加密。 顿时&#xff0c;老生常谈&#xff0c;开始搜索&#xff0c;找到最有嫌疑的加密代码。进行搜索&#xff0c;进入js文件后&#x…

云计算:Linux 部署 OVS 集群(服务端)实现VXLAN

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;服务端&#xff09; 3.Linux 部署VXLAN 一、实验 1.环境 (1) 主机 表1 宿主机 主机架构软件IP备注ovs_controller控制端192.168.204.63 1个NAT网卡 &#xff08;204网段&#xff09; ovs_server01服务端 Openv…