BeautifulSoup: Как получить только одну часть вывода ?

#beautifulsoup #python-requests

Вопрос:

Я пытаюсь найти решение, как получить только цену без текста из абзаца.

 from bs4 import BeautifulSoup
import requests
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"}

p = requests.get(url = 'https://www.tia-mobiteli.hr/detaljan-prikaz.aspx?gid=11-appise_64wheu', headers = headers)
soup = BeautifulSoup(p.content,'lxml')
price = soup.find('div', class_='widget widget-info widget-price').p.text
price2 = price.strip()
print(price2)
 

Мой вывод таков:

 Naša najniža cijena za gotovinsko/virmansko plaćanje: 3.649,00 kn
 

Я хочу получить только:

 3.649,00 kn
 

Или, если это возможно:

 3649.00
 

Комментарии:

1. Привет! Похоже, ваш вопрос вообще не имеет никакого отношения к BeautifulSoup. У вас есть строка с номером в ней, и вы хотите изолировать номер.

Ответ №1:

Цена указана внутри <b> тега:

 import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}

p = requests.get(
    url="https://www.tia-mobiteli.hr/detaljan-prikaz.aspx?gid=11-appise_64wheu",
    headers=headers,
)
soup = BeautifulSoup(p.content, "lxml")
price = soup.find("div", class_="widget widget-info widget-price").b.text
price = float(price.split()[0].replace(".", "").replace(",", "."))
print(price)
 

С принтами:

 3649.0
 

Комментарии:

1. Использование .replace(',', '.') для интерпретации числа выглядит очень банально. Существует locale модуль , специально предназначенный для решения подобных задач.

Ответ №2:

Вы можете использовать parse модуль, который действует как обратный format() . Использование:

 import parse
...
float(parse.parse('Naša najniža cijena za gotovinsko/virmansko plaćanje: {} kn',price2)[0].replace('.','').replace(',','.'))