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和MD5实现网站挂马检测程序
Mar 13 Python
Python读取环境变量的方法和自定义类分享
Nov 22 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
python黑魔法之参数传递
Feb 12 Python
利用Python爬取可用的代理IP
Aug 18 Python
Python数据类型之Tuple元组实例详解
May 08 Python
python lxml中etree的简单应用
May 10 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
Python request操作步骤及代码实例
Apr 13 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数组转成json格式的方法
2015/03/09 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
详解JS面向对象编程
2016/01/24 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python递归函数特点及原理解析
2020/03/04 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
经典c++面试题六
2012/01/18 面试题
港湾网络笔试题
2014/04/19 面试题
网游商务专员求职信
2013/10/15 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书