「Videos」- 爬取电影天堂全部下载链接

  CREATED BY JENKINSBOT

问题描述

我们有 4T 磁盘,我们不想让它成为闲置资源,何必让他空闲呢,我们想要把它装满,我们应该用什么装满呢?我们可以用视频资源把它填满。所以,我们需要电影网站的爬虫,以到各大电影网站获取下载链接,并完成电影下载(所谓囤货,虽然我们不一定会看;此外,家中宽带也不会闲置)。

但是,我们不想写爬虫(编码),所谓爬虫写得好,桔子进的早。另外,爬虫需要调试,需要针对不同的页面编写不同的提取代码。(当然,如果需要学习使用 Python 爬虫,可以考虑通过这种方法来完成任务)

此外,爬取下载链接并不是最困难的部分,真正困难的地方是电影下载。因为视频资源的有无、视频资源的数量等等因素,都会影响到我们的下载,决定我们的下载是否成功。比如,电影天堂的 FTP ( ftp://d062.dygod.com ) 从来都是无法直接访问,但是迅雷可以下载(可能是迅雷服务器的下载缓存吧)

所以,最后我们决定,仅仅爬取电影的下载链接,而下载任务交由迅雷来处理。(当然,这里面会有一些失效的链接、无法下载的链接,但是这么多资源的链接,谁还在乎有几千个失效的链接呢?)

该笔记将记录:汇总爬取电影天堂电影下载链接的方法,以及相关问题处理。

解决方案

我们能想到的方法大致有以下几种:

方案一、使用 Python 爬虫

这是我们最先想到的方案,也是作为后端开发首先能想到的方法。但是,我们没有使用该方案(正如文章开始着的那样),主要原因就是不想编码,编码还要调试,挺麻烦的。(当然,有人喜欢通过编码的方式来解决这个问题,或者学习 Python 爬虫,可以考虑通过这种方式来解决问题。网上有很多类似的资料,这里我们就不再赘述)

方案二、HTTrack + Grep

我们使用 HTTrack 镜像站点,然后使用 grep 命令过滤出全部下载链接(ftp、magnet)

# 01/10/2021 我们放弃该方案:因为我们并不想学习 httrack 的用法,毕竟镜像站点的需求比较少;并且已经很久没有更新;(总之,针对该问题,我们可以找到各种不使用 httrack 的理由)

方案三、Wget + Grep

我们使用 Wget 镜像站点,然后使用 Grep 过滤出全部下载链接(ftp、magnet)。该方法与 HTTrack + Grep 方案相同,只是改为使用 Wget 这个我们经常使用的工具。(此外,我们还可以得到电影天堂的镜像站点,算是意外收获)

# 01/10/2021 这是我们最终采用的方案,另辟蹊径,简单可操作。当然该方案也有局限性,比如:在爬取的过程中不能动态更换 User Agent 请求头;无法进行数据的解析处理;等等。

方案三、Wget + Grep

第一步、爬取整个站点的全部页面:

#!/bin/sh

round=0
while true
do
	round=$(expr $round + 1)
    echo "$round" > ./round.log
    wget --wait=3 --random-wait \
         -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" \
         --recursive \
         --no-clobber   \
         --page-requisites \
         --span-hosts \
         --convert-links \
         --domains "www.dytt8.net" \
         --no-parent \
         https://www.dytt8.net
done

# ./round.log:由于 wget 失败会退出,因此这里记录重试次数
# --no-clobber:如果文件已经下载,则不会再进行下载
# --wait=5 --random-wait:随机等待 3*0.5 ~ 3* 1.5 秒(在每次请求间)

第二步、提取所有页面的下载链接:

find ./ -type f -name '*.html' -print0 \
    | xargs -0 -i sh -c "iconv -c -f gb2312 -t UTF-8//IGNORE '{}'" \
    | grep -E 'magnet:[^"<]+|ftp://[^"<]+|thunder://[^"<]+' --only-matching \
    > links.txt
cat links.txt | sort | uniq > links-uniq.txt
grep -E '.mp4$' links-uniq.txt > links-uniq-mp4.txt # 我们只需要 mp4 电影

第三步、我们去睡觉,剩下的事情就交给 Wget、Grep、迅雷来做来做。

# 02/14/2021 到目前为止,我们爬取到 39875 links.sort.uniq.txt 个链接,但是我们不确定这是否之整个全部链接。假如一部影片时长一小时,即使我们不眠不休的看,也要看 4.5 年。此外,不要将全部下载链接放入迅雷中进行下载,否则迅雷客户端响应会很慢。

相关链接

https://www.dytt8.net

参考文献

Download an entire website with wget, along with assets.
https://gist.github.com/mikecrittenden/fe02c59fed1aeebd0a9697cf7e9f5c0c%20
cmd – how to resume wget mirroring website? – Stack Overflow