#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))
Из этого следует, что ваш код работает правильно.