@driveknight

Как при помощи BeautifulSoup распарсить элементы?

Здравствуйте. Вот часть моего парсера которая получает цены:
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&nbsp;₽</p><p class="N_0"><span class="N_1">4 999&nbsp;₽</span></p></div>


Проблема в том, что когда попадаются товары без промо цены, то все цены с этого товары начинают записываться некорректно. Промо цены если что записываются верно. Я вроде понимаю из-за чего эта ошибка, но не получается ее обработать или написать проверку. С операторами in и is не получается так как страница парсится целиком. Парсить каждый товар отдельно единственный выход? Хотелось бы реализовать это именно с BeautifulSoup
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Полагаю, вместо записи цен в список лучше организовать словарь, в котором под нумерованные ключи писать нормальные цены, а в ключ “promo” писать промо-цену.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы