15 / 13 / 4
Регистрация: 13.05.2021
Сообщений: 158

Как сравнить цены из 2 json файлов

02.11.2021, 17:04. Показов 4063. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, как сделать чтобы проводилась проверка из первого json файла со вторым по названию, если не был найден не один товар с таким названием, то с ним ничего не делается, а если был найден, то проводится проверка по ценнику и если ценник во втором файле оказался меньше, то это записывается в отдельный json файл?
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
headers = Headers(os='lin', headers=True).generate()
    main_dict = {}
    count = 0
    for page in range(1, 17):
        try:
            url = f"https://blacktyres.ru/catalog-disks/podbor-diskov-po-avto/lada/vesta/{page}/"
            preurl = 'https://blacktyres.ru/'
            r = requests.get(url=url, headers=headers)
            soup = BeautifulSoup(r.text, 'lxml')
 
            cards = soup.find_all('div', class_='catalog-product-wrap')
            for card in cards:
                first_card_name = card.find('a', class_='product-link product-name').find('b').text.strip()
                second_card_name = card.find('a', class_='product-link product-name').text.strip()
                all_card_name = f"{first_card_name} {second_card_name}"
                first_card_price = card.find('div', class_='product-price').find('b').text.strip()
                second_card_price = card.find('div', class_='product-price').find('rb').text.strip()
                all_card_price = f"{first_card_price} {second_card_price}"
                card_href = card.find('a', class_='product-link product-name').get('href')
                card_url = preurl + card_href
 
                response = requests.get(url=card_url, headers=headers)
                bs4 = BeautifulSoup(response.text, 'lxml')
 
                try:
                    got_card = bs4.find('ul', class_='delivery').find('li').text.strip().replace('\n', ' '). replace('Вналичии', 'В наличии').replace(' ', ':').replace('В:наличии', ' В наличии')
                    main_dict[count] = {
                        'card_name': all_card_name,
                        'card_price': all_card_price,
                        'card_url': card_url,
                        'got_card': got_card
                    }
 
                except:
                    main_dict[count] = {
                        'card_name': all_card_name,
                        'card_price': all_card_price,
                        'card_url': card_url
                    }
к примеру, в первом json, который более старый, записано следующее:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"0": {
        "card_name": "Диски Skad Диски Skad Нагоя 6x16/4x100 D60.1 ET50 Селена",
        "card_price": "6 930 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/Skad/model-11167/73223/",
        "got_card": "Наличие: В наличии"
    },
    "1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "1 969 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
    "2": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Серебро",
        "card_price": "2 034 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80487/",
        "got_card": "Наличие: В наличии"
    },
а во второй например:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"0": {
        "card_name": "Новые диски",
        "card_price": "6 930 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/Skad/model-11167/73223/",
        "got_card": "Наличие: В наличии"
    },
    "1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "999 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
    "2": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Серебро",
        "card_price": "2 034 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80487/",
        "got_card": "Наличие: В наличии"
    },
и в файл sale.json запишется:
JSON
1
2
3
4
5
6
"1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "999 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
помогите, пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2021, 17:04
Ответы с готовыми решениями:

Как получить данные из JSON и сравнить их с данными со страницы?
Добрый день, пожалуйста, скажите мне. Я написал календарь, и теперь у меня есть файл json, в котором содержится информация о событиях, я...

Как проанализировать 2 файла json и сравнить их, используя Python?
Есть приложение, на странице которого выводятся иконки других приложений. Они выводятся двумя способами. Надо сравнить эти способы. Для...

Сравнить цены
Помогите дописать код. Нужно сравнить цены у трех клиентов и вывести на экран данные клиента с максимальной стоимостью и с минимальной. ...

3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,692
Записей в блоге: 29
02.11.2021, 17:44
Лучший ответ Сообщение было отмечено Alina Zolotova как решение

Решение

Alina Zolotova,
записать останется в файлик
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import json
 
 
def to_int(value: str) -> int:
    return int(value.rstrip(' ₽').replace(' ', ''))
 
 
with open('first.json', encoding='UTF-8') as first, open('second.json', encoding='UTF-8') as second:
    first_json = json.load(first)
    second_json = json.load(second)
 
result = {}
for pair in first_json.items():
    for second_pair in second_json.items():
        if pair[1]['card_name'] == second_pair[1]['card_name']:
            first_price = to_int(pair[1]['card_price'])
            second_price = to_int(second_pair[1]['card_price'])
            if first_price < second_price:
                result[pair[0]] = pair[1]
            else:
                result[second_pair[0]] = second_pair[1]
 
print(result)
1
15 / 13 / 4
Регистрация: 13.05.2021
Сообщений: 158
02.11.2021, 22:36  [ТС]
Welemir1, Спасибо большое, очень полезный код для на практике много где может понадобиться

Добавлено через 1 час 4 минуты
сделала такую вариацию, спасибо Welemir1.
Python
1
2
3
4
5
6
7
8
9
10
11
12
with open(f"data/{counter - 1}_products.json") as first, open(f"data/{counter}_products.json") as second:
    first_json = json.load(first)
    second_json = json.load(second)
 
result = {}
for pair in first_json.items():
    for second_pair in second_json.items():
        if pair[1]['card_name'] == second_pair[1]['card_name']:
            first_price = to_int(pair[1]['card_price'])
            second_price = to_int(second_pair[1]['card_price'])
            if first_price > second_price:
                result[second_pair[0]] = second_pair[1]
Добавлено через 8 минут
Welemir1, а что если кол-во товаров изменится? Например добавится товар, из-за чего товар который был на 15 строчке, окажется на 16 или 20 и тд. Как реализовать, чтобы скрипт не шёл по циклу, а искал совпадение по названию, а потом уже сверял
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,692
Записей в блоге: 29
03.11.2021, 06:59
Alina Zolotova, ничего не понял. ПРограмма и так сверяет по названию, строки значения не имеют. Как это делать без циклов не знаю. Чтобы понять самой - надо основы питона подтянуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2021, 06:59
Помогаю со студенческими работами здесь

Как сравнить название файлов
Сразу говорю, что новичок, только разбираюсь с возможностями кьюта Как сравнить названия файлов, если есть, например файл...

Как сравнить имена двух файлов?
Нужно, чтобы пользователь вводил имя второго файла не равное имени первому файлу. Имена файлов вводит ползователь

Как сравнить длину двух текстовых файлов
Всем привет. Я делаю шифр Виженара, и мне надо сравнить длину input.txt с длиной key.txt. Помогите, пожалуйста Добавлено через 21...

Как сравнить текст из memo с текстами файлов в папке?
Здравствуйте! Как сравнить текст из memo с текстами файлов на наличие схожести , которые есть у меня в папке на компьютере? Если есть...

Не получается сравнить 2 JSON
JSON имеют разную структуру, но в обеих поля с ФИО, по нему и сравниваю. Мне надо в 1 JSON убрать все записи где значение ФИО повторяется...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru