Python 下载Bing壁纸的示例

作者:DerWald 时间:2023-11-20 00:14:41 

这个示例使用的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一次获取多少张图片,最大值为71,2 ... 7
nc时间戳,以毫秒表示1600743189543
pid不知道这个参数有啥用hp

二、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这里,虽然没写完整的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/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

如果能看到最后,或对你有帮助的话,欢迎在评论区留言一起交流。

来源:https://www.cnblogs.com/derwald/p/13711116.html

标签:Python,下载,Bing,壁纸
0
投稿

猜你喜欢

  • widows下安装pycurl并利用pycurl请求https地址的方法

    2023-07-09 03:21:18
  • SQL 中的For Xml Path详解

    2024-01-27 21:19:37
  • GoJs的文本绘图模板TextBlock使用实例

    2023-08-26 16:01:00
  • python 实现任务管理清单案例

    2023-09-01 04:59:17
  • 使用Python实现图像融合及加法运算

    2021-03-03 06:19:42
  • 两种oracle创建字段自增长的实现方式

    2024-01-15 09:47:44
  • php隐藏IP地址后两位显示为星号的方法

    2023-08-16 13:05:17
  • Windows 本地安装 Mysql8.0图文教程

    2024-01-15 17:24:05
  • CentOS 7.6安装MySQL 5.7 GA版的教程图解

    2024-01-27 11:47:48
  • vue-cli的eslint相关用法

    2024-05-02 17:08:46
  • 深入透析样式表滤镜(上)

    2011-06-14 09:48:40
  • Oracle重建控制文件的实例教程

    2024-01-25 11:02:16
  • Python KMeans聚类问题分析

    2023-11-24 14:15:52
  • Apache2 httpd.conf 中文版

    2023-10-28 04:19:38
  • PHP设计模式之命令模式示例详解

    2024-05-11 10:11:06
  • python使用mysql的两种使用方式

    2024-01-23 10:39:36
  • python中的pygame实现接球小游戏

    2021-10-21 13:33:50
  • pytorch常见的Tensor类型详解

    2022-10-25 19:34:01
  • 利用arcgis的python读取要素的X,Y方法

    2023-03-13 11:27:05
  • Python imutils 填充图片周边为黑色的实现

    2021-04-13 04:06:32
  • asp之家 网络编程 m.aspxhome.com