0%

使用正则提取网页中的下载链接

今天朋友拜托我帮忙找一下 “欢乐合唱团” 的全系列的链接,因为是下载到手机中看,就需要有中字。
先 google 看看,发现网络上并没有现成的整合好全季的资源,后来又找到了一些分季的资源,可质量以及分辨率的不容乐观。
后来偶然在某站找到了全季的资源,但又产生了其他问题,资源都是以链接的方式显示,并且只能一个一个复制,这样就很难受了,于是决定自己动手把链接提取出来


1、下载网页源代码

wget 或者浏览器直接 Ctrl + s 都可以

2、 分析下载链接结构

通常来说,一个包含下载链接的 HTML 标签应该是这个样子

1
<a class="link" href="ed2k://|file|%E6%AC%A2%E4%B9%90%E5%90%88%E5%94%B1%E5%9B%A2.Glee.S06E13.End.%E4%B8%AD%E8%8B%B1%E5%AD%97%E5%B9%95.WEB-HR.AAC.1024X576.x264.mp4|111111111|a1b1b2b435hjkkj34gk|xxxxxxxxxxxxxxxxxxxxx|/" way="1">'

这里我们使用 Linux 的 grep 命令再配合正则表达式可以提取出

文件源包含了多种链接,迅雷链接百度盘链接等,以及不同分辨率的 ed2k 链接

  1. 链接必须是 ed2k 开头
  2. 链接以 |/" 结尾
  3. 链接中包含了分辨率,如 1024 720
  4. 链接中包含了格式,如 mkv rmvb

由此可得正则表达式

1
ed2k.*HDTV.*720.*mkv.*\|\/

配合 grep 命令就是这样使用

1
grep -Eo 'ed2k.*HDTV.*720.*mkv.*\|\/"' file

即可

后续

本来上面的操作是完全没有问题的,但是后来我在使用中发现了一个问题,我下载下来的 HTML 文件只有一排!!!
为了压缩存储空间的原因,某些网站就会压缩 html 文件以节约空间以及传输流量,由于我们的正则表达式是贪婪匹配的缘故,所以将第一个 ed2k 链接到最后一个 ed2k 链接以及中间的内容都匹配出来了!!!这个样子是肯定不行的。我们需要一个工具将这个 html 文件重新格式化

通过万能的互联网,查询到了名为 tidy 的工具,此工具可以格式化 HTML/XML 文件,具体下载方法就不赘述了,使用

1
tidy -im file

即可完成格式化操作 :)