知识点:
- 操作:设定名称(Set Name)
- 操作:从输入中获取 URL(Get URLs from Input)
- 操作:存储文件(Save File)
- 捷径知识点:获取给定链接的 HTML 文件的操作组合
- 正则表达式知识点:匹配任意字符 0 次或多次
在了解了扒网页的原理,了解了从什么地方扒,以及如何扒什么之后。剩下的问题就是工具层面了,也就是我们如何用捷径来扒网页。这个问题就非常简单了,我们先回顾一下需求,以及我们知道的规律。
我们的需求:
- 扒高清配图
- 为配图配上合适的标题
- 存到文件应用里
我们已经知道的规律:微博配图的原图链接都带有 sinaimg.cn/large/
这个部分。
根据这些,再加上之前我们学过的捷径知识,就足以完成这个自动化的操作。
第一步:获取 HTML 文件
在捷径里想要获取一个链接的 HTML 文件,需要用到的操作组合是「获取 URL 内容」+「用多信息文本制作 HTML」:
另外大家可以注意到,图里我们除了「获取 URL 内容」+「用多信息文本制作 HTML」之外,还用到了「获取剪贴板」以及「从输入中获取 URL」这两个操作。
这是因为微博官方客户端不能使用共享表单,所以我们只能复制链接再运行捷径,这就需要「获取剪贴板」这个操作。而如果你使用第三方客户端,那有的第三方客户端在复制微博链接、或者是运行共享表单时,会带有微博原文。所以为了保险起见,我们在这里加入了「从输入中获取 URL」这个操作,它可以过滤掉不属于 URL 的内容,只把我们需要的微博链接给传输出来。
第二步:获取微博配图链接
获取微博配图链接我们只需要一步——「匹配文本」。在这一步,我们就要获取原微博的 HTML 文件中所有带有 sinaimg.cn/large/
这个部分的链接,因为它们都是我们想要的微博配图原图。
之前我们已经见过完整的微博配图链接,比如这样:http://wx1.sinaimg.cn/large/6682c0e7gy1flcswo7pr1j20cn0hxgnc.jpg
。我们可以看出,在 sinaimg.cn/large/
之前有一部分字符,在 sinaimg.cn/large/
之后还有一部分字符。
所以最简单的匹配,我们可以理解为,我们要匹配的文本,就是 随便什么sinaimg.cn/large/随便什么
,只要它们在同一行就行1 。而捷径在匹配文本的时候就是按行(或者更准确地说,按段)匹配的,正好可以应对这种情况。
那也就是说,我们只要获取 HTML 文件(在第一步已经搞定),就可以开始匹配:
根据我们最简单的匹配思路 随便什么sinaimg.cn/large/随便什么
,这里的 随便什么
在正则表达式里对应的符号组合是 .*
。其中 .
是任意一个字符,而 *
是匹配 0 次或多次。两者结合,.*
的意思就是,匹配任意字符 0 次或多次。这样不管 sinaimg.cn/large/
的前面后面有没有东西,不管 sinaimg.cn/large/
的前面后面有多少字符,都可以匹配得出来。
虽然这个方法最便于理解,但是它还是会匹配到一些不属于链接的内容。如果我们直接这样去匹配的话,会发现匹配到的是这样的东西:"url": "http://wx1.sinaimg.cn/large/6682c0e7gy1flcswo7pr1j20cn0hxgnc.jpg",
。而我们只想要其中属于链接的那部分,也就是 http://wx1.sinaimg.cn/large/6682c0e7gy1flcswo7pr1j20cn0hxgnc.jpg
,该怎么办?
不要忘了我们第一步里介绍过的「从输入中获取 URL」。它可以帮我们把不属于链接的部分去除,只留下我们想要的链接部分。
所以我们要在「替换文本」下面接上「从输入中获取 URL」了吗?还不到时候。因为我们实际上要做的是批量获取微博配图,这时候「替换文本」这一步下面获取到的很有可能不只是一个链接而是多个链接,这时候我们就需要使用「重复」相关的操作来批量处理这些链接。
第三步:批量处理配图
我们接下来要在捷径中,针对上一步多个对象,进行同样的处理。而这种情况下我们要使用的重复操作就是「每个项目重复」:
而其中第一个的操作,就是从「输入中获取 URL」。这一步的意思是,对于上一步传入的匹配过的文本,我们把里面的(配图)链接给取出来。
接下来的第二个操作,我们用「获取 URL 内容」把链接中的图片下载下来。
再下载完图片后,第三个操作,我们要为图片加上标题。加标题要使用的操作是「设定名称」,当我们上一步传进来的是一个文件,下一步是要保存的位置时,我们就可以在中间加一个「设定名称」来为这个文件命名。
在这里,要多说一下图片名称的这个逻辑。我们想要自动化,也就是要尽量减少手动的步骤,所以我们不会为每张图片单独命名,而在这里我采用的方法是一次命名,随后为图片加上编号。比如:
- 「猫的品种与价格–1」
- 「猫的品种与价格–2」
- 「猫的品种与价格–3」
- ……
其实最开始我连手动命名这一步都想省去,打算直接把微博原文当作图片标题的主干部分。但是后来发现有的博主文案太长,不适合当标题,所以才退而求其次手动输一下标题。
看「设定名称」这一步的细节,我们会发现里面有「要求输入」和「重复索引」这两个魔法变量:
「重复索引」我们之前在《重复相关的操作》介绍过,它代表了重复运行的次数。一个「重复」操作,运行 1 次,它的「重复索引」就是 1,运行 2 次,它的「重复索引」就是 2,依此类推。
那么另一个魔法变量「要求输入」是从哪来的?
其实它来自「要求输入」这个操作,因为我们要手动输入一次配图的标题。那么「要求输入」这个操作我们放在了哪呢?答案是开头。
放在开头的原因有三个:第一是我们这个捷径整体操作和连贯,「要求输入」这个操作不能放在任意两个操作之间,否则就会改变操作之间传输的内容,捷径就会失效。第二是它也不能放到「重复」的过程里,因为如果把「要求输入」放进「重复」,那么每重复一次我们就得输入一次标题。第三是「要求输入」必须出现在「设定名称」这一步之前,否则「设定名称」就无法调用「要求输入」的结果。
结合这 3 个原因,我们只能把它放在开头。也就是说这个捷径一运行,我们就要输入标题,然后就不用管它让它跑就可以了。
最后,我们要把设好标题的配图存到文件应用中,这时候我们要用到的操作是「储存文件」。这一步的重点是让我们不用手动选择储存位置,不然的话 9 张图那种微博我们就要点 9 次。要做到这一点我们需要关闭「询问储存位置」的开关:
而如果我们在这一步选择了「iCloud 云盘」,那么在「目的路径」中我们就要填写 /Shortcuts
这个路径,或者在它之下的一个已有的文件夹,比如我写的是 /Shortcuts/Download
。这个文件夹可以结合 Hazel2 与我的 iMac 进行自动化联动,帮我做到自动整理文件夹内的内容。
小结
至此,我们就掌握了扒网页的思路以及使用捷径来做这件事的方法。
虽然这两篇文章是以「获取微博配图」作为示例,但我要提醒各位不要只把视野局限在扒微博图片这一点上。事实上扒微博图片的方法不止这一种,这篇文章里提供的方法也适用于扒各种网站和各种格式的内容。希望大家多多尝试扒各种网页的内容3 。
最终效果展示:
存档多张微博配图
捷径下载:保存微博图片
- 1因为如果不在同一行的话,这个思路就会匹配到整个 HTML 文件里的所有内容了。
- 2一款 macOS 上的自动化工具,@Minja 在去年的 Power+ 曾写过使用详解:https://sspai.com/article/43317?series_id=9
- 3Tumblr 我当初就是用扒网页的方法实现的下载 Tumblr 视频。