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

如何使用Python下载未直接指向CSV文件的链接中的CSV数据

解决myfxbook经济日历CSV无法通过requests下载的方案

问题根因

myfxbook配置了反爬校验规则,直接发起GET请求会被拦截:站点会校验请求的请求头信息、是否携带合法的会话Cookie,不符合要求的请求会直接返回空内容。

实现步骤

  • 初始化requests会话,先访问经济日历首页获取合法会话Cookie
  • 构造下载请求时补充模拟浏览器的请求头,避免被拦截
  • 获取响应内容后可直接转为DataFrame或保存到本地

示例代码

import requests
import pandas as pd
from io import StringIO

# 初始化会话,统一管理请求头和Cookie
session = requests.Session()
# 可替换为自己浏览器的实际User-Agent,降低被拦截概率
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Referer": "https://www.myfxbook.com/economic-calendar",
    "Accept": "text/csv,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
session.headers.update(headers)

# 先访问经济日历首页,生成合法会话
session.get("https://www.myfxbook.com/economic-calendar")

# 替换为你自己构造的CSV下载链接
download_url = "https://www.myfxbook.com/calendar_statement.csv?filter=0-1-2-3_ANG-ARS-AUD-BRL-CAD-CHF-CLP-CNY-COP-CZK-DKK-EEK-EUR-GBP-HKD-HUF-IDR-INR-ISK-JPY-KPW-KRW-MXN-NOK-NZD-PEI-PLN-QAR-ROL-RUB-SEK-SGD-TRY-USD-ZAR&end=2021-08-20%2015:59:59.059&start=2021-08-18%2016:00:00.0&calPeriod=10"

# 发起下载请求
resp = session.get(download_url)
resp.encoding = "utf-8"

if len(resp.content) > 0:
    # 直接读取为DataFrame
    df = pd.read_csv(StringIO(resp.text))
    # 可选:保存到本地文件
    with open("myfxbook_economic_calendar.csv", "wb") as f:
        f.write(resp.content)
else:
    print("请求被拦截,请替换User-Agent后重试")

注意事项

  • User-Agent可以通过在浏览器地址栏输入javascript:alert(navigator.userAgent)获取自己本地浏览器的实际值,通用UA更容易被站点拦截
  • 如果需要下载大时间范围的数据,建议拆分为多个小的时间区间分批请求,避免触发站点频率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:03