Python脚本调用维基百科图片遇403错误,求助按User-Agent政策指定联系信息
Python脚本调用维基百科图片遇403错误,求助按User-Agent政策指定联系信息
嗨,这个问题我之前踩过坑!维基媒体的图片服务器对请求的User-Agent有严格的规范要求,默认的Python请求库(比如requests或者urllib)自带的UA标识会被判定为不规范请求,直接返回403 Forbidden——核心原因就是你没在请求头里提供能联系到你的有效信息,他们需要区分正常请求和恶意爬虫,也方便在有问题时找到使用者。
给你两个常用库的实际解决代码示例,你照着改就行:
用requests库的情况
import requests # 替换成你的真实信息!格式建议是「项目名称/版本 (联系邮箱)」 custom_headers = { 'User-Agent': '我的图片下载脚本/1.0 (xxx@example.com)' } image_url = "https://upload.wikimedia.org/wikipedia/commons/1/14/Orange-Fruit-Pieces.jpg" response = requests.get(image_url, headers=custom_headers) if response.status_code == 200: with open("orange.jpg", "wb") as f: f.write(response.content) print("图片下载成功啦!") else: print(f"还是失败了,状态码:{response.status_code}")
用urllib库的情况
from urllib.request import Request, urlopen custom_headers = { 'User-Agent': '我的个人图片采集工具/0.1 (yyy@example.com)' } request = Request(image_url, headers=custom_headers) with urlopen(request) as response: with open("orange.jpg", "wb") as f: f.write(response.read()) print("搞定!图片存好了")
几个关键提醒:
- 绝对不能用默认UA(比如
python-requests/2.31.0或者Python-urllib/3.11),这种100%会被拦截 - 联系信息一定要真实有效,哪怕是个人非项目使用,也可以写成「你的昵称 (你的邮箱)」
- UA格式不用太复杂,只要能清晰标识请求来源和联系人就行
按照这个方法设置后,请求就符合维基媒体的User-Agent政策了,403的问题应该就能解决!
内容来源于stack exchange




