當前位置:
首頁 > 知識 > 一步一步搭建視頻聚合網站

一步一步搭建視頻聚合網站

前言

作為一個爐石傳說玩家,經常有事沒事開著直播網站看看大神們的精彩表演。不過因為各個平台互相挖人的關係,導致關注的一些主播分散到了各個直播平台,來回切換有點麻煩,所以萌生了做一個視頻聚合站的想法。

我主要去採集鬥魚、熊貓等的爐石區的主播信息。雖然各個站點的人氣信息有水分,但還是做了個簡單的排名。

上圖:

手機上的效果圖:

話不多說,上網站: 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視頻《無間密室》席捲網路 燒腦劇情引起新一輪推理熱潮