您的位置:首页技术文章
文章详情页

Python 下载Bing壁纸的示例

【字号: 日期:2022-07-09 15:41:44浏览:9作者:猪猪

这个示例使用的Python版本为3.7版本,

一、bing壁纸接口

访问bing的官网,通过浏览器开发者工具,查看网络可以找到一个请求壁纸的接口,至于怎么判断的,我是发现当我把鼠标放在切换壁纸的左右箭头时,发现发送了一个请求,查看请求里面是有当前的壁纸信息的,链接、描述等等……

Python 下载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程序

首先肯定是读取接口的返回数据了,这次使用的是requests框架,可以使用pip安装

pip install requests

获取壁纸json数据

#!/usr/bin/pythonimport requestsimport time# 时间戳timestamp = str(int(time.time() * 1000))# 拼接请求地址url = ’https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=’ + timestamp + ’&pid=hp’# 请求头,模拟浏览器UAheaders = { ’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这里,虽然没写完整的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接口返回的数据,根据网友们的说法,最大可以获得16张bing壁纸图片,通过跳转idx和n这两个参数,有兴趣可以试试,这里我就不再多说了,另外这个程序可以再做一些拓展,把多张bing壁纸保存下来。完整的代码如下

#!/usr/bin/pythonimport requestsimport time# 时间戳timestamp = str(int(time.time() * 1000))# 拼接请求地址url = ’https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=’ + timestamp + ’&pid=hp’# 请求头,模拟浏览器UAheaders = { ’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壁纸的示例的详细内容,更多关于Python 下载Bing壁纸的资料请关注好吧啦网其它相关文章!

标签: Python 编程
相关文章: