人民币存款利率是影响居民储蓄行为和企业资金配置的关键因素,也是宏观经济调控的重要工具。中国银行根据中国人民银行的指导政策,结合市场情况与自身经营策略,定期调整并公布人民币存款利率标准。这些利率信息主要涵盖活期存款、定期存款(如整存整取、零存整取、通知存款、协定存款等)等多个产品类别,覆盖三个月、半年、一年、二年、三年、五年等不同存期,全面反映银行对不同期限资金的定价策略。

为提升信息透明度与数据可用性,本文将探讨如何通过程序化方式,利用 GET 请求从中国银行官方网站的公开页面中获取人民币存款利率数据。通过 Python 编程语言中的 requests 库发送 HTTP 请求,模拟浏览器行为访问利率公告页面,并结合 BeautifulSoup 或 json 模块解析返回的 HTML 或结构化数据,实现对利率信息的自动化采集。采集内容包括利率发布日期、各存期对应的年利率数值、利率调整说明等关键字段,形成结构化的数据集。

此类数据采集方法不仅有助于实时跟踪中国银行的利率变动趋势,还可用于分析其利率定价策略的周期性规律、与其他商业银行的利率差异以及与宏观经济指标(如CPI、LPR、货币政策)之间的关联性。通过对历史利率数据的清洗、整理与可视化分析,可为个人投资者的资产配置决策、金融机构的市场研究以及学术领域的金融政策评估提供有力的数据支持。此外,构建自动化的利率监控系统,也有助于提升金融信息获取的效率与准确性,助力智慧金融生态的发展。

中国银行人民币存款利率列表:中国银行网站_金融市场_存/贷款利率_人民币存款利率

首先,我们找到门店数据的存储位置,然后看3个关键部分标头、负载、 预览;

标头:通常包括URL的连接,也就是目标资源的位置;

负载:对于GET请求:负载通常包含了传递的参数,有些网页负载可能为空,或者没有负载,因为所有参数都通过URL传递,这里我们可以看到并没有负载;

预览:指的是对响应内容的快速查看或摘要显示,可以帮助用户快速了解返回的数据结构或内容片段;

接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;

方法思路

  1. 找到对应数据存储位置,获取所有店铺列表的相关标签数据;
  2. 我们通过改变店铺id和店铺name,来遍历全国门店数据;
  3. 地址转经纬度,通过coord-convert库实现GCJ-02转WGS84;

这里,我们找到数据的位置之后,我们发现这个人民币存款利率数据每个都是一个单独的html,我们需要遍历所有的html,才能获取完整的数据;

那么,我们先要找到这页面对应的URL的储存位置,因为每个html对应的页面url都不一样,这里我们以人民币存款利率表2025-05-20的html为例,我们通过Ctrl + F 检索20250520,就可以在响应里找到数据对应的储存位置;

接下来,我们就需要找到数据储存的特定标签,先定位到包含主要内容的 <div class="news"> 容器,从该容器中找到存放所有历史链接的无序列表 <ul class="list">。遍历每个 <li> 条目,从中提取出链接和日期信息;

还有一个问题,数据是包含2页的,我们访问第二页的时候是需要通过另外一个html,我们先来观察规律,可以看到URL由index.html →index_1.html;

第一页 (current_page = 1): page_url = base_url + "index.html" → https://www.bankofchina.com/fimarkets/lilv/fd31/index.html
第二页 (current_page = 2): page_url = base_url + "index_1.html" → https://www.bankofchina.com/fimarkets/lilv/fd31/index_1.html

第一步:那么我们先获取包含中国银行人民币存款利率列表所有日期和URL的响应数据,并另存为csv;

完整代码#运行环境 Python 3.1

import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime# --- 请求头 ---
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Mobile Safari/537.36 Edg/139.0.0.0'
}# --- 两个页面的URL ---
urls = ["https://www.bankofchina.com/fimarkets/lilv/fd31/index.html",  # 第一页"https://www.bankofchina.com/fimarkets/lilv/fd31/index_1.html"  # 第二页
]def extract_links_from_url(page_url):"""从单个页面URL中提取所有利率表链接。"""print(f"正在抓取: {page_url}")try:response = requests.get(page_url, headers=headers, timeout=10)response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')links = []# 直接定位到新闻列表中的每个条目for li in soup.select('div.news ul.list li'):a_tag = li.find('a')span_tag = li.find('span')if a_tag and span_tag:# 构建完整URLhref = a_tag['href']# 处理相对路径和绝对路径if href.startswith("http"):full_url = hrefelif href.startswith("/"):full_url = "https://www.bankofchina.com" + hrefelse:full_url = "https://www.bankofchina.com/fimarkets/lilv/fd31/" + href.lstrip("./")date = span_tag.get_text(strip=True).strip('[] ')links.append({'date': date, 'url': full_url})print(f"从该页面找到 {len(links)} 个链接。")return linksexcept Exception as e:print(f"抓取 {page_url} 时出错: {e}")return []# --- 主执行流程 ---
if __name__ == "__main__":print("开始抓取中国银行人民币存款利率表链接...\n")all_links = []for url in urls:page_links = extract_links_from_url(url)all_links.extend(page_links)# 去重 (基于URL)seen_urls = set()unique_links = []for link in all_links:if link['url'] not in seen_urls:seen_urls.add(link['url'])unique_links.append(link)# 按日期倒序排列 (假设日期格式为 YYYY-MM-DD)unique_links.sort(key=lambda x: x['date'], reverse=True)# --- 保存为CSV ---filename = f"中国银行存款利率链接_{datetime.now().strftime('%Y%m%d')}.csv"try:with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:  # utf-8-sig 防止Excel乱码fieldnames = ['日期', 'URL']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()for link in unique_links:writer.writerow({'日期': link['date'], 'URL': link['url']})print(f"\n数据已成功保存到: {filename}")print(f"文件包含 {len(unique_links)} 条记录。")except Exception as e:print(f"保存CSV文件时出错: {e}")print("\n抓取与保存任务全部完成。")

数据会以csv表格的形式,保存在运行脚本的目录下,数据标签包括:日期、中国银行人民币存款利率列表的URL;

接下来,我们就来获取每个网页的整存整取利率表,这里仅选取1年—5年利率作为数据源,先找到 <table>,遍历所有 <tr> 行,设置一个标志 in_fixed_deposit = False,当遇到 <strong>1.整存整取</strong> 时,将其设为 True,在 in_fixed_deposit 为 True 的状态下,如果某行的第一个 <td> 文本是 '一年', '二年', '三年','五年',则提取第二个 <td> 的文本作为利率;

第二步:遍历所有URL,并利用GET请求获取所有整存整取1年—5年利率表,并根据标签进行保存,另存为csv;

完整代码#运行环境 Python 3.11

import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime
import re
import time# 配置
INPUT_CSV = "中国银行存款利率链接_20250825.csv"
OUTPUT_CSV = f"整存整取利率_中国银行_{datetime.now().strftime('%Y%m%d')}.csv"HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}def read_links():"""读取CSV链接"""with open(INPUT_CSV, encoding='utf-8-sig') as f:return [row for row in csv.DictReader(f)]def extract_rates(url):"""提取利率"""res = requests.get(url, headers=HEADERS, timeout=10)res.encoding = 'gbk' if 'gbk' in res.headers.get('Content-Type', '') else 'utf-8'soup = BeautifulSoup(res.text, 'html.parser')table = soup.find('table')if not table:return {'一年': 'N/A', '二年': 'N/A', '三年': 'N/A', '五年': 'N/A'}rates = {}in_fixed = Falsefor row in table.find_all('tr'):cols = row.find_all('td')if len(cols) < 2: continuet1 = re.sub(r'\s+', '', cols[0].get_text(strip=True))t2 = re.sub(r'\s+', '', cols[1].get_text(strip=True))if "1.整存整取" in t1:in_fixed = Truecontinueif in_fixed and t1 in ['一年', '二年', '三年', '五年']:rate = re.search(r'(\d+\.?\d*)', t2)rates[t1] = rate.group(1) if rate else 'N/A'if in_fixed and any(k in t1 for k in ["2.零存整取", "3.定活两便"]):break  # 提前退出,提高效率return {k: rates.get(k, 'N/A') for k in ['一年', '二年', '三年', '五年']}# 主程序
print("开始提取...")
links = read_links()
results = []for i, link in enumerate(links, 1):print(f"[{i}/{len(links)}] {link['日期']}")rates = extract_rates(link['URL'])results.append({'日期': link['日期'],'一年利率(%)': rates['一年'],'二年利率(%)': rates['二年'],'三年利率(%)': rates['三年'],'五年利率(%)': rates['五年']})time.sleep(0.3)# 保存
with open(OUTPUT_CSV, 'w', newline='', encoding='utf-8-sig') as f:w = csv.DictWriter(f, ['日期', '一年利率(%)', '二年利率(%)', '三年利率(%)', '五年利率(%)'])w.writeheader()w.writerows(results)print(f"完成!结果已保存至: {OUTPUT_CSV}")

数据会以csv表格的形式,保存在运行脚本的目录下,数据标签包括:日期、一年利率(%)、二年利率(%)、三年利率(%)、五年利率(%);

接下来,我们绘制成可视化的效果来观察人民币存款利率变化情况;

接下来,我们进行看图说话:

从1996年至2025年,中国银行人民币存款利率经历了深刻而显著的演变过程,整体呈现出一条清晰的长期下行轨迹。 这一趋势贯穿了近三十年的经济变迁,反映出中国宏观经济环境的深刻转型以及货币政策在不同发展阶段的调控逻辑。在1996年初期,存款利率处于历史高位,五年期利率一度接近12%,一年期利率也高达9%以上,显示出当时高通胀背景下的资金成本水平和较为紧缩的金融环境。

进入1998年后,受亚洲金融危机及国内通缩压力影响,央行多次下调利率,标志着高利率时代的结束。 利率迅速回落,五年期利率降至5%以下,三年期和一年期利率也同步下行。这一阶段的降息不仅是为了应对外部冲击,更是推动国有企业改革、化解银行不良资产和促进经济结构调整的重要手段。此后直至2007年,利率进入一个相对平稳的波动期,各期限利率在3%至6%区间内小幅震荡,反映出经济高速增长背景下货币政策的审慎与稳定。

2008年全球金融危机成为又一个关键转折点,利率波动显著加剧。 为应对外部冲击,中国实施了大规模经济刺激计划,利率再次大幅下调,一年期利率一度跌破2%。随后随着经济复苏和通胀回升,利率在2010年至2011年期间出现短暂反弹,三年期利率一度接近5%。这一阶段显示出货币政策强烈的逆周期调节特征,利率成为稳定经济增长的重要工具。

自2015年起,利率进入新一轮持续下行通道,反映出经济增速换挡与结构性调整的新常态。 随着人口红利减弱、房地产市场调整以及外部环境不确定性上升,货币政策持续宽松,各期限利率普遍回落。至2025年,一年期利率已降至不足1%,五年期利率也降至2%左右,表明当前处于低增长、低通胀背景下的长期宽松格局。这一阶段的降息不仅旨在降低实体经济融资成本,也体现了金融让利实体经济的政策导向。

从期限结构看,短期利率波动更为剧烈,而中长期利率相对平稳。 一年期和二年期利率对政策调整和经济周期反应灵敏,常作为货币政策操作的先导指标;而三年期和五年期利率则更多体现市场对未来经济走势的长期预期,其走势相对平缓,利差结构基本稳定,未出现明显倒挂,说明银行体系的期限溢价机制仍在正常运行。

综合来看,过去近三十年的利率走势,是中国从高速增长迈向高质量发展转型过程的金融映射。 利率的逐步降低既是对实体经济融资成本的让利,也是金融深化与市场化改革推进的结果。展望未来,在人口老龄化、潜在增长率下降和全球低利率环境的大背景下,存款利率或将维持低位运行,但其变化仍将紧密跟随宏观经济复苏节奏与政策导向,成为观察中国经济健康状况的重要窗口。

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920156.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920156.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920156.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPS和QPS

简介 这是系统设计中两个最核心且容易混淆的性能指标。简单来说&#xff1a; • RPS 是 “每秒请求数”&#xff0c;是从客户端或负载均衡器的视角看&#xff0c;服务器每秒接收到的请求数量。 • QPS 是 “每秒查询数”&#xff0c;通常是从数据库或特定服务的视角看&…

如何将用户反馈转化为可执行需求

用户反馈是企业优化产品、改进服务的重要依据。将用户反馈转化为可执行需求的核心在于通过系统化的流程对反馈进行收集、分析和分类&#xff0c;并结合企业的战略目标与技术能力&#xff0c;制定出具体的执行方案。这一过程不仅要求企业深入理解用户需求&#xff0c;还需要跨部…

ry-vue docker部署

目录 整体架构概览 创建 Docker 自定义网络 Redis 部署&#xff08;缓存服务&#xff09; redis.conf修改 启动 Redis 容器 测试 启动 MySQL 容器 允许 root 用户远程访问&#xff08;%&#xff09; 初始化数据库&#xff08;可选&#xff09; RuoYi-Admin 后端服务部…

Redis之Keys命令和Scan命令

序言 网上看到的面试题&#xff1a;Redis有1亿个key&#xff0c;其中10w个key是以某个固定的前缀开头&#xff0c;如何将它们全部找出来&#xff1f;一般有两种命令可以实现&#xff1a; Keys命令Scan命令 下面具体分析一下两种命令 Keys命令 Keys pattern如下图所示&…

【小沐学GIS】基于Godot绘制三维数字地球Earth(Godot)

&#x1f37a;三维数字地球GIS系列相关文章&#xff08;C&#xff09;如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&…

day62 Floyd 算法 A * 算法

Floyd 算法本题是经典的多源最短路问题.Floyd 算法对边的权值正负没有要求&#xff0c;都可以处理。Floyd算法核心思想是动态规划。例如我们再求节点1 到 节点9 的最短距离&#xff0c;用二维数组来表示即&#xff1a;grid[1][9]&#xff0c;如果最短距离是10 &#xff0c;那就…

【软考论文】论可观测性架构技术的应用

&#x1f381; 考高级架构师的小伙伴注意了&#xff01;&#x1f4e2; 软考架构论文示例 2025年11月软考架构论文预测&#x1f44d; 一、历年论文题目 无&#xff01;&#xff01;&#xff01; 二、考情分析 “可观测性技术”这一论题&#xff0c;目前在高级架构师与高级系统分…

软件测试:测试分类(一)

常用测试分类1.功能测试&#xff08;人对功能的确定&#xff0c;保证某个功能可以正常进行&#xff09;如验证你输入正确的手机号码和密码是否登录成功。手机号码不存在是否有提示&#xff0c;密码不正确是否有提示等2.自动化测试&#xff08;如jmeter&#xff0c;属于黑盒测试…

BigFoot (Method Raid Tools)[MRT] (Event Alert Mod)[EAM]

检查法术技能ID&#xff0c;需要EAM命令&#xff0c;所以要先安装EAM BigFoot EventAlertMod lua-CSDN博客 /eam lookup 冰封之韧 同时我们发现一个糟糕的问题&#xff0c;为什么会有这么多ID呢&#xff0c;默认第一个 还有一种法子就是让别人开了技能告诉你ID&#xff0c;最…

【Scrapy-Redis】分布式爬虫实战(非常详细)

一、概要 1.分布式爬虫概念 分布式爬虫是一种利用多台机器协同工作的网络爬虫系统&#xff0c;通过任务分解、并行处理和资源共享&#xff0c;高效抓取并处理海量网页数据。其核心在于将爬取任务分配到不同节点&#xff0c;避免单点性能瓶颈&#xff0c;同时支持动态扩展和容错…

基于51单片机智能化交通红绿灯堵车流量红外设计

1 系统功能介绍 本设计题目为 基于51单片机智能化交通红绿灯堵车流量红外设计&#xff0c;主要用于十字路口交通信号智能控制&#xff0c;通过红外避障检测车流量&#xff0c;自动调节红绿灯时间&#xff0c;缓解拥堵。该系统由单片机、LED灯、红外避障传感器、LCD1602液晶显示…

VsCode 上的Opencv(C++)环境配置(Linux)

1.下载Opencv1.新建文件demo_cpp,在demo_cpp中新建third_parties文件2.OPENCV官网下载OpenCV-4.12.03.将下载好的opencv-4.12.0.zip压缩包在third_parties中解压,//以下均无特殊说明,均在vscode里的TERMINAL中输入 sudo apt-get install unzip//用于解压.zip文件 cd third_part…

sql xml模板

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.example.mapper.UserMapper&quo…

docker在自定义网络中安装ElasticSearch和Kibana

创建自定义网络 创建一个名为 es-net 的桥接网络。这将作为 Elasticsearch 和 Kibana 的私有通信通道。 # 创建网络 docker network create es-net # 查看网络是否创建成功 docker network ls启动 Elasticsearch 容器 安装命令 docker run -d \--name elasticsearch \--net…

基于51单片机射频RFID停车刷卡计时收费系统设计

1 系统功能介绍 本设计题目为 基于51单片机射频RFID停车刷卡计时收费系统设计&#xff0c;旨在实现停车场车辆的刷卡计时和收费管理。系统通过单片机控制&#xff0c;结合 RFID 射频识别技术、LCD1602 显示以及蜂鸣器报警&#xff0c;实现停车时间的智能计时、累加及超时提醒功…

Netty源码—性能优化和设计模式

1.Netty的两大性能优化工具 (1)FastThreadLocal FastThreadLocal的作用与ThreadLocal相当&#xff0c;但比ThreadLocal更快。ThreadLocal的作用是多线程访问同一变量时能够通过线程本地化的方式避免多线程竞争、实现线程隔离。 Netty的FastThreadLocal重新实现了JDK的ThreadLoc…

Linux网络设备分析

🐧 Linux 网络设备驱动深入分析 本文将详细分析 Linux 网络设备驱动的工作原理、实现机制和代码框架,并通过一个虚拟网卡实例展示其实现,最后介绍常用的工具和调试手段。 1️⃣ Linux 网络设备驱动概述 Linux 网络设备驱动是内核中负责管理网络硬件(如以太网卡、Wi-Fi …

计算机视觉:从 “看见” 到 “理解”,解锁机器感知世界的密码

早上醒来&#xff0c;你拿起手机&#xff0c;人脸识别瞬间解锁屏幕&#xff1b;开车上班时&#xff0c;车载系统通过摄像头实时识别车道线&#xff0c;提醒你不要偏离&#xff1b;去医院做检查&#xff0c;医生用 AI 辅助的医学影像系统快速定位肺部微小结节&#xff1b;逛超市…

深入了解linux系统—— 线程封装

C11线程库 C11也提供了对应的线程库&#xff0c;在头文件<thread>中&#xff1b;C11将其封装成thread类&#xff0c;通过类实例化出对象&#xff0c;调用类内成员方法进行线程控制。 #include <iostream> #include <thread> #include <unistd.h> using…

安全防御-SCDN如何保护网站安全

随着互联网的快速发展&#xff0c;越来越多的企业依赖在线服务来运行其核心业务。与此同时&#xff0c;网络攻击的频率和复杂性也在不断增加&#xff0c;恶意流量成为许多企业头疼的问题。为了有效地提高网站的安全性和稳定性&#xff0c;德迅云安全加速SCDN被许多用户关注。今…