Я пытаюсь перехватить веб-ценность, что всегда меняется на веб-сайте, и я хочу получить фактическое значение.
Я попробовал это:
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?
Причина, по которой вы получаете ключевую ошибку, - это вложенная структура вашего возвращаемого словаря. 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)
Вам необходимо указать полный "путь" к требуемому ключу:
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