我有以下代码:
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 对象中的数据?
你必须
把[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