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 学习笔记(下) 函数设计与使用 形参与实参 ...
随机推荐
- angular8
@Component 装饰器告诉Angular , AppComponent 类是一个组件,装饰器的属性用于配置该组件的应用方式. selectot 属性告诉Angular如何在HTML文档中应用该组 ...
- mybatis-plus逻辑删除
MP(mybatis plus)已经大大简化了我们好多的开发操作,基本的增删改查都有了,包括代码生成等等,今天想说的是它的逻辑删除功能.我们都在数据库设计时候经常会有is字段,表示是否删除,为了留下员 ...
- 手把手教你使用Python轻松搞定发邮件
前言 现在生活节奏加快,人们之间交流方式也有了天差地别,为了更加便捷的交流沟通,电子邮件产生了,众所周知,电子邮件其实就是客户端和服务器端发送接受数据一样,他有一个发信和一个收信的功能,电子邮件的通信 ...
- 使用NPOI读取Excel表格内容并进行修改
前言 网上使用NPOI读取Excel文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/restran/p/38894 ...
- VS中使用RDLC提示类型不一致
问题描述 错误"基类包括字段"XXXXXXX",但其类型(Microsoft.Reporting.WebForms.ReportViewer)与控件(Microsoft. ...
- 让vs2013自带的IISExpress支持apk文件下载
使用vs2013作为android的服务器端开发时,总是会碰到需要自动更新的功能,VS2013自带IIS Express,想要下载apk文件,就需要添加MIME映射.没有图形界面,只能命令行.进入C: ...
- [leetcode]380. Insert Delete GetRandom O(1)设计数据结构,实现存,删,随机取的时间复杂度为O(1)
题目: Design a data structure that supports all following operations in average O(1) time.1.insert(val ...
- java: Compilation failed: internal java compiler error
IDEA 编译项目出现java: Compilation failed: internal java compiler error 原因: 项目Java版本不一致 解决办法: 点击FIle> ...
- 如何定位CPU瓶颈?
CPU是通常大家最先关注的性能指标,宏观维度有核的CPU使用率,微观有函数的CPU cycle数,根据性能的模型,性能规格与CPU使用率是互相关联的,规格越高,CPU使用率越高,但是处理器的性能往往又 ...
- linux零基础之--常用命令
linux: 用户命令 linux 目录切换命令 linux文件命令 linux : vi编辑器 linux:打包压缩