問題描述
我們有 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