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

使用Requests HTML爬取图片返回data:image/gif;base64占位符 如何获取真实商品URL

问题原因

现在绝大多数电商站点都会对商品图片做懒加载优化:低像素占位图默认放在src属性中,真实高清商品图会存储在data-src/data-original/data-lazy等自定义属性,或是多尺寸集合的srcset属性中,仅当图片滚动到可视区域时才会替换src的内容。你直接提取src属性自然只能拿到占位图。

解决方案

第一步:定位真实图片存储的属性

先打印目标img标签的全部属性,确认站点存放真实图片的字段:

images = r.html.find('img.product-media-gallery__item-image')
# 输出第一个匹配元素的所有属性,找到存高清图的键名
print(images[0].attrs)

第二步:提取+过滤有效图片URL

优先读取懒加载自定义属性的内容,再通过关键词、后缀过滤占位图:

valid_img_urls = []

for img in images:
    # 优先取懒加载属性内容,兜底取src
    img_url = img.attrs.get('data-src') \
              or img.attrs.get('data-original') \
              or img.attrs.get('data-lazy') \
              or img.attrs.get('src', '')
    
    # 过滤占位图:排除带占位特征、非图片格式的地址
    placeholder_keywords = ['placeholder', 'blank', 'lazy', '1x1', '10x10', 'base64']
    if any(key in img_url for key in placeholder_keywords):
        continue
    if not img_url.endswith(('jpg', 'jpeg', 'png', 'webp', 'avif')):
        continue
    
    valid_img_urls.append(img_url)

# 输出所有有效商品图地址
for url in valid_img_urls:
    print(url)

特殊情况:srcset属性处理

如果真实图片存放在srcset多尺寸集合中,提取最大分辨率的地址即可:

def get_max_size_img_from_srcset(srcset_str):
    src_items = [item.strip().split() for item in srcset_str.split(',') if item.strip()]
    max_size = 0
    max_url = ''
    for url, size_flag in src_items:
        size = int(size_flag.replace('w', ''))
        if size > max_size:
            max_size = size
            max_url = url
    return max_url

# 提取时增加srcset判断逻辑
for img in images:
    if 'srcset' in img.attrs and img.attrs['srcset'].strip():
        img_url = get_max_size_img_from_srcset(img.attrs['srcset'])
    else:
        # 走之前的属性读取逻辑
        img_url = img.attrs.get('data-src') or img.attrs.get('src', '')
    # 后续过滤逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:09:02