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

如何适配Tableau Scraper抓取带自定义表格的公开Tableau仪表盘?

问题:Tableau Scraper抓取自定义仪表盘返回空DataFrame并报错

目标是用Tableau Scraper抓取支持自定义表格的公开Tableau仪表盘,将下拉选项转为可组合参数生成自定义CSV并自动下载。运行指定代码后返回空DataFrame并报错,需解决该问题。
目标仪表盘链接:https://tabexternal.dshs.texas.gov/t/THD/views/Deaths/Deaths?%3Aembed=y&showTabs=true&%3Adisplay_count=n&%3AshowVizHome=n&%3Aorigin=viz_share_link

用户输入代码

from tableauscraper import TableauScraper as TS

url = 'https://tabexternal.dshs.texas.gov/t/THD/views/Deaths/Deaths?%3Aembed=y&showTabs=true&%3Adisplay_count=n&%3AshowVizHome=n&%3Aorigin=viz_share_link'
ts = TS()
ts.loads(url)
wb = ts.getWorkbook()
data = wb.getCsvData(sheetName='Number of Deaths')

print(data)

返回错误结果

Empty DataFrame
Columns: [{"timeStamp":"2022-10-08 15:58:16.057", errorResponseType:"Generic", errorExtras:"(Y0GeF0ZgfP4LOiCpE7cUNwAAAIY, 3:0)"}]
Index: []

解决方法

1. 确认工作表与视图的真实名称

仪表盘显示的“Number of Deaths”可能是前端标签,而非内部真实名称。先列出所有可用的工作表和视图:

wb = ts.getWorkbook()
for sheet in wb.sheets:
    print(f"工作表名称: {sheet.name}")
    for viz in sheet.vizzes:
        print(f"  视图名称: {viz.name}")

运行后就能看到系统识别的真实名称,替换后续代码中的对应字段。

2. 配置筛选参数(下拉选项)

仪表盘的下拉选项对应筛选器,必须先设置筛选值才能获取对应数据:

# 获取目标工作表
sheet = wb.getSheetByName("真实工作表名称")
# 查看所有筛选器及可选值
filters = sheet.getFilters()
for f in filters:
    print(f"筛选器名称: {f.name}")
    print(f"可选值: {f.values}")

# 设置单个筛选值,例如设置年份为2023
sheet = sheet.setFilter("Year", "2023")
# 多选筛选器传入列表即可
# sheet = sheet.setFilter("Race/Ethnicity", ["White", "Black"])

3. 获取并导出CSV数据

设置好筛选器后,从对应视图提取数据并保存:

viz = sheet.getVizByName("真实视图名称")
data = viz.getCsvData()
# 导出为CSV文件
data.to_csv("自定义德州死亡数据.csv", index=False)

完整示例代码

from tableauscraper import TableauScraper as TS

url = 'https://tabexternal.dshs.texas.gov/t/THD/views/Deaths/Deaths?%3Aembed=y&showTabs=true&%3Adisplay_count=n&%3AshowVizHome=n&%3Aorigin=viz_share_link'
ts = TS()
ts.loads(url)

# 切换到目标标签页(如需要)
ts.switchTab("Deaths")

wb = ts.getWorkbook()
# 打印所有工作表和视图,确认真实名称
for sheet in wb.sheets:
    print(f"工作表名称: {sheet.name}")
    for viz in sheet.vizzes:
        print(f"  视图名称: {viz.name}")

# 假设真实工作表为"Deaths",视图为"Number of Deaths"
sheet = wb.getSheetByName("Deaths")
# 设置年份筛选器为2022
filters = sheet.getFilters()
for f in filters:
    if f.name == "Year":
        sheet = sheet.setFilter(f.name, "2022")
        break

# 获取数据并保存
viz = sheet.getVizByName("Number of Deaths")
data = viz.getCsvData()
print(data)
data.to_csv("德州死亡数据.csv", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:01:07