python学习笔记 | macOS Big Sur动态壁纸食用指南
目录
前言
北京时间23日凌晨1点,苹果WWDC2020大会开幕。在发布会上,苹果正式发布了新版macOS,并将其命名为“Big Sur”。

相比于外界争议最大的UI界面,令我更为关注的是这次的系统动态壁纸,跟过去几年的版本更新一样,这次的macOS系统版本命名也取自自然景点的名字,即“Big Sur”,好像是在加州西海岸的一个景点,而且这一版动态壁纸依然支持根据时间变化进行明暗的切换,总之很好看就对了,超想要的!于是我开始在网上寻找最新的这一版本动态壁纸,幸运地,最后让我找到了这个神奇的网站:
「https://dynamicwallpaper.club」
需要注意的是,这个网站需要科*上网才能打开,并且需要登录才能查看网页包含的动态壁纸

登录进去之后,在首页Gallery选项的位置,可以看到不仅有最新的Big Sur壁纸,还有许多macOS支持的动态壁纸,有很多还是5k级别的质量,点进去之后就可以找到下载壁纸的按钮

下载流程很简单,基本下载到本地就可以为我们所用了
除了最新的这款壁纸,网站里很多精美的壁纸也很值得一试
这个时候我又想,这么多壁纸要是一个个下载得多麻烦,要是有什么方法能够一下子把所有的壁纸下载下来就舒服了!
爬虫篇
好久没有写爬虫程序了,练练手
(这里比较长,可以直接跳到这里获得壁纸资源:壁纸使用篇)
首先还是上一张图的位置,在点击下载按钮的同时,我通过浏览器的开发者工具捕获到这些请求:

点开下面这一条请求,发现它是这样的

接着复制这条请求的url,粘贴到浏览器地址栏,这个时候壁纸马上进行了下载,于是现在我们可以确定:
这条请求就是这张big sur壁纸的真实下载链接!
https://firebasestorage.googleapis.com/v0/b/dynamic-wallpapers-6a7ab.appspot.com/o/wallpapers%2Fdgvrihxpu2h%2FBig%20Sur.heic?alt=media&token=38f034ba-5ebb-4891-b483-35f0a82476cd
按照以往的经验,一般同一网站下的同一格式的资源,其链接都会遵循同一规则或方法来进行命名
也就是说
我们可以通过这条链接,找到跟其他壁纸链接同样的命名规律,进而得到其他所有壁纸的真实下载链接!
说干就干
现在让我们来分析一下这条请求
首先从前到后,一直到wallpapers这里,都没有出现一些特殊的符号或字段,预估这些应该都是需要加上的字段,并且不是唯一的
经过反复的测试,我发现包括其他的壁纸在内,其实所有的下载链接不同点就在于这三个地方:
https://firebasestorage.googleapis.com/v0/b/dynamic-wallpapers-6a7ab.appspot.com/o/wallpapers%2Fdgvrihxpu2h%2FBig%20Sur.heic?alt=media&token=38f034ba-5ebb-4891-b483-35f0a82476cd
- token
最先发现的是最后一个字段,由于“token”这个字眼真的太明显了,按照经验基本可以确定这是一个唯一参数
- name
再往前看,到“Big%20Sur”这里,很容易地发现这是壁纸的名字(其实我观察了很久才发现
比较特别,有个“%20”,原因是名字中间的空格被“%20”这个字符串替代了
- id
最后一个参数也是最难发现的,最后通过比对首页壁纸列表的网页源代码,我发现这个字段是存在在每个壁纸的跳转链接中的
在此暂时称这个参数为壁纸的id

ok,前两个参数(id,name)我们已经了解了来龙去脉,比较容易获取,最后比较麻烦的是这个token
同样是在一开始big sur壁纸详情页面,复制真实链接中token的值,粘贴到开发者工具的搜索框,这个时候我发现可以匹配到几条包含token值的请求

点进去第一个,在右侧的请求返回信息窗口,最后一行可以找到token值“38f034ba-5ebb-4891-b483-35f0a82476cd”

好家伙,原来藏在这!
现在我们可以得知,token值其实是通过访问这条请求,在返回的信息中获取到的,而且是“downloadTokens”键的值
这样一来就简单多了,我们只需要通过访问这条请求就可以拿到token值!
点开上面这条请求的headers选项,可以发现它的请求链接是这样的:

emmmm,是不是有点眼熟? 没错,里面包含的两个特殊字段都是我们之前见过的,一个是壁纸的id,一个是壁纸的名字name
获取三个参数(id,name,token)的相关代码:

到这里难点都基本解决了,后面就从首页的壁纸列表逐页爬取即可
网络请求用的是requests模块,文本解析用的是etree和正则表达式re,都是python源码自带的

开始爬取...

牛逼,全部爬下来了!
壁纸使用篇
现在已经获取到了动态壁纸,即macOS支持的文件heic动态壁纸文件
所有的壁纸下载链接放到这里了:http://billie52707.cn/true_heic_urls.html(同样需要科*上网才能下载(手动doge
设置壁纸的方法如下:
- 打开终端,输入「open /Library」,进入放置壁纸的文件夹:/Desktop Pictures

- 将heic壁纸文件拖动到/Desktop Pictures文件夹下
- 桌面右键,设置桌面背景,即可设置下载的壁纸,效果如下:

awesome!
后记
某hub地址在这:https://github.com/chenxuefan/Dynamicwallpaper
后面可以加个按照壁纸分类来下载的功能,还有图形界面
不说了,做作业去了
python学习笔记 | macOS Big Sur动态壁纸食用指南的更多相关文章
- python学习笔记八--动态类型
一.变量,对象,引用: 1. 变量: 2. 对象:均包含了一个头部信息,有以下两部分内容 a.对象的数据类型, b.引用计数器:纪录当前引用货指向该对象的数量,一旦计数器被清零,该对象的内存空间就会被 ...
- Python学习笔记(3)动态类型
is运算符 ==是值相等而is必须是相同的引用才可以 l=[1,2,3] m=[1,2,3] print(l==m) # True print(l is m) # False sys模块 getref ...
- Deep learning with Python 学习笔记(10)
生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...
- Deep learning with Python 学习笔记(9)
神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- python学习笔记1之-python简介及其环境安装
python学习笔记之-python简介及其环境安装 最近几年python之火不用多说,最近开始利用时间自学python,在学习的过程中,按照自己的思路和理解记录下学习的过程,并分享出来,如果正好你也 ...
- Python 学习笔记(下)
Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...
随机推荐
- AcWing 294. 计算重复
暴力 其实这题的暴力就是个模拟.暴力扫一遍 \(conn(s_1, n_1)\),若出现了 \(res\) 个 \(s_2\). 答案就是 \(\lfloor res / n1 \rfloor\). ...
- C 与 C++ 中 指向二维数组的指针进行指针运算
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 nums 为例: 从概念上理解,nums 的分布像一个矩阵,但在 ...
- c++笔试题3
一.[阿里C++面试题]1.如何初始化一个指针数组.答案: 错题解析:首先明确一个概念,就是指向数组的指针,和存放指针的数组. 指向数组的指针:char (*array)[5];含义是一个指向存放5个 ...
- 安卓和ios的app证书过期的相关问题汇总
一,ios的APP的发布流程请见:ios的APP的发布流程 http://www.jianshu.com/p/b1b77d804254 这篇文章写得很好很全面 二,app证书过期了怎么办: IOS的情 ...
- 开发阶段,将SpringBoot应用快速部署到K8S
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- react第十五单元(react路由的封装,以及路由数据的提取)
第十五单元(react路由的封装,以及路由数据的提取) #课程目标 熟悉react路由组件及路由传参,封装路由组件能够处理路由表 对多级路由能够实现封装通用路由传递逻辑,实现多级路由的递归传参 对复杂 ...
- js下 Day01、DOM对象,BOM浏览器对象模型
一.初识DOM 1.什么是DOM?为什么学习DOM 2.DOM是实现js在网页实现交互的关键环节,我们的js代码就是通过DOM的方法来实现对于html内容的操作. 3.认识DOM实现了js和网页结合的 ...
- layui的登录页面设计
主要的结构 先导入layui的主要的js和css等 <html> <head> <meta charset="utf-8"> <title ...
- 工具-Git与GitHub-GitHub使用(99.5.3)
@ 目录 1.在github中添加公钥 2.克隆项目 3.在本地工作区新建分支,修改文件并提交 4.推送到远程仓库 5.从远程分支上拉取代码 关于作者 1.在github中添加公钥 首次使用git必须 ...
- 多年总结IDEA 使用技巧 (建议收藏!)
很长一段时间没有更新了,前段时间转测试了,浪费了一些时间,终于可以写文章了,今天来写一下之前自己开发的一些习惯,因为自己本身自己是一个极简主义所以 开发喜欢这样:. 全屏显示 我们可以使用[Prese ...