为了账号安全,请及时绑定邮箱和手机立即绑定

scrapy:添加一些数学条件

scrapy:添加一些数学条件

回首忆惘然 2023-06-06 15:32:11
使用 python 3.8 和 scrapy 1.6,我想检查产品的星级是否等于或大于 3.5,然后检查另一个条件(如果 discount_percent 等于或大于 10%),然后抓取该产品的一些元素。问题是,我猜,scraped star 和 discount_percent 元素是非英文数字并且包含“%”。因此,虽然我使用的是 utf8,但当我将代码行包装在 float() 和 int() 函数中时,我得到了这个日志:这是我的蜘蛛代码:    def parse(self, response):        for product in response.xpath("//ul[@class='c-listing__items']/li"):            title= product.xpath(".//a[@class='js-product-url']/text()").get()            star= float(product.xpath(".//div[@class='c-product-box__engagement-rating']/text()").get())            discounted_percent= int(product.xpath(".//div[@class='c-price__discount-oval']/span/text()").get())            discounted_price= int(product.xpath(".//div[@class='c-price__value-wrapper']/text()").get())            original_price= int(product.xpath(".//div[@class='c-price__value c-price__value--plp']/del/text()").get())            url= response.urljoin(product.xpath(".//a[@class='js-product-url']/@href").get())            if star>=3.5 and discounted_percent>=10:                yield{                    'title':title,                    'star':star,                    'discounted_percent':discounted_percent,                    'discounted_price':discounted_price,                    'original_price':original_price,                    'url':url                }       我该如何解决这个问题?感谢您的帮助!
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

问题来自您正在使用的以下几行int():


discounted_percent= int(product.xpath(".//div[@class='c-price__discount-oval']/span/text()").get())

discounted_price= int(product.xpath(".//div[@class='c-price__value-wrapper']/text()").get())

original_price= int(product.xpath(".//div[@class='c-price__value c-price__value--plp']/del/text()").get())

           

但是,您还必须为discounted_priceand执行此original_price操作,确保没有非数字字符,例如%或 货币符号。


这是因为您不能int()在使用非数字字符的字符串上使用,例如int("20%")


一个快速的解决方案是删除这些字符。在以下情况下discounted_percent:


discounted_percent = int(str(product.xpath(".//div[@class='c-price__discount-oval']/span/text()").get().strip()).replace('٪', ''))


查看完整回答
反对 回复 2023-06-06
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信