最近一兩年短片業務風生水起,各個影片網站都有各自特色的短影片內容。如果有一個程式可以把各大影片網站的熱門用戶最新發布的影片下載下來,不僅方便了觀看,還可以將沒有版權的影片發佈在個人社群網站上,增加自己的人氣,多好呀
最近一兩年短片業務風生水起,各個影片網站都有各自特色的短影片內容。如果有這樣一個程序,可以把各大視頻網站的熱門用戶最新發布的視頻都下載下來,不僅方便自己觀看,還可以將沒有版權的視頻發佈在個人社交網站上,增加自己的人氣,豈不美哉?
parker就是這樣一個項目(項目地址:https://github.com/LiuRoy/parker),它採用celery框架定時爬取用戶視頻列表,將最新發布的視頻透過you-get非同步下載,可以很方便地實現分散式部署。因為各個網站的頁面佈局和介面更新比較頻繁,為了保證程式的高可用,特意增加了Statsd監控,方便及時發現出錯。
程式碼架構
#目前parker中只實現了B站和秒拍的下載,從框架圖可以看出,針對每一類網站,需要實現兩個異步接口:從用戶視頻主頁解析發布視頻的播放地址、根據播放地址下載視頻。因此增加網站類型,不需要修改原來的程式碼,只需要新增新的解析和下載介面即可。針對影片下載完成之後的後續操作,我還沒有實現,大家可以根據自己的需求自由的去實現。
在運作的時候,celery會將配置好的優質使用者清單定時傳送到對應網站的解析介面非同步執行,篩選出最新發佈的影片播放位址,交給對應的下載介面非同步下載,下載完成之後再異步呼叫後續操作。因此需要啟動一個celery beat進程發送定時任務,以及若干celery異步任務去執行解析和下載操作,對於比較大的視頻,下載會相當耗時,建議根據任務列表的多少合理分配異步任務的個數。
程式運行
經驗證,此程式可以在ubuntu和mac下正常運行, 由於本地windows下的celery無法正常啟動,所以沒有在windows環境做過驗證。
依賴函式庫安裝
#python版本為3.5,進入專案目錄後,執行:
pip install -r requirements.txt
#建立資料庫表格
提前在資料庫中建置好兩張表(sql: https://github.com/LiuRoy/parker/blob/master/spider/models/tables.sql)
參數配置
#mode debug
偵錯模式###,此模式下日誌指向標準輸出,並且沒有監控資料;release模式下,日誌輸出到製定文件,並且有監控資料。 ############broker_url 對應celery的BROKER_URL,可以設定為###redis###或rabbitmq###############mysql#######################mysql### _url 資料庫位址,需事先建置兩張表格############download_path 影片下載路徑############statsd_address 監控位址###video_number_per_page 每次從使用者影片首頁解析出多少個影片播放位址,因為大部分使用者每次發布的影片數量很少,只需要設定成一個很小的值。在初次運行的時候,也不會下載大量久遠的影片。
download_timeout 影片下載的超時時間
#熱門使用者設定
# #parker會根據此配置產生一份celery beat scheduler清單。
name 規則是-,parker會根據此作為scheduler任務名稱
url 用戶的發布影片首頁
task 對應的celery解析非同步任務
minute 多少分鐘檢查一次使用者影片清單
#啟動任務
celery -A spider worker
celery -A spider beat
以上是使用Python實作影片下載功能實例碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!