#python
#python
Вопрос:
Я использую beautiful soup для извлечения информации с веб-сайта и получения цены товара. Я использовал приведенный ниже код для создания имен переменных prices для хранения информации. Затем я создал цикл для перебора всех элементов, и теперь я пытаюсь сравнить его с другой переменной с именем price_thres, чтобы определить, меньше или равно ли оно сумме. Выполнение этого кода выводит несколько правильных значений, но также выводит
price_in_dec = Decimal(i.text)
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
prices = soup.find_all("span", itemprop="price")
for i in prices:
price_in_dec = Decimal(i.text)
if price_in_dec <= price_thres:
print(price_in_dec)
Комментарии:
1. Можем ли мы узнать, какой веб-сайт вы пытаетесь очистить? или добавить часть HTML? Я полагаю, что ваша проблема связана с одним из элементов.
2. URL- адрес ammobuy.com/ammo/9mm Я извлекаю данные о ценах с сайта, и они отображаются правильно, но он выдает эту ошибку в конце после печати 6 цен ниже price_thres, которые являются десятичными (40,00)
Ответ №1:
Кажется, у вас есть запятые ( ,
) в некоторых ваших ценах.
Попробуйте это:
import locale
# Set to US locale
locale.setlocale(locale.LC_ALL, 'USA')
prices = soup.find_all("span", itemprop="price")
for i in prices:
price_in_dec = Decimal(locale.atof(i.text))
if price_in_dec <= price_thres:
print(price_in_dec)
Используя правильный язык, вы можете анализировать цены в соответствии с тем, как вы их пишете в США.
Другим вариантом было бы просто удалить запятые с помощью i.text.replace(",", "")
.
Комментарии:
1. Спасибо, что сработало, некоторые цены печатаются намного больше, чем мне нужно, так есть ли простой способ остановить их после позиции центов? Примером того, что он печатает сейчас, является «26.969999999999998863131622783839702606201171875»
2. Неважно, я понял, я использовал i.text.replace, и это устранило мою проблему. Большое спасибо, что очень помогло, и я понимаю, почему сейчас он выдает ошибку!
3. Привет @zach_hutz, если этот или любой другой ответ решил ваш вопрос, пожалуйста, подумайте о том, чтобы принять его, установив флажок. Это указывает более широкому сообществу, что вы нашли решение, и дает некоторую репутацию как ответчику, так и вам. Нет никаких обязательств делать это.
4. Рад, что смог помочь 🙂