python获取必应图片2.0

背景介绍
想法
大致思路
ℹ️备注
文件夹按照提取上传的图片时间创建, 按照年-月划分不同的文件夹
- 2026-03文件夹将存放bing在2026年3月上传的图片
- 2026-04文件夹将存放bing在2026年4月上传的图片
- 2026-05文件夹将存放bing在2026年5月上传的图片
接口url信息:
| | |
|---|
| format | | js |
| idx | | 0 |
| n | | 1(一张) |
| mkt | | zh-CN |
实战部分
观察接口返回的数据
- 我们可以先尝试将查询参数中n的值设置为2,观察接口返回的数据

返回的数据如下:
{
"images": [
{
"startdate": "20260317",
"fullstartdate": "202603171600",
"enddate": "20260318",
"url": "/th?id=OHR.PortlandBlossoms_ZH-CN0814501668_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.PortlandBlossoms_ZH-CN0814501668",
"copyright": "汤姆·麦考尔滨水公园的樱花,波特兰,俄勒冈州,美国 (© Eric Vogt/Tandem Stills + Motion)",
"copyrightlink": "https://www.bing.com/search?q=%E6%B1%A4%E5%A7%86%C2%B7%E9%BA%A6%E8%80%83%E5%B0%94%E6%BB%A8%E6%B0%B4%E5%85%AC%E5%9B%AD&form=hpcapt&mkt=zh-cn",
"title": "城市花开",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20260317_PortlandBlossoms%22&FORM=HPQUIZ",
"wp": true,
"hsh": "2c9572aca604148ab6377b18b9c161d5",
"drk": 1,
"top": 1,
"bot": 1,
"hs": [
]
},
{
"startdate": "20260316",
"fullstartdate": "202603161600",
"enddate": "20260317",
"url": "/th?id=OHR.DonegalFort_ZH-CN0718842170_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.DonegalFort_ZH-CN0718842170",
"copyright": "艾利赫格里安南环形堡,多内加尔,爱尔兰 (© Lukassek/Getty Images)",
"copyrightlink": "https://www.bing.com/search?q=%E5%9C%A3%E5%B8%95%E7%89%B9%E9%87%8C%E5%85%8B%E8%8A%82&form=hpcapt&mkt=zh-cn",
"title": "爱尔兰的精神十字路口",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20260316_DonegalFort%22&FORM=HPQUIZ",
"wp": true,
"hsh": "d57e4f597f7ebdb75b72fe8a5f533131",
"drk": 1,
"top": 1,
"bot": 1,
"hs": [
]
},
{
"startdate": "20260315",
"fullstartdate": "202603151600",
"enddate": "20260316",
"url": "/th?id=OHR.PandaForest_ZH-CN0545156080_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.PandaForest_ZH-CN0545156080",
"copyright": "正在吃竹子的大熊猫,中国 (© Entwicklungsknecht/Getty Images)",
"copyrightlink": "https://www.bing.com/search?q=%E5%A4%A7%E7%86%8A%E7%8C%AB&form=hpcapt&mkt=zh-cn",
"title": "走进熊猫世界",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20260315_PandaForest%22&FORM=HPQUIZ",
"wp": true,
"hsh": "470cb2e80d94a6b28ec6af426193bc4e",
"drk": 1,
"top": 1,
"bot": 1,
"hs": [
]
}
],
"tooltips": {
"loading": "正在加载...",
"previous": "上一个图像",
"next": "下一个图像",
"walle": "此图片不能下载用作壁纸。",
"walls": "下载今日美图。仅限用作桌面壁纸。"
}
}
ℹ️备注
观察数据发现接口返回的数据存放在列表里,我们可以通过循环遍历的方式获取数据
进行数据清洗
- res变量是一个字典,get()方法能获取字典中键的值

- 获取到的值images变量是一个列表,可以通过for循环遍历列表中的元素

- 提取每一个元素的链接,标题,时间信息

输出信息:
时间为:20260318
网址为:https://cn.bing.com/th?id=OHR.PortlandBlossoms_ZH-CN0814501668_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp
标题为:城市花开
时间为:20260317
网址为:https://cn.bing.com/th?id=OHR.DonegalFort_ZH-CN0718842170_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp
标题为:爱尔兰的精神十字路口
图片分类(创建文件夹)
根据上传时间创建文件夹

创建图片的文件名
图片将会根据时间存放在相应的文件夹
获取图片

完整代码示例
import requests
import os
def get_image_info():
api_url='https://cn.bing.com/HPImageArchive.aspx'
count=15
query={"format":"js",
"idx":0,
"n":count,
"mkt":"zh-CN"
}
res=requests.get(url=api_url,params=query).json()
images=res.get("images",[])
for image in images:
try:
full_date=image["enddate"]
url=image["url"]
full_url="https://cn.bing.com"+url
title=image["title"]
folder_name=f"{full_date[:4]}-{full_date[4:6]}"
if not os.path.exists(folder_name):
os.makedirs(folder_name)
print(f"检测到新月份,创建文件夹{folder_name}")
file_name=f'{title}_{full_date}.jpg'
file_path=os.path.join(folder_name,file_name)
if not os.path.exists(file_path):
image_data=requests.get(url=full_url).content
with open(file_path,"wb") as file:
file.write(image_data)
print(f"获取到 {file_name}\n文件保存成功!")
else:
print(f"{file_name}\n图片已保存,无需重新下载")
except Exception as e:
print(e)
get_image_info()
目前的功能
效果演示