如何从API网站上获取数字?

2024-06-08 20:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着给网站一个价值观,网站上总是在变化的东西,我想得到实际的价值观。你知道吗

我试过这个:

my_url = requests.get('https://www.telekom.hu/shop/categoryresults/https://www.telekom.hu/shop/categoryresults/?N=10994&contractType=list_price&instock_products=1&Ns=sku.sortingPrice%7C0%7C%7Cproduct.displayName%7C0&No=0&Nrpp=9&paymentType=FULL')

data = my_url.text
parsed = json.loads(data)
my_number = parsed["totalNumRecs"]
print my_number

但我得到一个错误信息:

"my_number = parsed["totalNumRecs"]
KeyError: 'totalNumRecs'"

我怎么了?为什么我拿不回这个在totalNumRecs里面的号码?你知道吗


Tags: httpsurlnumberdata网站mywwwshop
2条回答

您需要指定所需密钥的完整“路径”:

my_url = requests.get('https://www.telekom.hu/shop/categoryresults/https://www.telekom.hu/shop/categoryresults/?N=10994&contractType=list_price&instock_products=1&Ns=sku.sortingPrice%7C0%7C%7Cproduct.displayName%7C0&No=0&Nrpp=9&paymentType=FULL')
data = my_url.json()
my_number = data['MainContent'][0]['contents'][0]['totalNumRecs']
print my_number

出现键错误的原因是返回的字典的嵌套结构。totalNumRecs实际上是存在的,但不在dict的顶层。请看一下:

Find all occurrences of a key in nested python dictionaries and lists

这是一种遍历未知结构的字典并查找特定键的所有出现处的方法。受上述链接启发,我使用以下代码找到了所需的键及其值:

import requests
import json


def gen_dict_extract(key, var):
    if hasattr(var, 'items'):
        for k, v in var.iteritems():
            if k == key:
                yield v
            if isinstance(v, dict):
                for result in gen_dict_extract(key, v):
                    yield result
            elif isinstance(v, list):
                for d in v:
                    for result in gen_dict_extract(key, d):
                        yield result



my_url = requests.get('https://www.telekom.hu/shop/categoryresults/https://www.telekom.hu/shop/categoryresults/?N=10994&contractType=list_price&instock_products=1&Ns=sku.sortingPrice%7C0%7C%7Cproduct.displayName%7C0&No=0&Nrpp=9&paymentType=FULL')

data = my_url.text
parsed = json.loads(data)

result = gen_dict_extract('totalNumRecs', parsed)

for i in result:
    print(i)

相关问题 更多 >