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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
收藏整理的一些Python常用方法和技巧
May 18 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Java分治归并排序算法实例详解
Dec 12 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Python构建图像分类识别器的方法
Jan 12 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
Python帮你识破双11的套路
Nov 11 Python
Python终端输出彩色字符方法详解
Feb 11 Python
python Plotly绘图工具的简单使用
Mar 03 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python django框架 web端视频加密的实例详解
Nov 20 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
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
jQuery入门知识简介
2010/03/04 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python入门篇之列表和元组
2014/10/17 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python递归实现快速排序
2018/08/18 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
经典优秀个人求职信分享
2013/12/12 职场文书
预备党员政审材料
2014/02/04 职场文书
给小学生的新年寄语
2014/04/04 职场文书
协议书模板
2014/04/23 职场文书
党支部活动策划方案
2014/08/18 职场文书
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL