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

如何解决Python/Beautiful Soup爬取图片时出现的MissingSchema报错

报错原因

requests.exceptions.MissingSchema报错的直接原因是你获取到的href属性值是相对路径URL,没有携带https协议头和必应域名前缀,requests无法直接请求这类地址。
另外你当前的逻辑还有两个隐藏问题:

  • 该href指向的是必应图片的详情页,不是原始图片的直链,就算补全域名请求也拿不到图片资源
  • 计数器i的初始化放在了循环内部,每次循环都会重置为0,最终只会保留最后一张爬取的图片,前面的都会被覆盖
修复步骤
  1. 解析必应页面iusc类a标签的m属性(JSON格式),直接获取原始图片的完整直链murl,无需手动拼接路径
  2. 把计数器i的初始化移到循环外部
  3. 新增目录存在性校验、异常捕获逻辑,避免脚本异常中断
  4. 补充请求头避免被必应反爬策略拦截
修复后的完整代码
from bs4 import BeautifulSoup
import requests
from PIL import Image
from io import BytesIO
import json
import os

# 提前创建保存图片的目录
save_dir = "./scraped_images/"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

search = input("Enter: ")
params = {"q": search}
url = "https://www.bing.com/images/search"
# 加请求头避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

r = requests.get(url, params=params, headers=headers)
soup = BeautifulSoup(r.text, "html.parser")
links = soup.findAll("a", {"class": "iusc"})

# 计数器放在循环外部
i = 0
for item in links:
    try:
        # 解析m属性获取原始图片地址
        m_data = json.loads(item.attrs["m"])
        img_url = m_data["murl"]
        # 请求原始图片
        img_obs = requests.get(img_url, headers=headers, timeout=10)
        img = Image.open(BytesIO(img_obs.content))
        # 保存图片,补充后缀名更规范
        img.save(f"{save_dir}{str(i)}.{img.format.lower()}", img.format)
        i += 1
    except Exception as e:
        print(f"第{i}张图片爬取失败:{str(e)}")
        continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:45:01