Форум сайта python.su
https://www.sulpak.kz/g/noutbuki_acer_extensa_15_ex215_52_i382sun_nxeg8er00b/uralsk
В городе Уральск цена 299 990, а берется цена города Алматы 239 992
Офлайн
import requests from bs4 import BeautifulSoup headers = { 'Cookie':"language_id=3; city_id=14;selected_city_id=14"} url = 'https://www.sulpak.kz/g/noutbuki_acer_extensa_15_ex215_52_i382sun_nxeg8er00b/uralsk' session = requests.Session() resp = session.get(url, headers=headers) html = resp.content.decode() soup = BeautifulSoup(html, 'html.parser') search = soup.find('div', class_='product__main-price-wrapper super-price') search = search and search.find('div', class_='product__price') out = search and search.text print(out)
299 990 ₸
Офлайн
>>> import urllib.request >>> import bs4 >>> >>> def get_filtered_price(node): ... out = {} ... old_price = node.find( ... 'div', class_='product__price-old') ... discount_price = node.find( ... 'div', class_='product__price discounted-price') ... product_price = node.find( ... 'div', class_='product__price') ... super_price = node.find( ... 'div', class_='product__super') ... if old_price is not None: ... if discount_price is not None: ... dp_sticker = discount_price.find( ... 'span', attrs={'discounted-price-sticker': ''}).string ... dp_sticker_clean = clear_sticker_string(dp_sticker) ... dp_price = discount_price.find_all('span')[1].string ... dp_price_clean = clear_price_string(dp_price) ... out = {'type': 'discount', ... 'level': dp_sticker_clean, ... 'price': dp_price_clean} ... else: ... op_price = old_price.string ... op_price_clean = clear_price_string(op_price) ... out = {'type': 'old', ... 'price': op_price_clean} ... elif product_price is not None: ... if super_price is not None: ... pp_price = product_price.string ... pp_price_clean = clear_price_string(pp_price) ... out = {'type': 'discount', ... 'level': 'percent', ... 'price': pp_price_clean} ... else: ... pp_price = product_price.string ... pp_price_clean = clear_price_string(pp_price) ... out = {'type': 'fixed', ... 'price': pp_price_clean} ... return out ... >>> def clear_price_string(text): ... out = ''.join(i for i in text if i.isdigit() or i == '.') ... return out ... >>> def clear_sticker_string(text): ... out = 'low' if text == 'от' else 'undefined' ... return out ... >>> def f(url, city_id): ... out = {} ... headers = { ... 'Cookie': 'city_id={0}'.format(city_id) ... } ... req = urllib.request.Request(url=url, headers=headers) ... with urllib.request.urlopen(req) as data: ... text = data.read().decode('utf-8') ... doc = bs4.BeautifulSoup(text, 'html.parser') ... product = doc.find(class_='product__item product__item-js tile-container') ... out['base_price'] = product['data-price'] ... price = doc.find(class_='product__main-price-wrapper') ... out['least_price'] = get_filtered_price(price) ... return out ... >>> f('https://www.sulpak.kz/g/noutbuki_acer_extensa_15_ex215_52_i382sun_nxeg8er00b', '1') {'base_price': '299990.0', 'least_price': {'type': 'discount', 'level': 'low', 'price': '239992'}} >>> f('https://www.sulpak.kz/g/noutbuki_acer_extensa_15_ex215_52_i382sun_nxeg8er00b', '14') {'base_price': '299990.0', 'least_price': {'type': 'fixed', 'price': '299990'}} >>> f('https://www.sulpak.kz/g/noutbuki_acer_nitro_5_an515_57__i5165sgn_nhqeker004', '1') {'base_price': '439990.0', 'least_price': {'type': 'discount', 'level': 'percent', 'price': '389990'}} >>> f('https://www.sulpak.kz/g/noutbuki_acer_nitro_5_an515_57__i5165sgn_nhqeker004', '14') {'base_price': '439990.0', 'least_price': {'type': 'discount', 'level': 'percent', 'price': '389990'}} >>>
Отредактировано py.user.next (Фев. 19, 2023 02:37:31)
Офлайн
Всем доброе утро! Вы можете вставить Ваше решение в мой скрипт, я повторюсь что я не понимаю куда это вставлять и что заменить
Прикреплённый файлы:
parser.rar (2,4 KБ)
Офлайн
dolcorpЗакомментировал твои куски и вставил свои.
Вы можете вставить Ваше решение в мой скрипт
Прикреплённый файлы:
sulpak_parser_v2_xlsx.py (6,5 KБ)
Офлайн
Спасибо огромное, но все равно берется цена что и раньше
Офлайн
Может сделать вот такую последовательность приоритета
1<div class=“product__price-old”>
2<div class=“product__price-old-super”>
3<div class=“product__price”>
Офлайн
У меня в конце обработки скрипта создается Эксель таблица и в ней снова не та цена
Офлайн
dolcorpА он скачивает алматинскую страницу просто. Вот у меня в примере видно, что у меня оно как раз всё правильно качает и всё правильно находит. Не всё, конечно, находит, потому что я не углублялся в проценты там во все, но все базовые вещи разделяет на типы и не путает один вид цены с другим.
Спасибо огромное, но все равно берется цена что и раньше
dolcorpНе, дело в том, что надо скачивать страницу правильно.
Может сделать вот такую последовательность приоритета
Отредактировано py.user.next (Фев. 19, 2023 10:26:28)
Прикреплённый файлы:
sulpak_parser_v2_xlsx.py (7,2 KБ)
Офлайн
По ссылке цена берется верно, эту ссылку я вставлял специально в фаиле Конфиг чтобы можно было посмотреть на одном товаре. Но теперь вставил туда категорию ноутбуков, ранее парсер сканировал категорию(категории если их несколько) полностью и в эксель добавлялись товары с остатками и ценами, а теперь ошибка вылетает. Приложил фаил с категорией ноутбуков
Прикреплённый файлы:
config.py (1,3 KБ)
Офлайн