目录
前言
北京时间23日凌晨1点,苹果WWDC2020大会开幕。在发布会上,苹果正式发布了新版macOS,并将其命名为“Big Sur”。
相比于外界争议最大的UI界面,令我更为关注的是这次的系统动态壁纸,跟过去几年的版本更新一样,这次的macOS系统版本命名也取自自然景点的名字,即“Big Sur”,好像是在加州西海岸的一个景点,而且这一版动态壁纸依然支持根据时间变化进行明暗的切换,总之很好看就对了,超想要的!于是我开始在网上寻找最新的这一版本动态壁纸,幸运地,最后让我找到了这个神奇的网站:
需要注意的是,这个网站需要科*上网才能打开,并且需要登录才能查看网页包含的动态壁纸
登录进去之后,在首页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动态壁纸文件
设置壁纸的方法如下:
打开终端,输入「open /Library」,进入放置壁纸的文件夹:/Desktop Pictures
将heic壁纸文件拖动到/Desktop Pictures文件夹下
桌面右键,设置桌面背景,即可设置下载的壁纸,效果如下:
awesome!
后记
后面可以加个按照壁纸分类来下载的功能,还有图形界面
不说了,做作业去了