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

浏览器可打开链接但Python requests请求返回404的非Selenium解决方案

解决Tableau CSV下载请求404的问题

直接用你提供的URL发起requests请求返回404,是因为Tableau公共站点对请求的完整性有校验,仅User-Agent不够。可以通过补充关键请求头、确保重定向正常来解决,不用Selenium:

  • 补充Referer头:告诉服务器请求来自对应仪表板页面,模拟浏览器的访问上下文
  • 补充Accept头:明确接受CSV格式的响应
  • 确保requests自动处理重定向(默认已开启,可显式指定强化)

修改后的代码:

import requests
import pandas as pd

url = 'https://public.tableau.com/app/profile/damian3851/viz/IATAdemandgrowth/IATAMonthlyCargoStatistics.csv'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
    'Referer': 'https://public.tableau.com/app/profile/damian3851/viz/IATAdemandgrowth/IATAMonthlyCargoStatistics',
    'Accept': 'text/csv,application/vnd.ms-excel,application/json,text/plain,*/*'
}

# 发起请求并允许重定向
response = requests.get(url, headers=headers, allow_redirects=True)

# 处理响应
if response.status_code == 200:
    # 保存到本地文件
    with open('IATAMonthlyCargoStatistics.csv', 'wb') as f:
        f.write(response.content)
    # 或直接用pandas读取数据
    df = pd.read_csv(pd.io.common.StringIO(response.text))
    print(df.head())
else:
    print(f"请求失败,状态码: {response.status_code}")

原理说明

Tableau的公共下载链接会验证请求是否来自对应的仪表板页面,Referer头是关键校验项。同时,明确Accept头能让服务器正确返回CSV格式内容,避免返回错误页面。如果仍有问题,可以抓包浏览器访问时的完整请求头,将所有非动态生成的头字段都添加到requests请求中,基本就能绕过拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:38:13