Beautiful Soup 解析来自 JSON 的值

Beautiful Soup parsing values from JSON

我正在做一个小项目,我有这个网站: https://earthquake.usgs.gov/ws/designmaps/nehrp-2020.json?latitude=20.85&longitude=-156.5&riskCategory=IV&siteClass=Default&title=

我需要解析“sds”和“sd1”的值。

我尝试过使用以下代码:

from urllib import request
from bs4 import BeautifulSoup
import json

url = "https://earthquake.usgs.gov/ws/designmaps/nehrp-2020.json?latitude=20.85&longitude=-156.5&riskCategory=IV&siteClass=Default&title="
html = request.urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")

site_json = json.loads(soup.text)
print([d.get("sd1") for d in site_json["response"] if d.get("sd1")])

作为回应,我得到:

Traceback (most recent call last):
  File "C:\Users\Bigboi\PycharmProjects\importpaska\main.py", line 10, in <module>
    print([d.get("sd1") for d in site_json["response"] if d.get("sd1")])
  File "C:\Users\Bigboi\PycharmProjects\importpaska\main.py", line 10, in <listcomp>
    print([d.get("sd1") for d in site_json["response"] if d.get("sd1")])
AttributeError: 'str' object has no attribute 'get'

Process finished with exit code 1

谁能帮帮我?

仅使用 requests 模块即可获取所需数据

    import requests
    import json

    url = "https://earthquake.usgs.gov/ws/designmaps/nehrp-2020.json?latitude=20.85&longitude=-156.5&riskCategory=IV&siteClass=Default&title="
    data=requests.get(url).json()
    
    # data=json.dumps(data)
    # with open('data.json','w') as f:
    #     f.write(data)
    
    sds=data['response']['data']['sds']
    sd1=data['response']['data']['sd1']
    print(sds)
    print(sd1)

输出:

0.59
0.38

site_json["response"] 是字典,您不能那样迭代,而且 site_json["response"] 中没有名为 sd1 的键。如果你想解析 sd1 和 sds 的值,试试这个:

print(site_json["response"]["data"]["sd1"])

print(site_json["response"]["data"]["sds"])