urllib.request遇HTTP Error 403 Forbidden,请求协助解决文件下载问题
解决urllib下载图片返回403 Forbidden的问题
网站的反爬机制会校验请求头的完整性,仅简单设置User-Agent可能无法通过验证,同时原代码未实现文件保存逻辑,且异常处理过于宽泛。以下是修正后的解决方案:
完整代码示例
import urllib.request url = "https://wallpapercrafter.com/desktop7/1788714-Anime-InuYasha-Kagome-Higurashi-1080P.jpg" # 构造符合真实浏览器特征的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Referer": "https://wallpapercrafter.com/" } try: req = urllib.request.Request(url, headers=headers) with urllib.request.urlopen(req) as response: with open("inuyasha_wallpaper.jpg", "wb") as f: f.write(response.read()) print("图片下载成功") except urllib.error.HTTPError as e: print(f"HTTP错误: {e.code} - {e.reason}") except Exception as e: print(f"其他错误: {str(e)}")
关键优化点
- 完善请求头:补充
Accept、Accept-Language、Referer字段,模拟真实浏览器的请求行为,绕过基础反爬校验。 - 实现文件保存:通过
response.read()读取图片二进制内容,写入本地文件完成下载。 - 精准异常捕获:替换宽泛的
except,针对性捕获HTTP错误和其他异常,便于定位问题。
内容的提问来源于stack exchange,提问作者Jairo
相关产品推荐
相关产品推荐

