You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python自动下载英格兰银行官网的CSV文件?

解决英格兰银行官网CSV文件自动下载问题

问题原因

你原代码的核心问题在于:

  • 原URL中的#是页面锚点,并非资源路径,直接拼接.csv无法指向真实的CSV文件
  • 该页面的CSV文件是通过表单动态生成的,并非静态文件,无法直接通过简单的URL拼接获取

解决方案

方案一:直接使用预构造的CSV下载链接

英格兰银行的银行利率历史数据可以通过带参数的直接链接获取,以下代码可直接读取CSV数据:

import pandas as pd

# 指向完整历史银行利率数据的CSV下载链接
csv_url = "https://www.bankofengland.co.uk/boeapps/database/fromshowcolumns.asp?csv.x=yes&Datefrom=01/01/1975&Dateto=&SeriesCodes=IUDBEDR&CSVF=TN&UsingCodes=Y&VPD=Y&VFD=N"
orig_m = pd.read_csv(csv_url).dropna(how='all')

# 验证数据
print(orig_m.head())

方案二:模拟表单提交(更通用)

如果后续官网参数发生变化,可通过解析页面表单、模拟提交请求的方式动态获取CSV:

import requests
from bs4 import BeautifulSoup
import pandas as pd
from io import StringIO

# 目标页面URL
base_url = "https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp"

# 1. 获取页面内容,解析表单参数
response = requests.get(base_url, headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(response.text, "html.parser")

# 定位数据导出表单
export_form = soup.find("form", attrs={"action": "fromshowcolumns.asp"})
form_params = {}

# 提取表单内的默认参数
for input_tag in export_form.find_all("input"):
    name = input_tag.get("name")
    value = input_tag.get("value")
    if name and value:
        form_params[name] = value

# 添加CSV导出触发参数
form_params["csv.x"] = "yes"

# 2. 提交表单获取CSV数据
csv_response = requests.post(
    "https://www.bankofengland.co.uk/boeapps/database/fromshowcolumns.asp",
    data=form_params,
    headers={"User-Agent": "Mozilla/5.0"}
)

# 3. 解析CSV为DataFrame
orig_m = pd.read_csv(StringIO(csv_response.text)).dropna(how='all')

# 验证数据
print(orig_m.head())

注意事项

  • 若遇到请求被拦截,可在headers中添加更多浏览器标识信息模拟正常访问
  • 官网的表单参数或下载链接可能会更新,定期检查代码可用性

内容的提问来源于stack exchange,提问作者msh855

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:48:29