首页 > 解决方案 > 抓取公共画面仪表板

问题描述

这是如何抓取公共画面仪表板的后续问题?以及使用令人印象深刻的 Tableau 刮板库。库可以选择工作表中的项目,但无法识别请求的值。

画面仪表板在这里:https ://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima?:embed=y&:display_count=y&:showAppBanner=true&:showVizHome=y

我的代码是:

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')

任何帮助,将不胜感激。

标签: pythonweb-scraping

解决方案


我已经更新了库以使其正常工作(我是TableauScraper library的作者)。此用例存在多个问题:

  • 参数/过滤器在 API 调用之间没有保留,在这种情况下,setParameter没有返回初始过滤器
  • 参数值的格式为Fim Primeiro Período DM Simp 4( 31/12/2017DD/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 _


推荐阅读