问题描述
我们有 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 年。此外,不要将全部下载链接放入迅雷中进行下载,否则迅雷客户端响应会很慢。
相关链接
相关文章
「VLC」- 使用 ROOT 用户运行
「开源视频管理系统」- 搭建属于自己的视频站点
参考文献
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