如何用Scrapy CSS选择器提取div下span标签后的金额数值?
解决金额提取问题
你的代码med.css('div span ::text').get()只能拿到MRP,是因为这个选择器定位的是span标签内部的文本,而目标金额182.78是span的同级文本节点,不在span标签范围内。下面是几种可行的提取方案:
方法一:CSS选择器结合文本过滤
先获取包含金额的div下所有文本节点,再筛选出目标内容:
# 获取第二个div下的所有文本节点 text_list = med.css('div:nth-child(2) ::text').getall() # 清理空白并过滤出金额 target_amount = [t.strip() for t in text_list if t.strip() and t.strip() not in ('MRP', '₹')][0] print(target_amount) # 输出 182.78
方法二:使用XPath直接定位
XPath对文本节点的定位更灵活,可直接选中span后的有效文本:
# 定位第二个div下非空白、不含MRP的文本节点 target_amount = med.xpath('./div[2]/text()[normalize-space() and not(contains(., "MRP"))]').get().strip() print(target_amount) # 输出 182.78
方法三:提取父div文本后用正则提取
如果页面结构稳定,也可以直接获取父div的全部文本,再用正则提取数字:
full_text = med.css('div:nth-child(2)').get() # 正则匹配小数格式的金额 import re target_amount = re.search(r'\d+\.\d+', full_text).group() print(target_amount) # 输出 182.78
内容的提问来源于stack exchange,提问作者Lucyfer
相关产品推荐
相关产品推荐

