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

BeautifulSoup图片下载报错:TypeError类型错误求解

解决爬取图片时的TypeError:需要bytes-like对象而非Response

嘿,我来帮你搞定这个问题!你遇到的这个报错其实很常见——f.write(requests.get(img))里直接传了requests的Response对象,但文件写入需要的是字节数据,所以才会提示类型不匹配。

正确的写法是什么?

requests.get(img)返回的是一个Response对象,你需要取它的.content属性,这个属性才是图片的二进制字节流,所以代码应该改成:

f.write(requests.get(img).content)

不过更稳妥的做法是先把Response对象存下来,顺便检查请求是否成功,避免无效URL导致的错误,比如:

response = requests.get(img)
# 检查请求是否成功(状态码200)
if response.status_code == 200:
    f.write(response.content)

结合你的代码给出完整示例

我把你提到的模块导入、目录创建、页面解析和图片下载整合起来,给你一个完整的可运行示例:

import os
import requests
from bs4 import BeautifulSoup

# 创建保存图片的目录,避免找不到路径
dir_path = os.path.join(os.getcwd(), "downloaded_images")
if not os.path.exists(dir_path):
    os.makedirs(dir_path)

# 假设你已经通过某种方式获取了页面源码source
soup = BeautifulSoup(source, 'html.parser')

# 找到页面中所有的img标签(你可以根据实际需求调整选择器,比如指定class)
img_tags = soup.find_all('img')

for img_tag in img_tags:
    img_url = img_tag.get('src')
    if not img_url:
        continue  # 跳过没有src属性的无效图片标签
    
    try:
        # 发送请求获取图片二进制内容
        response = requests.get(img_url)
        response.raise_for_status()  # 如果请求失败(比如404、500),直接抛出异常
        
        # 生成图片保存的文件名,这里简单用URL的最后一部分,你也可以自定义命名规则
        img_filename = os.path.basename(img_url)
        # 拼接完整的保存路径
        save_path = os.path.join(dir_path, img_filename)
        
        # 以二进制写入模式打开文件,写入图片内容
        with open(save_path, 'wb') as f:
            f.write(response.content)
        print(f"图片下载成功:{save_path}")
    except Exception as e:
        print(f"下载图片 {img_url} 失败:{str(e)}")

几个关键细节说明

  1. 为什么用.content而不是.text?

    • .content是Response对象的二进制响应内容,专门用来处理图片、视频这类非文本文件;
    • .text是把响应内容解码成文本字符串,用来处理HTML、JSON这类文本数据,用在图片上会导致乱码或者写入失败。
  2. 文件打开模式必须是'wb'

    • 'w'是文本写入模式,而图片是二进制文件,必须用'wb'(write binary)模式打开,否则会报错或者图片损坏。
  3. 关于BeautifulSoup的初始化
    你用的soup = BeautifulSoup(source, 'html.parser')完全没问题!示例里的soup = BeautifulSoup(r.content)只是因为示例中直接用了requests请求页面的响应内容r.content,本质上都是传入页面的HTML源码,你的写法不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:01