求助:使用PokeAPI加载宝可梦精灵图失败,此前正常运行
解决PokeAPI精灵图加载失败的问题
排查步骤
- 验证URL有效性:把链接里的
{id of the Pokemon}替换成具体数字(比如1),直接在浏览器打开。如果显示404,说明硬编码的GitHub路径已经失效;如果能正常打开,问题大概率出在请求头或网络环境。 - 检查requests请求状态:运行以下代码查看返回码,快速定位问题类型:
import requests url = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png" response = requests.get(url) print(response.status_code)- 403:GitHub的反爬机制拦截了请求,需要添加请求头
- 404:路径错误,需更新图片链接
- 200但图片无法显示:可能是网络代理/防火墙限制,或图片数据解析问题
解决方案
1. 改用PokeAPI接口动态获取图片链接(推荐)
硬编码GitHub路径容易因为资源迁移失效,直接调用PokeAPI获取官方维护的图片链接更可靠:
import requests def fetch_pokemon_sprite(pokemon_id): api_endpoint = f"https://pokeapi.co/api/v2/pokemon/{pokemon_id}/" resp = requests.get(api_endpoint) if resp.ok: pokemon_data = resp.json() # 取默认正面精灵图,也可以选其他规格比如official-artwork return pokemon_data["sprites"]["front_default"] return None # 示例:获取ID为1的妙蛙种子图片链接 sprite_url = fetch_pokemon_sprite(1)
拿到链接后直接传给AsyncImage即可。
2. 添加请求头绕过反爬
如果坚持用原GitHub路径,给请求添加User-Agent头,避免被GitHub拦截:
- 用requests加载时:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"} response = requests.get(url, headers=headers) - 在kivyMD的
AsyncImage中设置:from kivymd.uix.image import AsyncImage sprite_img = AsyncImage( source="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png", headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"} )
3. 检查网络环境
确认本地没有代理、防火墙或VPN阻止访问GitHub的raw资源,尝试切换网络(比如从公司网换为手机热点)测试。
内容的提问来源于stack exchange,提问作者Omanshu
相关产品推荐
相关产品推荐

