使用Streamlit的st.image显示图片时出现异常错误
Streamlit中st.image显示爬取图片异常的解决方法
你的代码里存在冗余的base64解码操作(未实际使用),核心问题大概率是请求未携带必要的请求头,导致Unsplash返回的内容在Streamlit中解析异常,另外也可以通过简化图片传递方式来避免潜在兼容问题。
修正后的代码
import requests from PIL import Image import streamlit as st from io import BytesIO def new_img(txt): # 添加User-Agent模拟浏览器请求,避免被拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } url = f"https://source.unsplash.com/random{txt}" response = requests.get(url, headers=headers) # 先验证请求是否成功 if response.status_code != 200: st.error(f"图片请求失败,状态码:{response.status_code}") return # 两种可行的显示方式选其一即可 # 方式1:直接传入图片二进制数据(推荐,更简洁) st.image(response.content) # 方式2:通过PIL Image对象显示(适合需要先处理图片的场景) # aux_im = Image.open(BytesIO(response.content)) # st.image(aux_im)
关键修复点
- 添加请求头:Unsplash的部分接口会拦截无标识的爬虫请求,模拟浏览器的User-Agent可以避免返回异常内容;
- 增加状态校验:通过状态码判断请求是否成功,能快速排查网络或接口问题;
- 简化传递逻辑:直接用
response.content传递二进制数据给st.image,减少PIL转换环节的潜在兼容问题; - 清理冗余代码:移除了未使用的
base64、matplotlib导入,让代码更简洁。
内容的提问来源于stack exchange,提问作者Jesmine
相关产品推荐
相关产品推荐

