Python 调用 Bing 接口自动下载高清壁纸
本文介绍如何使用 Python 的 requests 库调用 Bing 官网提供的图片接口,自动获取并下载每日高清壁纸。文章详细解析了接口参数含义,提供了完整的代码示例,包括请求构造、JSON 数据解析及图片保存逻辑,并提及了官方 Windows 应用作为替代方案。
Python 调用 Bing 接口自动下载高清壁纸
本示例基于 Python 3.7 版本进行开发。
Bing 壁纸接口分析
一、Bing 壁纸接口分析
访问 Bing 官网后,利用浏览器开发者工具监控网络请求,可以发现一个用于获取壁纸信息的接口。具体判断依据是:当鼠标悬停在切换壁纸的左右箭头时,浏览器会发送特定请求,该请求返回了当前壁纸的详细信息,包括图片链接和描述等。

通过上述分析,我们确定了获取壁纸信息的核心接口。
https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=1600743189543&pid=hp
结合网络资料,可以明确接口中各参数的具体含义。
| 参数 | 说明 | 可能的值 |
|---|---|---|
| format | 返回数据格式,固定是json的 | js |
| idx | 倒数第几天的壁纸,最大为7天内,正整数表示倒数第几天 | 0,1,2 ... 7 |
| n | 一次获取多少张图片,最大值为7 | 1,2 ... 7 |
| nc | 时间戳,以毫秒表示 | 1600743189543 |
| pid | 不知道这个参数有啥用 | hp |
Python 程序实现
二、Python 程序实现
首先需要读取接口返回的数据,本文使用 requests 框架,可通过 pip 命令进行安装。
pip install requests
获取壁纸的 JSON 数据。
#!/usr/bin/python
import requests
import time
# 时间戳
timestamp = str(int(time.time() * 1000))
# 拼接请求地址
url = 'https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=' + timestamp + '&pid=hp'
# 请求头,模拟浏览器UA
headers = {
'User-Agent': ' '.join(['Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14)',
'AppleWebKit/537.36 (KHTML, like Gecko)', 'Chrome/70.0.3538.102', 'Safari/537.36',
'Edge/18.18363'])
}
r = requests.get(url=url, headers=headers)
result = r.json()
根据前述请求接收到的 JSON 数据结构,需要注意的是,实际图片链接位于 $.images[*].url 字段中。虽然该字段未包含完整的域名信息,但通过测试可以确认其域名属于 Bing。
{
"images": [{
"startdate": "20200921",
"fullstartdate": "202009211600",
"enddate": "20200922",
"url": "/th?id=OHR.Matamata_ZH-CN8111830275_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.Matamata_ZH-CN8111830275",
"copyright": "马塔马塔附近的霍比特人村,新西兰北岛 (© 500px Asia/Getty Images)",
"copyrightlink": "https://www.bing.com/search?q=%E9%A9%AC%E5%A1%94%E9%A9%AC%E5%A1%94&form=hpcapt&mkt=zh-cn",
"title": "",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20200921_Matamata%22&FORM=HPQUIZ",
"wp": true,
"hsh": "fab9fa6464d63e134ae0415d9f67aac5",
"drk": 1,
"top": 1,
"bot": 1,
"hs": []
}],
"tooltips": {
"loading": "正在加载...",
"previous": "上一个图像",
"next": "下一个图像",
"walle": "此图片不能下载用作壁纸。",
"walls": "下载今日美图。仅限用作桌面壁纸。"
}
}
获取图片地址后,即可执行下载操作。结合前文代码,补充保存图片的相关逻辑。
# 获取第一个图片的链接
image_url = result['images'][0]['url']
# 拼接上bing的域名
image_url = 'https://cn.bing.com' + image_url
# 定义图片保存地址
save_image_file = '/opt/images/bing.jpg'
# 下载图片
r = requests.get(url=image_url, headers=headers)
# 注意要以二进制只写打开文件
with open(save_image_file, 'wb') as f:
# 图片的二进制数据
f.write(r.content)
图片下载并保存完成后,根据 Bing 接口返回的数据及网友经验分享,通过调整 idx 和 n 参数,理论上最多可获取 16 张 Bing 壁纸。有兴趣的读者可自行尝试,此处不再赘述。此外,该程序还可进一步扩展,以实现多张壁纸的批量保存。 完整代码如下:
#!/usr/bin/python
import requests
import time
# 时间戳
timestamp = str(int(time.time() * 1000))
# 拼接请求地址
url = 'https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=' + timestamp + '&pid=hp'
# 请求头,模拟浏览器UA
headers = {
'User-Agent': ' '.join(['Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14)',
'AppleWebKit/537.36 (KHTML, like Gecko)', 'Chrome/70.0.3538.102', 'Safari/537.36',
'Edge/18.18363'])
}
# 发送请求
r = requests.get(url=url, headers=headers)
# 将响应的字符串转化为json数据,即dict类型
result = r.json()
# 获取第一个图片的链接
image_url = result['images'][0]['url']
# 拼接上bing的域名
image_url = 'https://cn.bing.com' + image_url
# 定义图片保存地址
save_image_file = '/opt/images/bing.jpg'
# 下载图片
r = requests.get(url=image_url, headers=headers)
# 注意要以二进制只写打开文件
with open(save_image_file, 'wb') as f:
# 图片的二进制数据
f.write(r.content)
此外,微软官方也推出了 Bing 壁纸的 Windows 客户端,如果不介意壁纸上显示 Logo,可以尝试使用,官方地址为:
https://www.microsoft.com/en-us/bing/bing-wallpaper
如果本文对您有帮助,欢迎在评论区留言交流。
以上是关于 Python 下载 Bing 壁纸示例的详细内容,更多相关技术资料请关注本站其他文章。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









