import scrapy
from scrapy import Field,Item
from itemloaders.processors import TakeFirst,MapCompose
def get_price(txt):
value = txt.replace('1.359,20','1.359')
value = txt.replace(',','.')
value = txt.strip('1.499,00')
value = txt.strip('R$')
float(value)
class MultilaserItem(scrapy.Item):
\# define the fields for your item here like:
\# name = scrapy.Field()
title = Field(output_process=TakeFirst())
price = Field(input_processor=MapCompose(get_price),output_processor=TakeFirst())
\#installment = Field(output_process=TakeFirst())
Твой текст, когда я делаю это value = txt.replace(',','.') не следует ли заменить значение в 14,90 на 14.90? но я застрял с ошибкой
ValueError: Error with input processor MapCompose: field='price' value=\['R$ 14,90'\] error='ValueError: Error in MapCompose with \<function get_price at 0x7fa825ee0b80\> value=\['R$ 14,90'\] error='ValueError: could not convert string to float: ' 14,90
Приведенный выше код применяет только последнюю операцию value = txt.strip('R$'), которая приводит к «14,90», что не является допустимым числом с плавающей запятой и вызывает ошибку значения.
Чтобы выполнить несколько операций над строкой, необходимо переназначить переменную после каждой операции.
Попробуйте функцию, подобную следующей, чтобы получить цену из строкового ввода:
def get_price(txt):
txt = txt.replace(',','.')
value = txt.strip('R$')
return float(value)
price = get_price("R$ 14,90")
print(f"{price:.2f}")
Выход:
14.90
value = txt.replace('1.359,20','1.359')
value = txt.replace(',','.')
value = txt.strip('1.499,00')
value = txt.strip('R$')
Эти замены используют исходное значение txt, поэтому они не суммируются. Каждый отменяет предыдущий. Таким образом, вы получите только окончательную замену strip('R$'). Первые три отбрасываются.
Кроме того, ваша функция get_price ничего не возвращает