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

Scrapy图片管道无法下载商品画廊图片?求助排查

问题排查与解决

1. 定位XPath匹配范围问题

你当前使用的XPath //div[@class='item']/a/img/@src 仅匹配了主图所在的容器节点,画廊中的其他图片并不在这个节点下,所以无法被抓取到。

打开商品页面的开发者工具(F12),定位画廊非主图的DOM结构:

  • 这类画廊图片通常会放在div.product-image-gallery、ul.slides或div.owl-item这类专属容器中
  • 部分网站会把非主图的图片URL存放在data-src或data-original属性里,而非直接的src属性

2. 修改XPath覆盖所有画廊图片

针对目标网站的结构,替换image_urls的XPath逻辑,同时抓取src和data-src属性的URL:

def parse_item(self, response):
    # 同时抓取主图和画廊图的src与data-src属性
    img_src_list = response.xpath("//div[contains(@class, 'product-image-gallery')]//img/@src").getall()
    img_data_src_list = response.xpath("//div[contains(@class, 'product-image-gallery')]//img/@data-src").getall()
    
    # 合并列表并去重,补全相对路径为完整URL
    all_img_urls = list(set(img_src_list + img_data_src_list))
    full_img_urls = [response.urljoin(url) for url in all_img_urls if url]
    
    yield {
        'URL': response.url,
        'Price': response.xpath("normalize-space(//span[@class='price']/text())").get(),
        'image_urls': full_img_urls
    }

3. 处理动态加载场景

如果修改后仍无法获取图片,说明画廊图片是通过JavaScript动态渲染的:

  • 可以使用scrapy-playwright或scrapy-splash扩展渲染完整页面
  • 也可以通过浏览器网络面板,找到加载图片列表的API接口,直接请求接口获取图片URL

内容的提问来源于stack exchange,提问作者Raisul Islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:31:00