必应壁纸API仍可用但需合规调用:必须带format=json、idx=0等参数,使用User-Agent等headers,取images[0].url直连地址下载,单次最多8张,高清需指定width/height参数。

必应壁纸API接口现在还能用吗
不能直接用旧版 www.bing.com/HPImageArchive.aspx 无参数访问了——它现在强制要求 format=json 和 idx=0,且返回的图片URL带临时签名(urlbase + url 拼接后仍可能 403)。更关键的是:微软已关闭未授权的批量抓取行为,高频请求会触发反爬,返回空数据或 403 错误页。
- 必须加
headers模拟浏览器(至少含User-Agent) - 推荐加
Accept-Language: zh-CN,zh;q=0.9提高成功率 - 单次请求最多获取 8 张(
count=8),但idx=0才是当日图 - 不要用
urlbase自己拼后缀,老方法失效;必须取images[0].url的完整值(它已是可直连的 HTTPS 地址)
Python 脚本怎么稳定下载当天壁纸
核心是用 requests 获取 JSON,提取 images[0].url,再用 urllib.parse.urljoin 补全绝对地址(防相对路径),最后用 requests.get(..., stream=True) 流式保存。
- 一定要检查响应状态码:
r.status_code == 200,否则跳过 - 下载前先用
os.path.splitext从 URL 提取后缀(如.jpg),别硬写.jpg - 文件名建议用
datetime.now().strftime("%Y%m%d"),避免重名 - 加
time.sleep(1)防被限流(哪怕每天只跑一次,也建议加)
import requests
import os
from datetime import datetime
from urllib.parse import urljoin
<p>url = "<a href="https://www.php.cn/link/e9ab41bc94bcd184eba7cfae0d75e40a">https://www.php.cn/link/e9ab41bc94bcd184eba7cfae0d75e40a</a>"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}</p><p>r = requests.get(url, headers=headers, timeout=10)
if r.status_code != 200:
print("API 请求失败")
exit()</p><p>data = r.json()
img<em>url = urljoin("<a href="https://www.php.cn/link/5a6f34e3880e181e080f6a962ca828c1">https://www.php.cn/link/5a6f34e3880e181e080f6a962ca828c1</a>", data["images"][0]["url"])
fname = f"bing</em>{datetime.now().strftime('%Y%m%d')}{os.path.splitext(img_url)[1]}"</p><p>with requests.get(img_url, stream=True) as resp:
resp.raise_for_status()
with open(fname, "wb") as f:
for chunk in resp.iter_content(8192):
f.write(chunk)</p>定时执行该脚本的常见方式有哪些
Windows 用户直接用任务计划程序,触发器设为“每天 8:00”,操作选“启动程序”,程序填 python.exe,参数填脚本绝对路径(如 C:\wallpaper\bing.py)。
- Linux/macOS 用
crontab -e,加一行:0 8 <em> </em> * /usr/bin/python3 /home/user/bing.py - 注意 cron 环境变量精简,脚本里别依赖
$HOME或未声明的 PATH,路径全用绝对路径 - 如果用 conda/virtualenv,cron 里要显式调用对应 Python 解释器(比如
/opt/anaconda3/bin/python)
为什么下载的图有时模糊或不是高清
必应返回的 images[0].url 默认是 1366x768 尺寸。要高清图,得改请求参数:
立即学习“Python免费学习笔记(深入)”;
- 把
n=1改成n=1&width=3840&height=2160(支持最大 4K) - 但注意:不是所有日期都提供超大尺寸,部分图片只有 1920x1080,
width/height是“尽力而为”,不是强制裁剪 - 另一个坑:mkt 参数影响内容,
mkt=zh-CN返回中文地区图,mkt=en-US可能不同——别漏写
真正的难点不在代码,而在于微软随时可能调整接口结构或签名规则。今天能跑的 URL,下个月未必有效;靠解析 HTML 更不可靠。建议把 API 请求封装成函数,留好日志输出,出问题时第一眼就能看到是 JSON 解析失败,还是 URL 403,还是文件写入权限错误。


















