Уважаемые, мне нужно преобразовать json-данные о госпитализации Covid с правительственной веб-страницы: https://onemocneni-aktualne.mzcr.cz/covid-19#panel3-hospitalization
Я просматриваю веб-страницу и идентифицирую таблицу в показанном ниже html-коде.
Я использовал следующий код Python и получил следующий результат:
import bs4 as bs
import urllib.request
import json
source = urllib.request.urlopen("https://onemocneni-aktualne.mzcr.cz/covid-19#panel3-hospitalization")
soup = bs.BeautifulSoup(source)
js_test = soup.find("div", id = "js-hospitalization-table-data")
#Convert to JSON object
jsonData = json.loads(js_test.attrs["data-table"])
print (jsonData['body'])
Спасибо.
Я думал, что файл .csv...
Судя по полученному результату, похоже, что data-table
находится в формате JSON, поэтому вам нужно будет преобразовать данные в этом формате в CSV, что может быть или не быть возможным, потому что последний не поддерживает вложенные структуры данных, в то время как другой делает.
я пытался импортировать эти данные json в xls или Power BI, но безуспешно. поэтому моя идея заключалась в том, чтобы извлечь текст за «телом»: и преобразовать данные в [ xxx ] в файл .csv .. есть идеи? Спасибо
Извините, я не знаю, как использовать BeautifulSoup, но если вы можете получить от него только значение data-table
или то, что он возвращает, то я мог бы помочь преобразовать его в формат CSV.
уфф. вот:
импортировать bs4 как bs import urllib.request import json source = urllib.request.urlopen("onemocneni-aktualne.mzcr.cz/…) суп = bs.BeautifulSoup(источник) js_test = суп.найти("div", id = "js-hospitalization-table-data") jsonData = json.loads(js_test.attrs["data-table"]) #Convert to JSON Object.print (jsonData['body'])
Пожалуйста, добавьте код к вашему вопросу.
Пожалуйста. см. выше, а точнее ниже
Извините, как я уже сказал, я не знаком с BeautifulSoup (и даже не установил его).
Спасибо. вы в любом случае, очень помогаете двигаться дальше
Нужные вам данные находятся в формате JSON, вы можете преобразовать их в словарь Python (dict
) и получить данные под ключом body
с помощью встроенного модуля json.
import json
import bs4 as bs
import urllib.request
source = urllib.request.urlopen(
"https://onemocneni-aktualne.mzcr.cz/covid-19#panel3-hospitalization"
)
soup = bs.BeautifulSoup(source, "html.parser")
json_data = json.loads(
soup.find("div", id = "js-hospitalization-table-data")["data-table"]
)
print(type(json_data))
print(*json_data["body"])
Выход (частичный):
<class 'dict'>
['01.03.2020', 0, 0, 0, 0, 0] ['02.03.2020', 0, 0, 0, 0, 0] ... ['20.12.2020', 4398, 588, 0.1337, 34796, 0.7152]
Большое спасибо. Однако я не нашел, как преобразовать этот словарь в таблицу или фрейм данных. не могли бы вы добавить это для меня? Спасибо
@Jara Это другой вопрос. См. Как конвертировать файл JSON в Dataframe. Если вы все еще застряли, рассмотрите возможность задать новый вопрос здесь, в Stackoverflow.
Что такое «таблица данных»?