使用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
相关产品推荐
相关产品推荐

