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编写简单的画图板程序的示例教程
Dec 08 Python
python运行时间的几种方法
Jun 17 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
python去除文件中重复的行实例
Jun 29 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
PyTorch中topk函数的用法详解
Jan 02 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Restful_framework视图组件代码实例解析
Nov 17 Python
Python开发五子棋小游戏
Apr 28 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
python读取word文档的方法
2015/05/09 Python
python 不以科学计数法输出的方法
2018/07/16 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
安全生产承诺书
2014/03/26 职场文书
小学生操行评语
2014/04/22 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
开天辟地观后感
2015/06/09 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript