С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
1

KeyError при парсинге AJAX(json).Python 3.6.2

02.09.2017, 17:33. Показов 2243. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, решил написать парсер на python одного сайта, где данные добавляются динамически с помощью javascript.И на раннем этапе написания появилась проблема. Пытаюсь добавить значения в список через цикл, код привел ниже.

Если в цикле оставить только NaP.append(swap), то все работает, но с ключом ‘price’ проблема.Этот скрипт ранее я писал на PHP и там все работало.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!C:\Users\Sasha1\AppData\local\Programs\Python\Python36-32\python.exe
import sys
import requests
from bs4 import BeautifulSoup
print ("Content-type: text/html\n")
 
swap = requests.get('https://h1z1swap.com/api/inventory/bot').json()
length = len(swap['items'])
itemsCount = range(0,length)
NaP = []
 
for i in itemsCount:
    NaP.append(swap['items'][i]['price'])
    NaP.append(swap['items'][i]['marketName'])
    
print(NaP)
Вот кусок из JSON страницы, там видно что ключи marketName и price есть, но с price почему то проблема

JSON
1
{"success":true,"items":[{"marketName":"Skull Hoodie","assetIds":["169271650161648522","169273228628675791","169278671559235740","169277879135954469","169275317986837427","169275974420544198","169273228632873684","169272276333623800","169273228643422938","169272276334020692","169272343076619250","169278671565276732","169273228637094580","169272276331416648","169275974420804142","169275974415904692","169272343071378571","169274358364531132","169277562749562718","169272343073552626","169272276329410829","169277879118138187","169272343082194513","169277562737576539","169278671569785981","169271650161474335","169263449094508991","169273228628599290","169272343092479691","169276290706677530","169272343086180623","169278354600277908","169276905791465339","169275974420388627","169277879147910518"],"image":"iGm5OjgdO5r8OoJ7TJjS39tTyGCTzzQwmWl1QPRXu8oaf69-NOHLAbqw_23aLe8AcRQ8-3uyKA7_CGvsJYds9U65FMF7i6AbXTJ8PDm57EliZdK7KLPuuh3dxC3m4m05gD06zfiP1MVjt5Cq5YiyCimcXB5aHZvQDjEc8f7q","quantity":35,"selectedAmount":0,"botId":1,"rarity":"skin","price":0.09}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2017, 17:33
Ответы с готовыми решениями:

Проблема при парсинге JSON
Создал программу, которая скачивает данные пользователя с vk api, парсит их и говорит, онлайн он...

Ошибка при парсинге JSON
Нужно распарсить JSON и информацию оттуда записать в label. При попытке присвоения label'у текста...

Ошибка при парсинге Json
Ошибка возникаєт в парсенге, понять что он от меня хочет не могу. Сначала я делал всё как...

Ошибки при парсинге html и json
Здравствуйте, уже сутки бьюсь с кодировкой, подбирал и так и эдак, библиотеку специальную нашёл, а...

Рекурсивный спуск во вложенный объект при парсинге JSON
Доброго времени суток, форумчане. Пытаюсь реализовать задачу копирования настроек из одного JSONа и...

6
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
03.09.2017, 15:40 2
Лучший ответ Сообщение было отмечено Resistanse как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python3
from json import JSONDecoder
 
t = '''\
{
    "success": true,
    "items": [
        {
            "marketName": "Skull Hoodie",
            "assetIds": [
                "169271650161648522",
                "169273228628675791",
                "169278671559235740",
                "169277879135954469",
                "169275317986837427",
                "169275974420544198",
                "169273228632873684",
                "169272276333623800",
                "169273228643422938",
                "169272276334020692",
                "169272343076619250",
                "169278671565276732",
                "169273228637094580",
                "169272276331416648",
                "169275974420804142",
                "169275974415904692",
                "169272343071378571",
                "169274358364531132",
                "169277562749562718",
                "169272343073552626",
                "169272276329410829",
                "169277879118138187",
                "169272343082194513",
                "169277562737576539",
                "169278671569785981",
                "169271650161474335",
                "169263449094508991",
                "169273228628599290",
                "169272343092479691",
                "169276290706677530",
                "169272343086180623",
                "169278354600277908",
                "169276905791465339",
                "169275974420388627",
                "169277879147910518"
            ],
            "image": "iGm5OjgdO5r8OoJ7TJjS39tTyGCTzzQwmWl1QPRXu8oaf69-NOHLAbqw_23aLe8AcRQ8-3uyKA7_CGvsJYds9U65FMF7i6AbXTJ8PDm57EliZdK7KLPuuh3dxC3m4m05gD06zfiP1MVjt5Cq5YiyCimcXB5aHZvQDjEc8f7q",
            "quantity": 35,
            "selectedAmount": 0,
            "botId": 1,
            "rarity": "skin",
            "price": 0.09
        }
    ]
}
'''
 
swap = JSONDecoder().decode(t)
# swap = requests.get('https://h1z1swap.com/api/inventory/bot').json()
 
for i in swap['items']:
    print(i['price'])
    print(i['marketName'])
1
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
03.09.2017, 15:44  [ТС] 3
Там была ошибка из-за того, что у некоторых элементов вместо ключа price был ключ error.Видимо когда я писал этот скрипт на php, то он просто игнорировал эти ошибки.В любом случае спасибо за ответ)
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
03.09.2017, 15:48 4
Цитата Сообщение от Resistanse Посмотреть сообщение
то он просто игнорировал эти ошибки.
PHP не игнорировал, а ругался в логи. Кто бы их читал...
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
03.09.2017, 15:50  [ТС] 5
Ну да,это конечно не правильно,но все работало и я был счастлив
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
03.09.2017, 15:51 6
Чтобы не бросалось исключение:
Python
1
print(i.get('price'))  # если ключа нет, то вернёт None
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
03.09.2017, 15:54  [ТС] 7
Я уже дописал скрипт почти, я сделал через try - except, но все равно спасибо
0
03.09.2017, 15:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2017, 15:54
Помогаю со студенческими работами здесь

Получения списка элементов массива при парсинге JSON на XE4
Пытаюсь пропарсить JSON сам он такого вида:...

Выдает nil при парсинге JSON из базы сайта на битриксе
Всем привет, есть странная проблема: скрипт делает запрос в базу данных сайта на 1с битриксе,...

Вставка переменной при парсинге данных из объекта/или JSON
Здравствуйте! Имею: let address = "rMQ98K56yXJbDGv49ZSmW51sLn94Xe1mu1"; let line =...

Как исправить грязный JSON файл полученный при парсинге
При парсинге получаю "грязный" Json файл, в котором в начале и в конце имеются элементы, которые не...

Возможно ли при парсинге заграбить блоки, которые подгружаются с ajax/js?
Интересует такая штука, вполне себе нормально парсить статические сайты с помощью nokogiri или...

Пропадает конец Json строки, при передаче Json строки через Ajax
Всем привет. Возникла следующая проблема. Из php получаю json строку, полученную с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru