目录

前言

北京时间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动态壁纸食用指南的更多相关文章

  1. python学习笔记八--动态类型

    一.变量,对象,引用: 1. 变量: 2. 对象:均包含了一个头部信息,有以下两部分内容 a.对象的数据类型, b.引用计数器:纪录当前引用货指向该对象的数量,一旦计数器被清零,该对象的内存空间就会被 ...

  2. Python学习笔记(3)动态类型

    is运算符 ==是值相等而is必须是相同的引用才可以 l=[1,2,3] m=[1,2,3] print(l==m) # True print(l is m) # False sys模块 getref ...

  3. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  4. Deep learning with Python 学习笔记(9)

    神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...

  5. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  6. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  7. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  8. python学习笔记1之-python简介及其环境安装

    python学习笔记之-python简介及其环境安装 最近几年python之火不用多说,最近开始利用时间自学python,在学习的过程中,按照自己的思路和理解记录下学习的过程,并分享出来,如果正好你也 ...

  9. Python 学习笔记(下)

    Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...

随机推荐

  1. 题解-[NOI2005]瑰丽华尔兹

    题解-[NOI2005]瑰丽华尔兹 [NOI2005]瑰丽华尔兹 \(n\times m\) 的矩阵.以 \((x,y)\) 为起点.一共 \(k\) 段时间,每段时间为 \([s_i,t_i](t_ ...

  2. Object not found! The requested URL was not found on this server.... 报错解决方案

    服务器(centos6.5) lnmp 报错如下 Object not found! The requested URL was not found on this server. The link ...

  3. oracle DG搭建

    Oracle DG 搭建1. 环境 OS IP hostname db_name DB_UNIQUE_NAME主库 RHEL 5.4 192.168.12.20 edgzrip1.oracle.com ...

  4. js上 十九、综合案例

    十九.综合案例 题目一: 封装一个函数equal(a1,a2),传入两个一维数组,判断两个数组是否包含相同的元素,如果相等,函数的返回值为true, 不相等,函数的返回值为false 1)例:arr1 ...

  5. SpringBoot从入门到精通教程(四)

    前端时间整合SSM ,发现了一个现象,在整合的时候 配置文件过于复杂. 1.建工程,建目录,导入jar包. 2.配置 数据源 映射信息 等等 ... 3. 还有 各种 拦截器,控制器 ,头都大了... ...

  6. C#中烦人的Null值判断竟然这样就被消灭了

    作者:依乐祝 首发自:DotNetCore实战 公众号 https://www.cnblogs.com/yilezhu/p/14177595.html Null值检查应该算是开发中最常见且烦人的工作了 ...

  7. 整合SSM框架

    整合SSM 基本环境搭建 导入相关的pom依赖! <dependencies> <!--Junit--> <dependency> <groupId>j ...

  8. 卷积神经网络CNN-学习1

    卷积神经网络CNN-学习1 十年磨一剑,霜刃未曾试. 简介:卷积神经网络CNN学习. CNN中文视频学习链接:卷积神经网络工作原理视频-中文版 CNN英语原文学习链接:卷积神经网络工作原理视频-英文版 ...

  9. spring的ioc容器生成的对象也是代理对象对吗

    一直以为spring的ioc容器生成的对象都是代理对象,其实这个是错误的.spring ioc默认的都是原生对象  只有通过aop增强的对象才是代理对象 有@Transactional  注解或者配置 ...

  10. OpenGL投影矩阵(Projection Matrix)构造方法

    (翻译,图片也来自原文) 一.概述 绝大部分计算机的显示器是二维的(a 2D surface).在OpenGL中一个3D场景需要被投影到屏幕上成为一个2D图像(image).这称为投影变换(参见这或这 ...