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

使用Python BeautifulSoup爬取图片出现格式不支持问题求助

问题原因及修复方案

你的代码核心问题有两个:

  • 保存图片时错误复用了请求网页的res对象,导致每个图片文件写入的都是网页HTML内容,而非图片数据
  • 图片的src是相对路径,直接请求会失败

修复后的完整代码

import requests
from bs4 import BeautifulSoup
import os

# 请求网页并直接解析,无需保存本地
res = requests.get('https://books.toscrape.com/')
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')

# 创建图片存储文件夹
os.makedirs('images', exist_ok=True)

# 遍历所有图片标签
for link in soup.find_all('img'):
    img_src = link.get('src')
    # 拼接完整的图片绝对URL,处理相对路径
    full_img_url = 'https://books.toscrape.com/' + img_src.lstrip('../')
    
    # 单独请求图片资源
    img_res = requests.get(full_img_url)
    img_res.raise_for_status()
    
    # 保存图片,用with语句自动管理文件资源
    img_filename = os.path.basename(img_src)
    with open(os.path.join('images', img_filename), 'wb') as img_file:
        for chunk in img_res.iter_content(10000):
            img_file.write(chunk)

关键修复说明

  1. 正确获取图片数据:每个图片都需要单独发起请求,用返回的img_res对象读取二进制内容,不能复用网页请求的res
  2. 处理相对路径:原网页中图片的src是../media/xxx格式的相对路径,必须拼接成完整绝对URL才能正常访问
  3. 简化流程:无需将网页保存到本地再重新读取,直接用res.text传入BeautifulSoup解析即可
  4. 安全文件操作:with open语句会自动关闭文件,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:55:24