Scrapy中如何判断选择器类是否存在并标记商品库存状态
最简单的Scrapy商品尺寸+缺货标记实现方案
嘿,刚上手Scrapy的话,这个需求其实用自带的选择器就能轻松搞定,不用搞复杂的操作~ 给你两种最直接的实现方式:
方法一:生成带状态的字典列表(推荐)
这种方式把每个尺寸和它的缺货状态绑定成字典,后续处理数据会更方便:
sizes_with_stock_status = [] # 遍历每个尺寸对应的li元素 for li in response.css('ul.possible-sizes > li'): # 获取尺寸文本 size = li.css('::text').get().strip() # 检查当前li是否包含not-available类 is_out_of_stock = 'not-available' in li.attrib.get('class', '') # 添加到结果列表 sizes_with_stock_status.append({ 'size': size, 'out_of_stock': is_out_of_stock })
运行后你会得到这样的结构化结果:
[ {'size': '35', 'out_of_stock': False}, {'size': '36', 'out_of_stock': True}, {'size': '37', 'out_of_stock': False}, {'size': '38', 'out_of_stock': False}, {'size': '39', 'out_of_stock': True}, {'size': '40', 'out_of_stock': False} ]
方法二:直接生成带标记的尺寸文本
如果只是想要给缺货的尺寸加个直观的文字标记,用这种更简洁:
size_labels = [] for li in response.css('ul.possible-sizes > li'): size = li.css('::text').get().strip() if 'not-available' in li.attrib.get('class', ''): size_labels.append(f"{size} (out-of-stock)") else: size_labels.append(size)
结果会是一目了然的带标记列表:
['35', '36 (out-of-stock)', '37', '38', '39 (out-of-stock)', '40']
小细节提示
li.attrib.get('class', '')是为了避免某个li没有class属性时报错,用空字符串兜底更稳妥- 加
strip()是为了去掉尺寸文本可能带的空格、换行符,让数据更干净
内容的提问来源于stack exchange,提问作者F. Shahid
相关产品推荐
相关产品推荐

