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

Python使用BS4循环爬取图片源时仅获取base64编码,无法提取图片URL如何解决

问题根因

  • 你当前爬取的站点使用了图片懒加载策略:<img>标签的src属性默认放的是base64格式的占位小图,真实图片URL存储在data-src、data-original这类自定义属性中,你只读取src属性自然拿不到有效链接
  • 现有逻辑没有对data:开头的base64内容做跳过处理,遇到这类内容时两个判断分支都不命中,无法给img_link赋值,最终就会触发空值提示

修复方案

  1. 先优化属性取值逻辑,用get()方法替代直接取键,避免部分<img>无src属性时报KeyError
  2. 先判断src是否为base64占位,若是则优先读取懒加载属性存储的真实URL
  3. 遍历所有图片时,只有命中有效URL才终止循环,base64占位的图片直接跳过继续查找下一张

修改后代码

def get_product_data(url):
    response = http.request("GET", url)
    check_conn_errors(response.status)
    bs_data = Bs(response.data, "html.parser")
    product_html = bs_data.find("div", {"class": PRODUCT_DATA_CLASS_NAME})
    imgs = product_html.find_all("img")
    img_link = ""

    for img in imgs:
        # 先取src,无src默认设为空字符串避免报错
        src = img.get("src", "")
        # 跳过base64占位图,先查懒加载常用属性里的真实链接
        if src.startswith("data:"):
            # 可按站点实际情况调整懒加载属性名,常见的有data-src、data-original、data-url
            real_src = img.get("data-src", img.get("data-original", ""))
            if not real_src:
                # 当前img无有效链接,跳过查下一张
                continue
            src = real_src
        # 原有URL拼接逻辑
        if src.startswith("/"):
            img_link = PRODUCTS_URL_PREFIX + src
            break
        elif src.startswith("http") \
                or src.startswith("www") \
                or src.startswith(DEALER_NAME.split(' ')[0].lower()):
            img_link = src
            break

    if img_link == "":
        print("this doesn't work")

#TODO: standardize description scraping

    desc_html = product_html.find_all("div", {"class": DESCRIPTION_CLASS_NAME})
    desc = ""

    for desc_part in desc_html:
        desc += desc_part.text.replace('\n', '&#xD;').replace('\r', '&#xD;').replace('<br/>', '&#xD;').replace('</br>', '&#xD;')
    return [desc, img_link]

如果修改后还是拿不到,可以打印输出单张<img>标签的所有属性,确认站点存储真实图片URL的属性名,替换代码里的懒加载属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:57:02