使用Tableau Scraper爬取公共Tableau仪表盘时选择值报错如何解决
Tableau Scraper 筛选值不存在报错排查方案
'Norte' is not in list 报错的核心原因是你调用select方法时传入的字段名、筛选值与当前工作表返回的实际可筛选选项不匹配,或是参数修改后未同步更新工作簿、工作表对象。
步骤1:修正工作簿对象更新逻辑
TableauScraper的setParameter方法会返回更新后的新工作簿对象,你之前的代码仅在设置结束日期时接收了返回值,前面三个参数修改未同步到工作簿,导致后续获取的工作表还是参数未生效的旧版本,可选筛选值自然不匹配。
正确的参数更新写法:
from tableauscraper import TableauScraper as TS url = 'https://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima' ts = TS() ts.loads(url) wb = ts.getWorkbook() # 所有参数修改都要接收返回的新工作簿对象 wb = wb.setParameter("Selecione DM Simp 4", "Demanda Máxima Instântanea (MW)") wb = wb.setParameter("Escala de Tempo DM Simp 4", "Dia") wb = wb.setParameter("Início Primeiro Período DM Simp 4","01/01/2017") wb = wb.setParameter("Fim Primeiro Período DM Simp 4","12/31/2017") # 参数更新完成后再获取工作表 ws = wb.getWorksheet("Simples Demanda Máxima Semana Dia")
步骤2:打印可筛选选项确认字段和值
在调用select前新增调试代码,打印当前工作表所有可筛选的字段及对应可选值,确认字段名、Norte是否真实存在:
# 新增调试代码 selectable = ws.getSelectableItems() for item in selectable: print(f"字段名:{item['column']}") print(f"可选值:{item['values']}\n")
运行后检查输出:
- 确认子系统对应的字段名是否真的是
ATRIB(Subsistema),可能实际字段名是Subsistema或带其他前后缀 - 确认可选值列表中是否存在
Norte,是否有前后空格、拼写差异(比如是否为Região Norte)
步骤3:修正筛选写法
确认字段名和值正确后,select方法的第二个参数建议传入列表格式,避免单值匹配异常:
# 替换你原来的ws.select行,字段名和值替换为上一步打印的实际内容 ws.select("ATRIB(Subsistema)", ["Norte"]) # 筛选后重新获取工作表数据 ws = wb.getWorksheet("Simples Demanda Máxima Semana Dia")
步骤4:修复CSV导出路径问题
你当前的导出路径用了反斜杠,Python中反斜杠是转义字符,会导致路径识别错误,修改为以下任意一种写法即可:
# 方法1:加r标记为原始字符串 ws.data.to_csv(r'C:\Temp\Data.csv') # 方法2:用正斜杠 ws.data.to_csv('C:/Temp/Data.csv')
内容的提问来源于stack exchange,提问作者PMarsh
相关产品推荐
相关产品推荐

