python - 抓取公共画面仪表板
问题描述
这是如何抓取公共画面仪表板的后续问题?以及使用令人印象深刻的 Tableau 刮板库。库可以选择工作表中的项目,但无法识别请求的值。
我的代码是:
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()
# Set units
wb.setParameter("Selecione DM Simp 4", "Demanda Máxima Instântanea (MW)")
# Set to daily resolution
wb.setParameter("Escala de Tempo DM Simp 4", "Dia")
# Set the start date
wb.setParameter("Início Primeiro Período DM Simp 4","01/01/2017")
# Set the end date
wb = wb.setParameter("Fim Primeiro Período DM Simp 4","12/31/2017")
# Retrieve daily worksheet
ws = wb.getWorksheet("Simples Demanda Máxima Semana Dia")
# Select subsystem
ws.select("ATRIB(Subsistema)", "Norte")
(这是我被警告的地方“tableauScraper - 错误 - 'Norte' 不在列表中”)
# show data
print(ws.data)
# export data
ws.data.to_csv('C:\Temp\Data.csv')
任何帮助,将不胜感激。
解决方案
我已经更新了库以使其正常工作(我是TableauScraper library的作者)。此用例存在多个问题:
- 参数/过滤器在 API 调用之间没有保留,在这种情况下,
setParameter
没有返回初始过滤器 - 参数值的格式为
Fim Primeiro Período DM Simp 4
(31/12/2017
DD/MM/YYYY) - 它实际上是必须执行
filter
的 API 调用,而不是API 调用。select
在这种情况下,它是:
wb = ws.setFilter("Subsistema", "N")
Norte
是一个标签,您可以使用ws.getFilters()
- 此仪表板使用故事点,过滤器嵌入其中。直到现在才实现故事点内的解析过滤器
- 过滤器 API 调用指定为了使 API 调用工作(特定于故事点)必须实现的
storyboard
和哪些storypointId
此外,用于获取/设置过滤器的工作表是Simples Demanda Máxima Ano
(即使过滤器设置为每天)
使用最新版本,以下工作:
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()
# Set units
wb.setParameter("Selecione DM Simp 4", "Demanda Máxima Instântanea (MW)")
# Set to daily resolution
wb.setParameter("Escala de Tempo DM Simp 4", "Dia")
# # Set the start date
wb.setParameter("Início Primeiro Período DM Simp 4", "01/01/2017")
# Set the end date
wb = wb.setParameter("Fim Primeiro Período DM Simp 4", "31/12/2017")
# Retrieve daily worksheet
ws = wb.getWorksheet("Simples Demanda Máxima Semana Dia")
print(ws.data[['Data Escala de Tempo 1 DM Simp 4-value',
'SOMA(Selecione Tipo de DM Simp 4)-value', 'ATRIB(Subsistema)-alias']])
ws = wb.getWorksheet("Simples Demanda Máxima Ano")
print(ws.getFilters())
# Select subsystem
wb = ws.setFilter("Subsistema", "N")
ws = wb.getWorksheet("Simples Demanda Máxima Semana Dia")
print(ws.data[['Data Escala de Tempo 1 DM Simp 4-value',
'SOMA(Selecione Tipo de DM Simp 4)-value', 'ATRIB(Subsistema)-alias']])
repl.it:https://replit.com/@bertrandmartel/TableauONSDemandaMaxima _
推荐阅读
- arrays - Swift 4:如何从文件中写入/加载结构
- android - 在 Android 上使用 Instrumentation 进行 Clang 分析
- javascript - Rails:typeahead.js 下拉列表返回重复项或已删除的对象
- uwp - 用 appbarbutton 替换命令栏中的更多选项按钮
- amazon-s3 - S3 下载 pdf - REST API
- winapi - 在 win32 应用程序中嵌入 cmd 并且文本不可选
- python - 如何将 python 程序设置为 Windows 中的默认 Web 浏览器?
- c++ - c++ - 在类内或类外访问时相同变量的 cout 但不同的输出
- swift - 如何使用 oauth2 和 swift 对自定义 Web 服务进行身份验证
- jquery - 用类将每个元素包装成 div 并包装子元素