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

如何从嵌入在网页中的Tableau图形中提取工具提示值

罗昕
2023-03-14
问题内容

我试图找出是否存在一种方法以及如何使用python从网页中的Tableau嵌入式图形中刮取工具提示值。

这是当用户将鼠标悬停在条形图上时带有工具提示的图形的示例:

https://public.tableau.com/views/NumberofCOVID-19
Patientsadmittedordischarged / DASHPublicpage_ Patients Discharges?:embed =
y&:showVizHome = no&:host_url =
https%3A%2F%2Fpublic.tableau.com%2F&:embed_code_version = 3&:tabs = no&
:toolbar = yes&:animate_transition = yes&:display_static_image =
no&:display_spinner = no&:display_overlay = yes&:display_count = yes&publish =
yes&:loadOrderID =
1

我从我要从中抓取的原始网页中获取了该网址:

https://covid19.colorado.gov/hospital-
data

任何帮助表示赞赏。


问题答案:

该图形似乎是由JS中的API结果生成的,如下所示:

POST https://public.tableau.com/TITLE/bootstrapSession/sessions/SESSION_ID

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

从https://covid19.colorado.gov/hospital-
data
开始:

  • 检查类的元素 tableauPlaceholder
  • 获取param具有属性的元素name
  • 它给你的网址: https://public.tableau.com/views/{urlPath}
  • 上一个链接为您提供了一个id为ID的textarea,tsConfigContainer其中包含一堆json值
  • 提取session_id和根路径(vizql_root
  • https://public.tableau.com/ROOT_PATH/bootstrapSession/sessions/SESSION_ID使用sheetIdas表单数据进行POST
  • 从结果中提取json(结果不是json)

代码:

import requests
from bs4 import BeautifulSoup
import json
import re

r = requests.get("https://covid19.colorado.gov/hospital-data")
soup = BeautifulSoup(r.text, "html.parser")

# get the second tableau link
tableauContainer = soup.findAll("div", { "class": "tableauPlaceholder"})[1]
urlPath = tableauContainer.find("param", { "name": "name"})["value"]

r = requests.get(
    f"https://public.tableau.com/views/{urlPath}",
    params= {
        ":showVizHome":"no",
    }
)
soup = BeautifulSoup(r.text, "html.parser")

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

dataUrl = f'https://public.tableau.com{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"])

从那里您拥有所有数据。您将需要寻找拆分数据的方式,因为似乎所有数据都是通过单个列表转储的。可能需要查看JSON对象中的其他字段。



 类似资料:
  • 问题内容: 我有一系列的svg矩形(使用D3.js),我想在鼠标悬停时显示一条消息,该消息应被用作背景的框包围。它们应彼此完全对齐,并与矩形(顶部和中心)完全对齐。做这个的最好方式是什么? 我尝试使用“ x”,“ y”,“ width”和“ height”属性添加svg文本,然后在svg rect之前添加。问题是文本的参考点在中间(因为我想使它居中对齐),但是对于矩形,它是左上角的坐标,而且我想在

  • 我有一个Excel工作表,其中一栏填充了专利号。我需要提取每个相应专利的标题,并将其放在专利号旁边的单元格中。因此,代码应执行以下操作: 访问espacenet.com并打开需要名称的专利号。 获取标题。 将其放在所需单元格的Excel工作表中。 这是一个完美适用于第一个专利号的代码,但在这之后会立即出现错误。错误显示:“运行时错误'-2147417848(80010108)': 自动化错误调用的

  • 我有一系列svg矩形(使用D3.js),我想在mouseover上显示一条消息,该消息应该被一个充当背景的框包围。它们应该彼此完全对齐,并与矩形(在顶部和居中)完全对齐。做这件事最好的方法是什么? 我尝试使用“x”、“y”、“width”和“height”属性添加一个svg文本,然后预置一个svg rect。问题是文本的参考点在中间(因为我希望它居中对齐,所以我使用了),但对于矩形,它是左上的坐标

  • 问题内容: 使用Java,如何从给定的网页中提取所有链接? 问题答案: 将Java文件下载为纯文本/ html格式,并通过Jsoup或 html clean传递,两者相似,甚至可以用于解析格式错误的html 4.0语法,然后可以使用流行的HTML DOM解析方法,例如getElementsByName(“ a”)或在jsoup中它甚至很酷,您只需使用 并找到所有链接,然后使用 取自http://j

  • 问题内容: 我正在用Java开发一个应用程序,该应用程序可以从不同的网页获取文本信息并将其汇总为一页。例如,假设我在不同的网页(例如印度教,印度时报,政治家等)上都有新闻。该应用程序应该从这些页面的每个页面中提取要点,并将它们整合为一条新闻。该应用程序基于Web内容挖掘的概念。作为该领域的初学者,我不知道从哪里开始我浏览了一些研究论文,这些论文将消除噪声作为构建此应用程序的第一步。 因此,如果给我

  • 我想写一篇文章在我的标题,但有一个字是一个像“链接”或“a”点击链接。标题只等待一个字符串。