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 简单的多线程链接实现代码
Aug 28 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python多线程实现同步的四种方式
May 02 Python
Python算法之图的遍历
Nov 16 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
django 环境变量配置过程详解
Aug 06 Python
通过python检测字符串的字母
Feb 18 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python创建模块及模块导入的方法
2015/05/27 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
平面设计自荐信
2013/10/07 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
给护士表扬信
2014/01/19 职场文书
总经理助理工作职责
2014/02/06 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
尊师重教演讲稿
2014/09/04 职场文书
人民检察院起诉书
2015/05/20 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
高中班长竞选稿
2015/11/20 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android