【问题标题】:How can I fetch specific information for a dictionary thats in an api如何获取 api 中字典的特定信息
【发布时间】:2021-11-03 03:27:20
【问题描述】:

所以我正在编写一个可以给我某些信息的代码。网址https://api.brawlhalla.com/player/28472387/ranked?api_key=MY_API_KEY

提供有关我的个人资料的信息。当以文本形式打印时,我得到

{
    "name": "Twitter: ufrz_",
    "brawlhalla_id": 28472387,
    "rating": 2093,
    "peak_rating": 2110,
    "tier": "Diamond",
    "wins": 140,
    "games": 257,
    "region": "US-E",
    "global_rank": 0,
    "region_rank": 0,
    "legends": [
        {
            "legend_id": 3,
            "legend_name_key": "bodvar",
            "rating": 870,
            "peak_rating": 870,
            "tier": "Tin 4",
            "wins": 2,
            "games": 4
        },
        {
            "legend_id": 4,
            "legend_name_key": "cassidy",
            "rating": 968,
            "peak_rating": 968,
            "tier": "Bronze 2",
            "wins": 0,
            "games": 0
        },
        {
            "legend_id": 5,
            "legend_name_key": "orion",
            "rating": 1131,
            "peak_rating": 1131,
            "tier": "Silver 1",
            "wins": 1,
            "games": 3
        },

(不是整页。)

这是我用来获取这个的代码

import requests

url = "https://api.brawlhalla.com/player/28472387/ranked?api_key= MY_API_KEY"


r = requests.get(url)
print(r.text)

例如,现在我将如何获取我的评分,而不是实际的单词,而是数字“2093”,我尝试了某种方式,但它们没有用。我正在使用 bs4 和 request 和新的,所以我真的不知道我会如何得到这个。

(只想对措辞不佳的问题表示抱歉,我真的不知道我的问题如何措辞,所以我提前道歉)

【问题讨论】:

  • 您需要显示您编写的代码以尝试获取该值。此请求返回一个 JSON 对象。您可能不会将该对象转换为 Python 字典。
  • 我提供了代码。
  • 这能回答你的问题吗? How to convert request.data to dict?
  • 试试data = r.json()。如果可行,您有一本字典,可以使用data["name"] 中的地址。
  • 成功了!感谢 tdelaney 感谢您的帮助!

标签: python beautifulsoup python-requests


【解决方案1】:

首先,您必须将结果转换为 json 对象:

data = r.json()

然后,您可以使用data['rating'] 请求

关于你的问题:

我将如何获得 legend_key_name "bodvar" 的排名,我如何才能具体获得该传奇排名。

for legend in data['legends']:
    if legend['legend_name_key'] == "bovdar"
        print(legend['rating'])
        return legend['rating']

或使用函数:

def getLegendByName(data, legendName):
    for legend in data['legends']:
        if legend['legend_name_key'] == legendName:
            return legend

    return None

legendName = "bodvar"            
data = r.json()
legend = getLegendByName(data, legendName)
if legend is not None:
    legendRating = legend['rating']
else
    print("There is no legend that exists with this name"

【讨论】:

  • 当我尝试通过函数执行此操作时,它告诉我“legendName”未定义。当我以另一种方式尝试时,它说 return 只能在函数中使用,当我删除 return 语句并保留 print 语句并运行它时,它什么也不打印。
  • 你必须定义你的 legendName:legendName = "bovdar",我更新了我的帖子
  • 引发另一个错误“legendRating = legend['rating'] TypeError: 'NoneType' object is not subscriptable”。
  • 因为我写的是“Bovdar”而不是“Bodvar”,所以我更新了:如果没有找到图例,你必须返回 None
猜你喜欢
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
相关资源
最近更新 更多