Как сделать число с веб-сайта API?

1

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

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

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?

  • 0
    взглянуть на скрап , это очень просто
Теги:
python-requests
web-scraping

2 ответа

0

Причина, по которой вы получаете ключевую ошибку, - это вложенная структура вашего возвращаемого словаря. 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)
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню