JSON загружает возвращаемую строку - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующий код:

url = 'https://finance.yahoo.com/quote/SPY'
result = requests.get(url)

c = result.content
html = BeautifulSoup(c, 'html.parser')
scripts = html.find_all('script')

sl =[]
for s in scripts:

     sl.append(s)

s = (sl[-3])
s = s.contents
s = str(s)
s = s[119:-16]
s = json.dumps(s)
json_data = json.loads(s)

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

Однако, когда я пытаюсь сбросить данные в файл и ввести его в онлайн-анализатор json, анализатор может правильно прочитать данные json и распознать ключи и значения.

Как это исправитьчтобы я мог правильно обращаться к данным внутри объекта json?

1 Ответ

1 голос
/ 23 апреля 2019

Вы должны изменить [119:-16] на [112:-12], и вы можете получить json как словарь

import requests
from bs4 import BeautifulSoup
import json

url = 'https://finance.yahoo.com/quote/SPY'
result = requests.get(url)

html = BeautifulSoup(result.content, 'html.parser')
script = html.find_all('script')[-3].text
data = script[112:-12]

json_data = json.loads(data)

print(type(json_data))
#print(json_data)
print(json_data.keys())
print(json_data['context'].keys())
print(json_data['context']['dispatcher']['stores']['PageStore']['currentPageName'])

Результат:

<class 'dict'>
dict_keys(['context', 'plugins'])
dict_keys(['dispatcher', 'options', 'plugins'])
quote
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...