天天看點

Python 實作視訊下載下傳

最近一兩年短視訊業務風生水起,各個視訊網站都有各自特色的短視訊内容。如果有這樣一個程式,可以把各大視訊網站的熱門使用者最新釋出的視訊都下載下傳下來,不僅友善自己觀看,還可以将沒有版權的視訊釋出在個人社交網站上,增加自己的人氣,豈不美哉?

parker就是這樣一個項目(項目位址:https://github.com/LiuRoy/parker),它采用celery架構定時爬取使用者視訊清單,将最新釋出的視訊通過you-get異步下載下傳,可以很友善地實作分布式部署。因為各個網站的頁面布局和接口更新比較頻繁,為了保證程式的高可用,特意增加了Statsd監控,友善及時發現出錯。

代碼架構

Python 實作視訊下載下傳

目前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)

參數配置

config路徑下的logging.yaml、params.yaml、sites.yaml分别對應日志配置、運作參數配置、熱門使用者配置。

日志配置

debug模式下日志會直接輸出在标準輸出流,release模式下會将日志内容輸出到檔案中,是以需要配置輸出日志檔案。

運作配置

  • mode debug調試模式,此模式下日志指向标準輸出,并且沒有監控資料;release模式下,日志輸出到制定檔案,并且有監控資料。
  • broker_url 對應于celery的BROKER_URL,可以配置為redis或者rabbitmq
  • mysql_url 資料庫位址,需要提前建好兩張表
  • download_path 視訊下載下傳路徑
  • statsd_address 監控位址
  • video_number_per_page 每次從使用者視訊首頁解析出多少條視訊播放位址,因為大部分使用者每次釋出的視訊個數很少,隻需要設定成一個很小的值即可。在初次運作的時候,也不會下載下傳大量久遠的視訊。
  • download_timeout 視訊下載下傳的逾時時間

熱門使用者配置

parker會根據此配置生成一份celery beat scheduler清單。

  • name 規則是-,parker會根據此作為scheduler任務名稱
  • url 使用者的釋出視訊首頁
  • task 對應的celery解析異步任務
  • minute 多少分鐘檢查一次使用者視訊清單

啟動任務

進入項目目錄,執行下面指令啟動celery worker

celery -A spider worker

監控