当前位置: 首页 > 面试题库 >

如何抓取公共画面的仪表板?

诸俊才
2023-03-14
问题内容

我每天都需要对公共Tableau仪表板上的可用数据进行更新。在定义了感兴趣的参数(时间序列频率,时间序列间隔等)之后,仪表板允许您下载序列。

如果可以使用Python或R自动将这些系列下载到数据库中,我的生活会相对容易一些。我已经尝试分析页面上的请求,但无法获得更多帮助。有什么办法可以自动化这个过程?

仪表板:https
:
//tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima?
:
embed=
y&:
showAppBanner=
false&:
showShareOptions=
true&:
display_count=
no&:
showVizHome=no


问题答案:

这个答案与此类似,但是初始URL页和tableau基本URL不同。流程/算法本质上保持不变,但我将详细说明以下步骤:

图形是根据API的结果在JS中生成的:

POST https://tableau.ons.org.br/ROOT_PATH/bootstrapSession/sessions/SESSION_ID

SESSION_ID参数(除其他外)位于tsConfigContainer用于构建iframe的URL的textarea中。

从https://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima?:embed=y&:showAppBanner=false&:showShareOptions=true&:display_count=no&:showVizHome=no开始:

  • 有一个IDtsConfigContainer带有一堆json值的textarea
  • 提取session_id和根路径(vizql_root
  • https://tableau.ons.org.br/ROOT_PATH/bootstrapSession/sessions/SESSION_ID使用sheetIdas表单数据进行POST
  • 从结果中提取json(结果不是json)

html" target="_blank">代码:

import requests
from bs4 import BeautifulSoup
import json
import re

url = "https://tableau.ons.org.br/t/ONS_Publico/views/DemandaMxima/HistricoDemandaMxima"

r = requests.get(
    url,
    params= {
        ":embed":"y",
        ":showAppBanner":"false",
        ":showShareOptions":"true",
        ":display_count":"no",
        "showVizHome": "no"
    }
)
soup = BeautifulSoup(r.text, "html.parser")

tableauData = json.loads(soup.find("textarea",{"id": "tsConfigContainer"}).text)

dataUrl = f'https://tableau.ons.org.br{tableauData["vizql_root"]}/bootstrapSession/sessions/{tableauData["sessionid"]}'

r = requests.post(dataUrl, data= {
    "sheet_id": tableauData["sheetId"],
})

dataReg = re.search('\d+;({.*})\d+;({.*})', r.text, re.MULTILINE)
info = json.loads(dataReg.group(1))
data = json.loads(dataReg.group(2))

print(data["secondaryInfo"]["presModelMap"]["dataDictionary"]["presModelHolder"]["genDataDictionaryPresModel"]["dataSegments"]["0"]["dataColumns"])


 类似资料:
  • 共享仪表板 您也可以向其他用户共享一个 Kibana 仪表板的链接,或者将仪表板嵌入到网页中。用户必须具有 Kibana 权限才能访问嵌入式仪表板。 如何分享一个仪表板: 点击侧边导航栏中的 Dashboard 。 打开您想共享的仪表板。 点击 Share 。 复制您想分享的链接或者您想嵌套的 iframe。您可以分享动态仪表板或者当前时间点的静态快照。 当共享仪表板快照链接的时候,请使用 Sho

  • 问题内容: 请告知如何抓取AJAX页面。 问题答案: 概述: 首先,所有屏幕抓取都需要手动查看要从中提取资源的页面。在处理AJAX时,通常只需要分析一些内容,而不仅仅是HTML。 在处理AJAX时,这仅意味着您想要的值不在您请求的初始HTML文档中,而是将执行javascript,该javascript请求服务器提供您想要的其他信息。 因此,您通常可以简单地分析javascript并查看javas

  • 问题内容: 如何使用python2.7获取公共IP?不是私有IP。 问题答案: 当前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 以下是可以利用上述每种方法的确切方法。 ip.42.pl 这是我找到的第一个选项。对于脚本来说非常方便,您不需要在这里进行JSON解析。 jsonip.com 似乎该域的唯一目的是返回JSON中的IP地址。 httpb

  • 问题内容: 我有两个数组: 我如何获得这两个数组中的常见项目列表 我无法使用,因为我想比较2个数组。 问题答案: 您还可以结合使用和: 我们考虑以下代码片段: 我用short和long s(10到100 s)(全部随机生成)做了一些(人工)基准测试。我总是用 我得到以下结果: 如果您不只转换为a,则更可取 结果说明 使用该方法使用“蛮力”搜索,该搜索具有时间复杂度 ,而与该方法相反。然而从转换到和

  • 我有很多表,但它们有共同的自动增量。例如,我创建了我的第一个用户,它的id为1,然后我创建了一条消息,它的id为2,然后我创建了一条对消息的注释,它的id为3,但它的id应该为1,因为我没有任何其他注释或消息 我的用户: 我的信息: 我的评论是: 我将感谢任何帮助。

  • 本文向大家介绍laravel框架如何设置公共头和公共尾,包括了laravel框架如何设置公共头和公共尾的使用技巧和注意事项,需要的朋友参考一下 可以新建一个布局模板,layout.blade.php 在layout中设置公共头、尾 再新建个内容模板,content.blade.php 继承布局模板 当然公共头部也可以再单独写一个模板header.blade.php 在layout中用@includ