Python 下载Bing壁纸的示例


Posted in Python onSeptember 29, 2020

这个示例使用的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/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

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

以上就是Python 下载Bing壁纸的示例的详细内容,更多关于Python 下载Bing壁纸的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用正则匹配实现抓图代码分享
Apr 02 Python
整理Python最基本的操作字典的方法
Apr 24 Python
Python实现统计单词出现的个数
May 28 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
如何更优雅地写python代码
Jul 02 Python
安装docker-compose的两种最简方法
Jul 30 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 Python
pycharm 2020 1.1的安装流程
Sep 29 #Python
利用django创建一个简易的博客网站的示例
Sep 29 #Python
如何基于Python实现word文档重新排版
Sep 29 #Python
python实现简单贪吃蛇游戏
Sep 29 #Python
python爬虫---requests库的用法详解
Sep 28 #Python
如何在scrapy中捕获并处理各种异常
Sep 28 #Python
python向企业微信发送文字和图片消息的示例
Sep 28 #Python
You might like
PHP工厂模式简单实现方法示例
2018/05/23 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
JavaScript事件 "事件对象"的注意要点
2016/01/14 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Django自定义认证方式用法示例
2017/06/23 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python中kmeans聚类实现代码
2018/02/23 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Python配置文件处理的方法教程
2019/08/29 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
请解释在new与override的区别
2012/10/29 面试题
标准自荐信范文
2014/01/29 职场文书
酒店营销策划方案
2014/02/07 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
慰问信范文
2015/02/14 职场文书