#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(',','.'))