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

使用pandas.read_csv从URL读取CSV文件时遇EmptyDataError错误

解决pandas直接读取MarketWatch动态CSV链接的EmptyDataError问题

问题核心在于网站会校验请求的User-Agent标识:直接用pd.read_csv()访问链接时,pandas默认的请求头不被网站识别,返回空内容或非CSV数据,触发EmptyDataError;而手动下载时浏览器会自动带上完整请求头,能拿到正确的CSV文件。

解决方案:用requests模拟浏览器请求获取数据后再读取

  1. 先安装requests库(未安装的话执行):
pip install requests
  1. 核心代码实现:
import pandas as pd
import requests
from io import StringIO

# 目标CSV链接
csv_url = "https://www.marketwatch.com/games/stackoverflowq/download?view=holdings&pub=4JwsLs_Gm4kj&isDownload=true"

# 模拟浏览器请求头,关键是User-Agent字段
browser_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 发送请求获取CSV内容
response = requests.get(csv_url, headers=browser_headers)
response.raise_for_status()  # 请求失败时直接抛出异常

# 将返回文本转为pandas可读取的对象
df = pd.read_csv(StringIO(response.text))

# 验证结果
print(df.head())

批量处理优化

把读取逻辑封装成函数,方便批量处理多个链接:

def load_marketwatch_csv(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    resp = requests.get(url, headers=headers)
    resp.raise_for_status()
    return pd.read_csv(StringIO(resp.text))

# 批量处理示例
target_urls = [
    "https://www.marketwatch.com/xxx/download?xxx",
    "https://www.marketwatch.com/yyy/download?yyy",
    # 添加更多需要处理的链接
]

# 批量读取所有CSV到DataFrame列表
dataframes = [load_marketwatch_csv(url) for url in target_urls]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:10:16