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

爬取H&M男装页面仅获少量正常图片URL,其余为base64占位图求助

解决H&M男装专区爬取图片URL出占位图的问题

核心原因

H&M用了两种机制导致你拿到占位图:一是图片懒加载,页面初始化时仅加载可视区域内的真实图片,其余位置用base64占位图填充,需滚动到对应区域才会触发真实图片加载;二是基础反爬策略,未伪装的爬虫请求会被返回占位图。

Requests爬取的解决办法

  • 换个属性提取真实URL:H&M的真实图片链接一般存在data-src或data-image这类属性里,别死盯img标签的src,改成提取这些属性即可。
  • 伪装请求头:给请求加上真实的User-Agent、Referer,必要时复制浏览器登录H&M后的Cookie带上,避免被识别为爬虫。示例代码片段:
import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Referer': 'https://www2.hm.com/zh_cn/men.html'
}
response = requests.get('目标页面URL', headers=headers)
# 解析HTML时提取data-src而非src

Selenium爬取的解决办法

  • 滚动页面触发懒加载:通过JS脚本循环滚动页面到底部,每次滚动后等待2秒,让浏览器加载未显示区域的真实图片。示例代码片段:
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")  # 规避自动化工具识别
driver = webdriver.Chrome(options=options)
driver.get('https://www2.hm.com/zh_cn/men.html')

# 循环滚动加载全部商品
for _ in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(2)

# 优先取src,是占位图则替换为data-src
images = driver.find_elements(By.TAG_NAME, 'img')
for img in images:
    img_url = img.get_attribute('src')
    if 'data:image/gif;base64' in img_url:
        img_url = img.get_attribute('data-src')
    print(img_url)
  • 确保图片加载开启:检查Selenium配置,不要开启禁用图片加载的选项,否则浏览器永远只会返回占位图。

更高效的替代方案

直接抓后端API接口:打开浏览器开发者工具的Network面板,过滤XHR/Fetch请求,找到返回商品列表的接口,直接请求该接口获取数据,里面会包含完整的图片URL,无需处理懒加载问题。

额外提醒:爬取时添加随机延迟,避免频繁请求导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:12:16