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

使用Python下载FT历史数据遇语法错误,移除f后无输出求解决

解决FT历史数据下载代码的语法错误与无输出问题

1. 语法错误的根源与修复

你遇到的f字符串语法错误,是因为你的Python版本低于3.6——f-string语法是Python 3.6及以上版本才引入的特性。

替代方案有两种:

  • 升级Python到3.6及以上版本
  • 用str.format()方法重构URL,兼容低版本Python:
    # 替换原f-string行
    url = 'https://markets.ft.com/data/equities/ajax/get-historical-prices?startDate={}&endDate={}&symbol=535700333'.format(start, end)
    r = requests.get(url).json()
    

2. 移除f-string后无输出的原因

移除f-string标识后,URL里的{start}和{end}没有被实际日期值替换,请求的是一个包含占位符的无效链接,服务器返回空内容,自然没有数据可以解析输出。

3. 完整修正后的代码

同时优化了已弃用的df.append()方法、细化异常捕获逻辑:

import requests
import pandas as pd
from datetime import datetime
import time

# 创建过去100年的年度日期列表(从今天往前推)
datelist = pd.date_range(end=datetime.now(), periods=100, freq=pd.DateOffset(years=1))[::-1].strftime('%Y/%m/%d')
# 创建空DataFrame
df = pd.DataFrame(columns=['Date','Open','High','Low','Close','Volume'])

# 遍历日期区间获取数据
for end, start in zip(datelist, datelist[1:]):
    try:
        # 使用str.format()替代f-string兼容低版本Python
        url = 'https://markets.ft.com/data/equities/ajax/get-historical-prices?startDate={}&endDate={}&symbol=535700333'.format(start, end)
        r = requests.get(url).json()
        # 解析HTML表格
        df_temp = pd.read_html('<table>' + r['html'] + '</table>')[0]
        df_temp.columns=['Date','Open','High','Low','Close','Volume']
        # 使用pd.concat替代已弃用的append方法
        df = pd.concat([df, df_temp], ignore_index=True)
        time.sleep(2)  # 避免请求过于频繁被服务器限制
    except requests.exceptions.RequestException as e:
        print(f"请求出错: {e}")
        break
    except (IndexError, KeyError) as e:
        print(f"数据解析出错: {e}")
        break

# 输出前5行验证结果
print(df.head())
# 保存数据到CSV文件
df.to_csv('ft_historical_data.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:32:57