Scrapy提取woocommerce价格返回空值或完整HTML如何解决
问题原因
你之前不加::text拿到完整HTML,是因为Scrapy的get()方法默认会返回选中节点的完整HTML内容。而你给外层span.woocommerce-Price-amount.amount加::text返回空,是因为这个外层span节点本身没有直接的文本内容,你要提取的15.00属于它的子节点<bdi>的直接文本,直接选外层span的文本自然拿不到内容。
正确提取方式
有两种常用的写法可以直接拿到目标价格:
- CSS选择器写法
你需要先定位到<bdi>节点,再提取它的直接文本即可:
def parse(self,response): for product in response.css('div.astra-shop-summary-wrap'): yield{ 'oprice': product.css('span.woocommerce-Price-amount.amount bdi::text').get().strip() }
如果担心存在其他非数字内容干扰,可以结合正则提取纯数字价格:product.css('span.woocommerce-Price-amount.amount bdi::text').re_first(r'\d+\.\d+')
- XPath写法
定位逻辑和CSS一致,精准度更高:
'oprice': product.xpath('.//span[@class="woocommerce-Price-amount amount"]/bdi/text()').get().strip()
内容的提问来源于stack exchange,提问作者Arslan Jaliawala
相关产品推荐
相关产品推荐

