一步一步搭建視頻聚合網站
前言
作為一個爐石傳說玩家,經常有事沒事開著直播網站看看大神們的精彩表演。不過因為各個平台互相挖人的關係,導致關注的一些主播分散到了各個直播平台,來回切換有點麻煩,所以萌生了做一個視頻聚合站的想法。
我主要去採集鬥魚、熊貓等的爐石區的主播信息。雖然各個站點的人氣信息有水分,但還是做了個簡單的排名。
上圖:
手機上的效果圖:
話不多說,上網站: http://lushiba.leanapp.cn/
項目部輸在了 leancloud 上,比較省心,但有一定的免費額度(如果顯示超出限制,需要晚一些來訪問,畢竟免費的,每天 6 個小時限制)
源碼地址: https://github.com/ieiayaobb/... 歡迎 Star
master 分支是 redis 方式存儲實現
lean 分支是基於 lean cloud 的實現
基礎介紹
聚合站的思路就是採集目標站點的相關信息,通過數據處理將想要的信息做提取,整理入庫,然後通過 web 展示。因為直播平台數據實時在變,所以考慮將存儲的數據放在緩存中(redis),因為部署在了 lean cloud 上,所以示例就直接存儲在了 lean cloud 的存儲上。
為了方便講解,我們以鬥魚為目標採集的網站,介紹解析和存儲部分的內容,其他網站的處理大同小異。
功能說明
整體項目就分為數據採集解析、數據存儲、web 展現三大功能。後續我們會對這三個部分的功能做逐一展開說明。
技術選型
### 語言(Python)
輕量級的項目,直接就是用了 Python 來做,Python 在爬蟲、web 方面都有著不錯的庫支持,而且 lean cloud 也支持 Python 部署,所以毫不猶豫的就採用了 Python 來做
### 數據採集(requests)
requests 的特點就是輕量,且簡單易用。雖然這是個爬蟲項目,但實在規模太小,所以沒必要上 scrapy 了
requests 的介紹地址:http://docs.python-requests.o...
請求模擬
數據解析
解析部分主要有兩種:正則,BeautifulSoup
這裡為了通用,直接使用了正則來解析。
正則處理要求比較高,但是幾乎能應對所有的情況,屬於大殺器。
BeautifulSoup4 的詳細介紹: https://www.crummy.com/softwa...
### web 框架(Django)
Django 是 Python 比較重量級的框架,Django 自帶了 orm 的框架,可惜這個項目中用不到。但是我們會使用 Django 的模板引擎,Django 的模板引擎也是很方便的一個特性。Django 還提供了 django-rest-framework,方便開發 RESTful 的介面,這個項目後續做了個配搭的 React Native 的 mobile 應用,所以引入了 django-rest-framework。
詳細介紹在此:https://www.djangoproject.com/
### 存儲(lean cloud 的數據存儲)
既然用了 lean cloud,存儲就直接用了 lean 提供的存儲功能。
詳細的介紹在這裡: https://leancloud.cn/docs/lea...
### 部署(用了 lean cloud 的引擎)
參考了 lean cloud 官方的項目骨架: https://github.com/leancloud/...
### 前端展示(pureCSS)
pureCss 還是為了簡單,支持響應式,並且提供了基礎的 UI 組件
詳細介紹在這裡: https://purecss.io/
環境準備
Python 的開發環境網上比較多,主要是 virtualenv 的準備,可以看廖老師的博客了解具體信息:
https://www.liaoxuefeng.com/w...
requirments.txt 內容如下:
分析與採集視頻站內容解析
鬥魚爐石區
目標是採集爐石區所有主播的鏈接地址和人氣情況
頁面內容(單個主播的信息)
我們需要採集的有幾部分內容:
直播間 url (節點裡的 href,/yechui)
直播間的標題(節點裡的 title,衣錦夜行:狂野 登頂登頂)
直播間的截圖(節點裡的 img 標籤的 src,https://rpic.douyucdn.cn/a170...)
直播間的人氣(8.1 萬)(這裡有個注意的地方,鬥魚的人氣可能是 X 萬,需要把這個萬轉化成數值方便排序)
主播名稱(衣錦夜行)
頁面處理與採集
所有完整的直播站處理代碼在 fetch.py 中
命中主播信息節點
簡單的說明一下代碼:
主要是講 requests 請求的頁面以 utf8 編碼返回
正則部分就是命中上述的主播節點的內容,截取整個 a 標籤
解析代碼
採集 href 信息(主播房間鏈接)
採集標題信息
採集截圖信息
採集主播名稱
採集人氣數量信息
處理 萬 字
存儲與刷新
採集到的信息需要存儲到 lean cloud 的存儲中,會調用 lean cloud 所提供的 API
欄位設計
Chairman
id
直播間的唯一 id
name
直播間主播名稱
title
直播間的標題
href
直播間的頁面地址
num
直播間的人氣
img
直播間的截圖
介面設計/fetch
Fetch 的介面包含了清空、採集、解析、存儲所有的更新邏輯,設計這個介面的目的主要是方便後面使用雲函數進行定時調用,以更新數據,調用邏輯如下(lean cloud 不支持全部遍歷,所以用了 while 循環來遍歷所有,先清空,再採集):
/chairmans(redis 版本才支持)
Django-rest-framework 提供,可以通過分頁的方式展現當前庫中的信息
/chairman/(redis 版本才支持)
Django-rest-framework 提供,可以根據指定 id 獲取某一個主播的信息
刷新機制
lean cloud 提供了一種雲函數的概念,並且可以像配置 cron 一樣,定期的去觸發某一個請求,為了能夠定期的更新排行榜,我們會通過配置這個雲函數,實現定期的數據刷新
雲函數是一個 cloud.py 文件,內容如下
在 lean cloud 中配置定時執行
頁面展示
頁面部分比較簡單,以一個列表的形式,展現了主播的排行榜信息,點擊某一個主播,直接跳轉到對應直播網站的目標直播間。因為考慮到在手機上的顯示,所以做了自適應
列表頁
列表頁的渲染使用了 Django 的模板引擎
由於 lean cloud 的存儲和 Django 的 orm 不一樣,所以這裡需要將 attributes 放到列表中,頁面上才能用模板語法進行訪問
view 部分代碼:
頁面部分代碼:
項目部署
因為部署在了 lean cloud 上,可以直接使用提供的 lean-cli 進行部署,
lean-cli 的詳細介紹在這裡:
https://www.leancloud.cn/docs...部署
這裡為了方便直接在頁面上進行配置
配置 git 庫
配置 Deploy Key
設置域名
部署
配置定時任務
後言
整個項目比較簡單,目的是為了練手。如有疑問,歡迎在 github 上面發 issue。
題圖:pexels,CC0 授權。
點擊展開全文
※深入理解子進程
※深入理解子進程:Python 相關源碼解析
※改善程序員生活質量的 3 10 習慣
※一些學習 Python 編程的電子書資源
※Python 在騰訊雲的實踐
TAG:編程派 |
※視頻 | 兩步治好網球肘
※三大視頻網站給宿華和張一鳴上了一課
※抖音四格視頻怎麼合拍 合拍教程一覽
※TVB北上聯合視頻網站,合拍劇路線圖分析
※與街舞品牌KOD合作,網易雲音樂短視頻布局再落重要一子
※泰捷視頻、電視貓整改不再怕,這兩款聚合類軟體屹立不倒!
※定製商業視頻 為品牌提供一站式的視頻製作與傳播整合方案
※亮眼雲發布混合架構音視頻SDK:支持所有平台,音視頻唇音同步等
※三大視頻網站扎堆「斗舞」,重金投入能否複製嘻哈熱度
※合作大於競爭,視頻網站和電視台的「合縱連橫」
※視頻網站第二梯隊抱團「禦敵」
※不求人,各大視頻網站視頻下載攻略
※這個視頻網站出事了!共青團中央、上海合作組織等紛紛微博發聲
※一周機構關注熱點:獨角獸回歸加速,愛奇藝B站帶火在線視頻
※一段模仿張嘉譯走路姿勢的視頻火爆網路
※再談視頻網站的偽兒童動漫不良視頻
※視頻網站的暑期檔
※A站掛了,芒果TV、搜狐視頻等二三線視頻網站該如何破局求生?
※視頻網站突圍戰
※PP視頻《無間密室》席捲網路 燒腦劇情引起新一輪推理熱潮