從0開始搭建家庭影院系統(tǒng)

緣起:家里有兩臺PC,1臺MAC,1臺MINI,一臺筆記本,2手機。下載大量學(xué)習(xí)資料,都在一臺機器上,不方便學(xué)習(xí)。故準備搭建基于內(nèi)網(wǎng)的影院系統(tǒng),方便各種終端自由瀏覽學(xué)習(xí)資料。
需求:要有上次訪問記錄。支持模糊查詢。資源統(tǒng)計。全格式播放。支持外掛字幕。

2022-10-26更新:從0開始
準備搭建硬盤陣列。工欲善其事,必先利其器。準備了一個硬盤柜和機械硬盤,共計26T。陣列模式選擇:RAID5。該模式會將我的幾塊硬盤合并為一個完整的具有容災(zāi)功能的硬盤。哪怕將來有哪塊硬盤損壞,直接關(guān)閉電源替換硬盤就可以。
2022-11-02更新:陣列搭建完成。
比想象的配置簡單,因為不喜歡圖形化界面的配置,就選擇很粗暴的機械配置,就是硬盤柜后面的按鈕組合,組合成RAID5的陣列模式。經(jīng)過長期的文件傳輸,美劇及電影已經(jīng)就位。接下來是基礎(chǔ)技術(shù)選型和技術(shù)架構(gòu)。我最開始的設(shè)想是,因為本人是純java程序猿,所以第一反應(yīng)永遠是希望用java去解決問題。
技術(shù)架構(gòu)原始設(shè)想:

1,底層識別硬盤文件夾及視頻,獲取縮略信息
2,nginx做反向代理,將服務(wù)映射到整個家庭網(wǎng)絡(luò)。
3,thymeleaf做框架頁面模板,將視頻及全部的目錄結(jié)構(gòu)展現(xiàn)成網(wǎng)頁,以實現(xiàn)成一個完整的家庭影院系統(tǒng)。
4,最后用java寫的爬蟲,去根據(jù)我目錄里的電影名稱,去獲取豆瓣的電影簡介/演員/年份/評分/封面海報,最終展現(xiàn)在網(wǎng)頁上。

家庭影院系統(tǒng),實現(xiàn)的功能點有:
  • 電影要想各大院線app一樣,通過點擊封面的形式播放,而不是一個文字列表
  • 要現(xiàn)實我上次的播放記錄,以免看完電視劇,下次不記得看到哪集
  • 將我最近下載的電影單獨列出來,比如有一個選項,最近更新(一兩周之內(nèi)的),最近播放。
  • 可以不做實時同步,設(shè)計一個按鍵,點擊,則更新最新下載電影的海報等豆瓣信息

實際問題:java并不能很好的解析現(xiàn)在網(wǎng)頁。大概就是因為VUE等這種技術(shù)的出現(xiàn),傳統(tǒng)java的爬蟲主要是獲取全部的網(wǎng)頁字符流,根據(jù)字符匹配。但是現(xiàn)在的網(wǎng)頁與瀏覽器的行為交互較多,會導(dǎo)致獲取的字符流并不是最終網(wǎng)頁呈現(xiàn)的樣子。而java模擬瀏覽器行為再去爬,可就費勁了。干脆,拋棄原有模式。核心思想一句話,讓它去干它擅長的事情。
爬蟲部分,改為Python。前端部分改為VUE。后端待定。
Python需要具備以下幾個功能,并且逐一開發(fā),嘗試。(現(xiàn)學(xué)現(xiàn)賣,面向搜索引擎編程)

  • 可以獲取目錄結(jié)構(gòu),并且獲取到最近兩周內(nèi)更新的電影。
  • 爬取豆瓣的影評,評分,封面,根據(jù)本地電影名匹配
  • 將封面存儲于電影文件夾下的單獨目錄中,統(tǒng)一命名。
  • 將其他信息存儲于txt文件中,方便前端讀取

實現(xiàn)根據(jù)電影名搜索信息,功能拆分兩部分,第一部分通過搜索,定位硬盤列表,并根據(jù)title匹配同名電影,給出鏈接。第二部分根據(jù)鏈接獲取詳細的信息。
根據(jù)搜索定位詳情頁面
卡住了,豆瓣的網(wǎng)頁里,div的class每次刷新都會變,干不會了
獲取詳細信息:

from lxml import etree 
url='https://movie.douban.com/subject/26363254/' 
headers={ 
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36' 
}
 #請求結(jié)果的數(shù)據(jù)
resp=requests.get(url=url,headers=headers)
#轉(zhuǎn)換為HTML格式
data=etree.HTML(resp.text) 
#定義電影數(shù)據(jù)對象
MovieList={}
#定義一個大盒子,裝電影的詳細數(shù)據(jù)
MoveInfoList=data.xpath('//div[@class="subjectwrap clearfix"]')
for infos in MoveInfoList:
#獲取海報鏈接
    #獲取海報鏈接
    poster=infos.xpath('div[@class="subject clearfix"]/div[@id="mainpic"]/a/img/@src')[0]
    #獲取電影名
    name=infos.xpath('div[@class="subject clearfix"]/div[@id="mainpic"]/a/img/@alt')[0]
    #獲取電影類型
    movieType=infos.xpath('div[@class="subject clearfix"]/div[@id="info"]/span[@property="v:genre"]/text()')
    #獲取電影評分
    score=infos.xpath('div[@id="interest_sectl"]/div[@class="rating_wrap clearbox"]/div[@class="rating_self clearfix"]/strong/text()')[0]
    #將數(shù)據(jù)放入字典
    MovieList['poster']=poster
    MovieList['name']=name
    MovieList['movieType']=movieType
    MovieList['score']=score
print(MovieList)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容