使用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)
关键修复说明
- 正确获取图片数据:每个图片都需要单独发起请求,用返回的
img_res对象读取二进制内容,不能复用网页请求的res - 处理相对路径:原网页中图片的
src是../media/xxx格式的相对路径,必须拼接成完整绝对URL才能正常访问 - 简化流程:无需将网页保存到本地再重新读取,直接用
res.text传入BeautifulSoup解析即可 - 安全文件操作:
with open语句会自动关闭文件,避免资源泄漏
内容的提问来源于stack exchange,提问作者user17168761
相关产品推荐
相关产品推荐

