当前位置:首页>python>如此简单!关于使用python提取bing图片这件事

如此简单!关于使用python提取bing图片这件事

  • 2026-10-05 22:40:13
如此简单!关于使用python提取bing图片这件事

python获取必应图片2.0

背景介绍

  • 在上一期我们已经完成了图片获取和本地保存

想法

  • 对图片进行简单的分类
  • 一次获取多张图片

大致思路

ℹ️备注

文件夹按照提取上传的图片时间创建, 按照年-月划分不同的文件夹

  • 2026-03文件夹将存放bing在2026年3月上传的图片
  • 2026-04文件夹将存放bing在2026年4月上传的图片
  • 2026-05文件夹将存放bing在2026年5月上传的图片

接口url信息:

参数名
含义
常用取值
format
返回的数据格式
js
 (JSON), xml
idx
起始天数 (相对于今天)
0
 (今天), 1 (昨天)
n
获取图片的数量
1(一张)
mkt
地区 (影响图片内容)
zh-CN
 (中国), en-US (美国)

实战部分

观察接口返回的数据

  • 我们可以先尝试将查询参数中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()           

目前的功能

  • 可以通过修改n和idx的参数值提取未提取的图片
  • 已经提取的图片不会被重复提取
  • 脚本根据图片的年月创建文件夹

效果演示

最新文章

随机文章