Не получается использовать словарь, который получен путём парсинга
С помощью Selenium Python получаю содержимое тега script, которое является словарем. Но при попытке получить его ключи получал ошибку что это строка. Пытаюсь преобразовать в словарь с помощью eval, но тоже получаю ошибку. Пробовал использовать eval, который из библиотеки, та же ошибка. Вот код:
script_raw = driver.find_element_by_id('__NEXT_DATA__').get_attribute('innerHTML')
print(script_raw)
script = eval(str(script_raw))
print(script)
Ошибка:
script = eval(str(script_raw))
File "<string>", line 1, in <module>
NameError: name 'null' is not defined
Первый принт выводит следующий текст:
{"props":{"pageProps":{"initialApolloState":{"ROOT_QUERY":{"__typename":"Query","sticker({\"input\":{\"id\":\"sticker-advent-katowice-2019\"}})":{"_id":"sticker-advent-katowice-2019","name":"Наклейка | advent | Katowice 2019","title":" advent | Katowice 2019"...
Не понимаю в чём ошибка. Буду благодарен за помощь!
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Скорее всего у вас там где-то в недрах текста есть элемент вроде такого:
"some_elementh": null
Питон не понимает, что такое null и во что ему его преобразовывать когда он делает eval, это не питоновский объект. Есть два варианта решения:
- Завести заранее переменную
null = None, тогдаevalвозможно отработает, если не споткнётся на чём-то ещё - Работать с
jsonкак сjson, а не через небезопасныйeval- используйте библиотекуjsonи функциюjson.loads(script_raw)для разбораjsonструктуры в питоновские объекты