Проблемы с очисткой общедоступной панели инструментов Tableau

#python #screen-scraping

#python #очистка экрана

Вопрос:

Я пытаюсь очистить эту панель инструментов Tableau, однако я столкнулся с проблемой, из-за которой я пропускаю значения в своих выходных данных. В частности, похоже, что мой код не будет очищать / печатать повторяющиеся значения (значение, которое отображается дважды, будет очищено / напечатано только один раз).

Вот код, который я использую:

 import requests
from bs4 import BeautifulSoup
import json
import re

r = requests.get("https://public.tableau.com/views/COVID-19HospitalsDashboard/Hospitals?:embed=yamp;:showVizHome=no", 
    params = {
    ":embed": "y",
    ":showVizHome": "no",
    ":host_url": "https://public.tableau.com/",
    ":embed_code_version": 3,
    ":tabs": "no",
    ":toolbar": "no",
    ":animate_transition": "yes",
    ":display_static_image": "no",
    ":display_spinner": "no",
    ":display_overlay": "yes",
    ":display_count": "yes",
    ":language": "en",
    ":loadOrderID": 0
})
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"])
 

Ответ №1:

Я просмотрел как текст вашего необработанного запроса, так и данные поиска по регулярным выражениям и не могу найти разницу, которую вы обсуждаете. Как точки в необработанных данных из запроса, так и ваш собственный поиск по регулярным выражениям возвращают 1132 совпадения, используя следующее:

 x = data["secondaryInfo"]["presModelMap"]["dataDictionary"]["presModelHolder"]["genDataDictionaryPresModel"]["dataSegments"]["0"]["dataColumns"][0]["dataValues"]

duplicates = set()
# loop through elements and find matches
for i in x:
    if i not in duplicates:
        duplicates.add(i)

print(len(duplicates))
 

Из этого следует, что ваш код работает правильно.