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 相关文章推荐
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python机器学习实战之K均值聚类
Dec 20 Python
Python星号*与**用法分析
Feb 02 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
Python中print和return的作用及区别解析
May 05 Python
Python读取xlsx文件的实现方法
Jul 04 Python
python提取log文件内容并画出图表
Jul 08 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
tensorflow常用函数API介绍
Apr 19 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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学习之运算符相关概念
2011/06/09 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
污水厂厂长岗位职责
2014/01/04 职场文书
《猫》教学反思
2014/02/26 职场文书
学生会部长竞聘书
2014/03/31 职场文书
关于五一放假的通知
2015/08/18 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
HTTP中的Content-type详解
2022/01/18 HTML / CSS
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python