Как получить текст из
в python?

Учусь парсить. Для первого опыта выбрал fl.ru. Пока получается все кроме одной вещи. Так вот : Есть , он относится к классу 'b-post_price'. Мне надо получить текст данного тега.

Код который я для этого написал :

    price = item.find_all('div', class_='b-post__price')
    if price :
        price = price.get_text()
    else :
        price = 'По договоренности'

HTML код :

<div class="b-post__price b-layout__txt_right b-post__price_padleft_10 b-post__price_padbot_5 b- 
post__price_float_right b-post__price_fontsize_15 b-post__price_bold"> 
<a class="b-layout__txt_fontsize_12 b-layout__txt_padright_10 b-layout__txt_color_61a22b b- 
layout__txt_text_decor_none b-layout__txt_bold" href="/promo/bezopasnaya-sdelka/" target="_blank" 
title="Оплата через Безопасную сделку"> 
<span class="b-icon b-icon__shield b-icon_top_2_iphone"></span>
Безопасная сделка</a> 
200&nbsp;000&nbsp;₽ 
</div>

Проблема в том что он везде пишет 'По договренности' Также если написать :

item.find('div', class_='b-post__price').get_text()

то ошибка тип у NoneType объекта нет get_text()


Ответы (2 шт):

Автор решения: Wairua
from bs4 import BeautifulSoup as Soup
from bs4.element import Tag
import re

if __name__ == '__main__':
    html = """<div class="b-post__price b-layout__txt_right b-post__price_padleft_10 b-post__price_padbot_5 b- 
post__price_float_right b-post__price_fontsize_15 b-post__price_bold"> 
<a class="b-layout__txt_fontsize_12 b-layout__txt_padright_10 b-layout__txt_color_61a22b b- 
layout__txt_text_decor_none b-layout__txt_bold" href="/promo/bezopasnaya-sdelka/" target="_blank" 
title="Оплата через Безопасную сделку"> 
<span class="b-icon b-icon__shield b-icon_top_2_iphone"></span>
Безопасная сделка</a> 
200&nbsp;000&nbsp;₽ 
</div>
"""

    h = Soup(html, 'html.parser').find_all('div', {'class': 'b-post__price'})

    div: Tag
    for div in h:
        if div.a:
            div.a.replace_with('')
        if div.span:
            div.span.replace_with('')
        try:
            price = int(re.sub(r'\D', '', div.text.strip()))
        except (TypeError, ValueError):
            price = 'По договоренности'


# 200000
→ Ссылка
Автор решения: Дмитрий

Можете использовать:

item = soup.find('div', class_='b-post__price')
if item:
    price = item.text.strip().split('\n')[1]
else:
    price = 'По договоренности'

Вы ведь в переменную price хотели сумму положить, я правильно понял? Что бы просто получить весь текст между тегами воспользуйтесь

item = soup.find('div', class_='b-post__price').text
→ Ссылка