HTML应用指南:利用GET请求获取中国银行人民币存款利率数据
人民币存款利率是影响居民储蓄行为和企业资金配置的关键因素,也是宏观经济调控的重要工具。中国银行根据中国人民银行的指导政策,结合市场情况与自身经营策略,定期调整并公布人民币存款利率标准。这些利率信息主要涵盖活期存款、定期存款(如整存整取、零存整取、通知存款、协定存款等)等多个产品类别,覆盖三个月、半年、一年、二年、三年、五年等不同存期,全面反映银行对不同期限资金的定价策略。
为提升信息透明度与数据可用性,本文将探讨如何通过程序化方式,利用 GET 请求从中国银行官方网站的公开页面中获取人民币存款利率数据。通过 Python 编程语言中的 requests 库发送 HTTP 请求,模拟浏览器行为访问利率公告页面,并结合 BeautifulSoup 或 json 模块解析返回的 HTML 或结构化数据,实现对利率信息的自动化采集。采集内容包括利率发布日期、各存期对应的年利率数值、利率调整说明等关键字段,形成结构化的数据集。
此类数据采集方法不仅有助于实时跟踪中国银行的利率变动趋势,还可用于分析其利率定价策略的周期性规律、与其他商业银行的利率差异以及与宏观经济指标(如CPI、LPR、货币政策)之间的关联性。通过对历史利率数据的清洗、整理与可视化分析,可为个人投资者的资产配置决策、金融机构的市场研究以及学术领域的金融政策评估提供有力的数据支持。此外,构建自动化的利率监控系统,也有助于提升金融信息获取的效率与准确性,助力智慧金融生态的发展。
中国银行人民币存款利率列表:中国银行网站_金融市场_存/贷款利率_人民币存款利率
首先,我们找到门店数据的存储位置,然后看3个关键部分标头、负载、 预览;
标头:通常包括URL的连接,也就是目标资源的位置;
负载:对于GET请求:负载通常包含了传递的参数,有些网页负载可能为空,或者没有负载,因为所有参数都通过URL传递,这里我们可以看到并没有负载;
预览:指的是对响应内容的快速查看或摘要显示,可以帮助用户快速了解返回的数据结构或内容片段;
接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;
方法思路
- 找到对应数据存储位置,获取所有店铺列表的相关标签数据;
- 我们通过改变店铺id和店铺name,来遍历全国门店数据;
- 地址转经纬度,通过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%左右,表明当前处于低增长、低通胀背景下的长期宽松格局。这一阶段的降息不仅旨在降低实体经济融资成本,也体现了金融让利实体经济的政策导向。
从期限结构看,短期利率波动更为剧烈,而中长期利率相对平稳。 一年期和二年期利率对政策调整和经济周期反应灵敏,常作为货币政策操作的先导指标;而三年期和五年期利率则更多体现市场对未来经济走势的长期预期,其走势相对平缓,利差结构基本稳定,未出现明显倒挂,说明银行体系的期限溢价机制仍在正常运行。
综合来看,过去近三十年的利率走势,是中国从高速增长迈向高质量发展转型过程的金融映射。 利率的逐步降低既是对实体经济融资成本的让利,也是金融深化与市场化改革推进的结果。展望未来,在人口老龄化、潜在增长率下降和全球低利率环境的大背景下,存款利率或将维持低位运行,但其变化仍将紧密跟随宏观经济复苏节奏与政策导向,成为观察中国经济健康状况的重要窗口。
文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。