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

如何从商品详情页爬取所有相关商品图片?代码求校验

问题解决:爬取商品详情页所有相关图片

针对你的需求,先修正代码里的核心问题,再补充提取图片链接的关键逻辑:

修正后的完整代码

import requests
import json
from bs4 import BeautifulSoup as bs

# 商品详情页URL
url = "https://www.boulanger.com/ref/1176193"
page = requests.get(url)

if page.status_code == 200:
    parsedPage = bs(page.content, 'lxml')
    div_product = parsedPage.find('article', {'class': 'container-xl'})
    
    # 提取商品标题和参考号(保留你原有的逻辑)
    title = div_product.find('h1', {'class': 'product-title__main'}).get_text()
    title = ' '.join([ligne.strip() for ligne in title.split('\n') if ligne.strip()])
    ref = div_product.find('div', {'class': 'product-title__ref'}).get_text().strip()
    
    # 解析页面脚本获取gtin13(修正重复请求页面的错误)
    script_tag = parsedPage.select_one('script:has(+header)')
    if not script_tag:
        print("未找到包含商品标识的脚本标签")
        exit()
    data = json.loads(script_tag.text)
    gtin13 = data.get("gtin13")
    if not gtin13:
        print("未获取到商品唯一标识gtin13")
        exit()
    
    # 请求图片数据接口并解析JSONP格式返回值
    media_url = f'https://boulanger.scene7.com/is/image/Boulanger/{gtin13}_mixed?req=set,json,UTF-8'
    media_response = requests.get(media_url)
    media_data = json.loads(media_response.text.split('(')[1][:-5])
    
    # 提取所有商品图片的完整链接
    image_links = []
    for item in media_data.get('set', {}).get('items', []):
        img_name = item.get('name')
        if img_name:
            # 拼接Scene7图片服务的完整URL,可按需添加尺寸参数(比如?wid=800)
            full_img_url = f"https://boulanger.scene7.com/is/image/Boulanger/{img_name}"
            image_links.append(full_img_url)
    
    # 输出结果
    print(f"商品标题: {title}")
    print(f"商品参考号: {ref}")
    print("\n所有商品图片链接:")
    for idx, link in enumerate(image_links, 1):
        print(f"{idx}. {link}")
    
    # 可选:取消注释可将图片保存到本地
    # for idx, link in enumerate(image_links, 1):
    #     img_content = requests.get(link).content
    #     with open(f"商品图片_{idx}.jpg", 'wb') as f:
    #         f.write(img_content)
    #     print(f"已保存图片: 商品图片_{idx}.jpg")

核心修正点

  1. 去掉重复请求页面的错误:原代码中requests.get(page)是错误用法,直接复用第一次请求的page.content解析脚本标签
  2. 增加异常判断:处理找不到脚本标签、获取不到gtin13的情况,避免代码崩溃
  3. 补充图片提取逻辑:从接口返回的media_data中提取图片名称,拼接成可直接访问的完整图片URL

内容的提问来源于stack exchange,提问作者Hervé Guevara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:42:45