#python #python-3.x #selenium #web-scraping #python-requests
#python #python-3.x #селен #веб-очистка #python-запросы
Вопрос:
Я не совсем понимаю, какой ответ я получаю здесь. Это выглядит неполным. Мне было интересно, если это неправильный подход и следует переключиться на selenium. Я пытаюсь получить все пункты меню вместе с ценами и дополнениями здесь. Я просто проверял ответ. Любые рекомендации были бы очень полезны. Спасибо
import requests
from bs4 import BeautifulSoup
url = 'https://www.swiggy.com/dapi/menu/v4/full?lat=12.9715987amp;lng=77.5945627amp;menuId=41100'
page = requests.get(url).json()
for k, v in page.items():
print(v)
Комментарии:
1. На первый взгляд, это не вопрос
request
vsselenium
— Не могли бы вы улучшить свой вопрос и предоставить ожидаемый результат, пожалуйста.
Ответ №1:
Попробуйте это:
import requests
url = 'https://www.swiggy.com/dapi/menu/v4/full?lat=12.9715987amp;lng=77.5945627amp;menuId=41100'
page = requests.get(url).json()
menu_items = page["data"]["menu"]["items"]
for k, v in menu_items.items():
print("Name: {}".format(v["name"]))
print("Description: {}".format(v["description"]))
print("Price: {}".format(v["price"]))
if "addons" in v.keys():
for i in v["addons"]:
print("t{}".format(i["group_name"]))
for j in i["choices"]:
print("ttName: {}".format(j["name"]))
print("ttPrice: {}".format(j["price"]))
print()
print()
Комментарии:
1. Спасибо за ваш ответ. Только один вопрос. Могу ли я получить описание блюда, я думаю, я видел это в ответе. Просто я не очень хорошо разбираюсь
json
.2. Кстати, переменная ‘page’ — это просто вложенный dict.
Ответ №2:
Что происходит?
Думаю, что это не вопрос request
vs selenium
для веб-очистки, потому что все, что вы делаете, это запрашиваете api и получаете json
ответ.
И ваш код отлично работает так, как он написан, но то, что вы ожидаете сделать, — это что-то другое, поэтому вам приходится иметь дело с итерацией dict
другим способом.
Это сделает свое дело:
page['data']['menu']['items'].items()
Пример
import requests
url = 'https://www.swiggy.com/dapi/menu/v4/full?lat=12.9715987amp;lng=77.5945627amp;menuId=41100'
page = requests.get(url).json()
for k, v in page['data']['menu']['items'].items():
print(v)
Вывод
{'id': 8194821, 'name': 'Egg Omelette', 'category': 'Quick Bites', 'description': '', 'cloudinaryImageId': '', 'recommended': 0, 'inStock': 0, 'isVeg': 0, 'enabled': 1, 'displayOrder': 0, 'price': 8500, 'variants_new': {'exclude_list': [], 'variant_groups': []}, 'addons': [{'group_id': 21778839, 'group_name': 'Addons', 'choices': [{'id': 17471659, 'name': 'Watermelon Juice', 'price': 10000, 'inStock': 0, 'isVeg': 1, 'order': 1, 'default': 0}, {'id': 17471658, 'name': 'Coke (750 ml)', 'price': 6000, 'inStock': 1, 'isVeg': 1, 'order': 1, 'default': 0}], 'maxAddons': -1, 'maxFreeAddons': -1, 'minAddons': 0, 'order': 1}, {'group_id': 21778838, 'group_name': 'Beverage Addons', 'choices': [{'id': 17471658, 'name': 'Coke (750 ml)', 'price': 6000, 'inStock': 1, 'isVeg': 1, 'order': 1, 'default': 0}], 'maxAddons': -1, 'maxFreeAddons': -1, 'minAddons': 0, 'order': 1}], 'cropChoices': 2, 'itemScore': 0, 'itemDiscount': 0, 'isPopular': 0, 'restId': '41100', 'showMC': 0, 'ribbon': {'text': 'Must Try', 'textColor': '#ffffff', 'topBackgroundColor': '#d53d4c', 'bottomBackgroundColor': '#b02331'}, 'attributes': {'portionSize': '', 'vegClassifier': 'EGG', 'accompaniments': ''}, 'itemNudgeType': ''}
{'id': 8194822, 'name': 'Paneer Sholey', 'category': 'Starters', 'description': 'Fried cottage cheese cubes, tossed in signature spices amp; curry leaves garnish.', 'cloudinaryImageId': '', 'recommended': 0, 'inStock': 0, 'isVeg': 1, 'enabled': 1, 'displayOrder': 0, 'price': 22000, 'variants_new': {'exclude_list': [], 'variant_groups': []}, 'cropChoices': 2, 'itemScore': 0, 'itemDiscount': 0, 'isPopular': 0, 'restId': '41100', 'showMC': 0, 'attributes': {'portionSize': '', 'vegClassifier': 'VEG', 'accompaniments': ''}, 'itemNudgeType': ''}
...
Комментарии:
1. Спасибо за ваш ответ. Если бы вы могли просто взглянуть на ответ выше. Я вроде как ищу это только с описанием блюда. Я слаб
json
. Очень признателен,2. Чтобы получить только описание, сделайте это:
print(v.get('description'))
вместоprint(v)
3. возвращает
None
.. Используем ли мыget
?4. Это сработало. ` print(«Описание: {}».format(v[«описание»]))`
5. Вы можете использовать оба, это зависит от того, что вы делали раньше :
for k,v in page['data']['menu']['items'].items(): print(v['description'])