You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:12