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'}} >>>
dolcorpЗакомментировал твои куски и вставил свои.
Вы можете вставить Ваше решение в мой скрипт
dolcorpА он скачивает алматинскую страницу просто. Вот у меня в примере видно, что у меня оно как раз всё правильно качает и всё правильно находит. Не всё, конечно, находит, потому что я не углублялся в проценты там во все, но все базовые вещи разделяет на типы и не путает один вид цены с другим.
Спасибо огромное, но все равно берется цена что и раньше
dolcorpНе, дело в том, что надо скачивать страницу правильно.
Может сделать вот такую последовательность приоритета