首页 > 解决方案 > JSON 加载返回字符串

问题描述

我有以下代码:

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 对象中的数据?

标签: pythonjsonencoding

解决方案


你必须改变[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

推荐阅读