Как сделать число с веб-сайта API? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь определить значение, которое всегда изменяется на веб-сайте, и я хочу получить фактическое значение.

Я пробовал это:

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?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Необходимо указать полный «путь» к требуемому ключу:

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
0 голосов
/ 04 декабря 2018

Причиной получения ключевой ошибки является вложенная структура возвращаемого словаря.totalNumRecs фактически присутствует, но не на верхнем уровне dict.Посмотрите на:

Найти все вхождения ключа во вложенных словарях и списках Python

Это способ обхода словаря неизвестной структуры и поиска всех вхождений.конкретного ключа.Мне удалось найти нужный ключ и его значение с помощью следующего кода, вдохновленного вышеупомянутой ссылкой:

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)
...