You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动