Здравствуйте. Вот часть моего парсера которая получает цены:
def get_soup(lp: list):
for i in lp:
with open('html.txt', 'w', encoding='utf-8') as f:
response = requests.get(i, headers=headers, cookies=cookies)
f.write(response.text)
with open("html.txt", encoding='utf-8') as nf:
soup = BeautifulSoup(nf, 'html.parser')
tags = soup.find(lambda tag: tag.name == 'div' and tag.get('class') == ['n_6'])
for prices in tags.find_all('span', class_='N_1'):
price_re = re.sub(r'\D', '', *prices)
price.append(price_re)
for p_prices in tags.find_all('p', class_='N_'):
p_price_re = re.sub(r'\D', '', *p_prices)
p_price.append(p_price_re)
Отсюда:
<div class="NZ N_2"><p class="N_">3 149 ₽</p><p class="N_0"><span class="N_1">4 999 ₽</span></p></div>
Проблема в том, что когда попадаются товары без промо цены, то все цены с этого товары начинают записываться некорректно. Промо цены если что записываются верно. Я вроде понимаю из-за чего эта ошибка, но не получается ее обработать или написать проверку. С операторами
in
и
is
не получается так как страница парсится целиком. Парсить каждый товар отдельно единственный выход? Хотелось бы реализовать это именно с BeautifulSoup