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

使用Scrapy提取eBay商品详情多字段无数据该如何解决?

问题修复方案

核心错误原因

  • 调用.get()方法获取data_cards时,返回的是匹配节点的HTML字符串,而非可继续执行xpath查询的选择器对象,后续遍历字符串时迭代的是单个字符,完全无法匹配节点路径,自然拿不到任何数据。
  • 循环内部重新实例化了ItemLoader,直接覆盖了从列表页传递过来、已经填充了name/price等字段的loader对象,不仅会丢失原有列表页采集的数据,新实例的loader也因为selector是无效的字符对象无法提取字段。
  • 单个商品详情页内tab-content-m节点通常只有一个,不需要循环遍历,直接用该节点作为上下文提取字段即可。

修正后代码

def parse_product_details(self, response, loader):
    # 移除.get(),直接获取详情内容节点选择器
    data_card = response.xpath('//div[@class="tab-content-m"]')
    # 复用传入的loader,将查询上下文切换到详情内容节点
    loader.selector = data_card
    loader.add_xpath('condition','.//div[@class="ux-layout-section__row"][3]/div[@class="ux-labels-values__values"][2]/div[@class="ux-labels-values__values-content"]/div/span//text()')
    loader.add_xpath('character','.//div[@class="ux-layout-section__row"][1]/div[@class="ux-labels-values__values"][2]/div[@class="ux-labels-values__values-content"]/div/span//text()')
    loader.add_xpath('rarity','.//div[@class="ux-layout-section__row"][8]/div[@class="ux-labels-values__values"][2]/div[@class="ux-labels-values__values-content"]/div/span//text()')
    loader.add_xpath('graded','.//div[@class="ux-layout-section__row"][4]/div[@class="ux-labels-values__values"][2]/div[@class="ux-labels-values__values-content"]/div/span//text()')
    loader.add_xpath('set','.//div[@class="ux-layout-section__row"][1]/div[@class="ux-labels-values__values"][1]/div[@class="ux-labels-values__values-content"]/div/span//text()')
    yield loader.load_item()

可选优化建议

现有xpath强依赖节点顺序,稳定性差,建议改写成按标签文本匹配的写法,比如提取condition可以先定位到文本为"Condition:"的标签,再取相邻的value值,不容易因为页面结构调整失效。

内容的提问来源于stack exchange,提问作者me.limes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:01