張笑青 蔣慧
摘要:該文基于Scrapy爬蟲技術(shù)采集慕課網(wǎng)站(大型開放式網(wǎng)絡(luò)課程)的視頻資源,并使用協(xié)同推薦算法對(duì)采集的信息進(jìn)行推薦和展示。主要內(nèi)容包括對(duì)大學(xué)開放課程平臺(tái)進(jìn)行視頻爬蟲、數(shù)據(jù)解析、數(shù)據(jù)存儲(chǔ);將數(shù)據(jù)爬取的結(jié)果與Recommend算法相結(jié)合實(shí)現(xiàn)課程信息推薦功能;通過(guò)使用Flask框架對(duì)采集和推薦的結(jié)果進(jìn)行展示,并實(shí)現(xiàn)視頻分類與模糊查詢等功能。該視頻庫(kù)系統(tǒng)可以給教師與學(xué)生提供更豐富便捷的教學(xué)資源平臺(tái)。
關(guān)鍵詞:Python爬蟲;Scrapy框架;視頻庫(kù);高校計(jì)算機(jī)課程
中圖分類號(hào):TP393? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)36-0037-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 背景
基于慕課平臺(tái)的高校計(jì)算機(jī)類課程網(wǎng)絡(luò)教學(xué)是推動(dòng)高校計(jì)算機(jī)類課程教育改革、促進(jìn)高校計(jì)算機(jī)課程教育網(wǎng)絡(luò)化、科學(xué)化的有效途徑。視頻課程突破了傳統(tǒng)教學(xué)活動(dòng)的時(shí)間和空間限制,使課堂上枯燥的教學(xué)內(nèi)容變得更加生動(dòng),同時(shí)實(shí)現(xiàn)了教學(xué)雙方的全面交流與互動(dòng)。隨著慕課模式在高等教育中的普及,視頻課程庫(kù)的開發(fā)逐漸成為高等教育領(lǐng)域的重要課題之一。為了確保高校教育的質(zhì)量和效果,本文對(duì)高校慕課平臺(tái)下計(jì)算機(jī)類視頻課程庫(kù)建設(shè)過(guò)程中的相關(guān)問題進(jìn)行了研究,討論了構(gòu)建視頻課程庫(kù)系統(tǒng)的方法,有助于確定與設(shè)計(jì)有效且穩(wěn)健的視頻課程模型相關(guān)的問題,期望能為高校計(jì)算機(jī)類視頻課程的科學(xué)建設(shè)提供一些參考。
本文的各部分組織如下:首先,介紹網(wǎng)絡(luò)爬蟲Scrapy框架,它包含了Scrapy引擎(核心)、Downloader Middlewares下載器、Schedular調(diào)制器、管道Spiders解析器,并介紹其相關(guān)功能。其次,介紹視頻信息的采集和存儲(chǔ),根據(jù)慕課平臺(tái)的內(nèi)容和它的網(wǎng)頁(yè)源代碼分析其頁(yè)面結(jié)構(gòu),從而實(shí)現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)的采集;同時(shí),采用協(xié)同過(guò)濾算法(Recommend)得出權(quán)重矩陣并返回?cái)?shù)據(jù)庫(kù)進(jìn)行永久保存。最后,介紹對(duì)采集的視頻信息數(shù)據(jù)進(jìn)行描述性的界面展示,并對(duì)采集的數(shù)據(jù)進(jìn)行二次開發(fā),使用Flask技術(shù)實(shí)現(xiàn)視頻數(shù)據(jù)的分類和模糊搜索。
2 網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲可以根據(jù)既定的算法和邏輯自動(dòng)采集所需要的頁(yè)面資源數(shù)據(jù),并能更新網(wǎng)頁(yè)數(shù)據(jù)[1]。通常網(wǎng)絡(luò)爬蟲可以分為數(shù)據(jù)爬取、數(shù)據(jù)預(yù)處理、數(shù)據(jù)存儲(chǔ)幾部分操作。其中,聚焦爬蟲能根據(jù)既定的定量爬取策略,通過(guò)網(wǎng)頁(yè)分析算法,過(guò)濾有效的URL及其與主題相關(guān)的鏈接,在特定的搜索框架下,從所需要的隊(duì)列中選取下一個(gè)數(shù)據(jù)想要爬取的網(wǎng)頁(yè),并進(jìn)行反復(fù)爬取,直到得到滿足數(shù)據(jù)匹配的URL網(wǎng)頁(yè)時(shí)停止。根據(jù)爬取策略所爬取的網(wǎng)頁(yè)數(shù)據(jù),將會(huì)被后臺(tái)處理,包括分析過(guò)濾、創(chuàng)建索引以便下一步可以進(jìn)行查詢和檢索操作。
2.1 視頻信息采集爬蟲的分析與設(shè)計(jì)
Scrapy引擎是Scrapy的核心,它可以將前端收到的請(qǐng)求發(fā)送給爬蟲,然后Spiders發(fā)送給核心對(duì)Scheduler請(qǐng)求,再被引擎提交到下載器處理,下載器處理完成后會(huì)發(fā)送Responses給引擎,引擎將其發(fā)送至Spiders進(jìn)行處理[2]。Scrapy的爬蟲結(jié)構(gòu)如圖1所示。
3 視頻信息采集的實(shí)現(xiàn)
本文的網(wǎng)絡(luò)視頻數(shù)據(jù)爬蟲的整體框架大致如圖2所示。
3.1 數(shù)據(jù)源與網(wǎng)頁(yè)分析
本文先對(duì)慕課網(wǎng)站的爬取進(jìn)行研究,由于網(wǎng)課為在線播放的模式,普通爬蟲較難下載視頻,所以本次抓取的慕課網(wǎng)的視頻基本信息包括課程名稱、圖片的地址、課程圖片內(nèi)容、課程人數(shù)、課程簡(jiǎn)介、課程的評(píng)分、課程難度指數(shù)以及課程的時(shí)長(zhǎng)等,示例頁(yè)面如圖3所示。
使用Response爬蟲請(qǐng)求獲取網(wǎng)頁(yè)資源,可以抓取慕課網(wǎng)站中每個(gè)課程的Div,這里Scrapy支持使用Xpath定位器定位想要爬取網(wǎng)頁(yè)資源的具體位置,可以使用Xpath表達(dá)式獲取所有h3標(biāo)簽里的文本內(nèi)容,從而獲取頁(yè)面中課程的標(biāo)題[3-4]。如圖4代碼可以定位課程名稱:
3.2 MongoDB數(shù)據(jù)庫(kù)與數(shù)據(jù)存儲(chǔ)
本文采集的數(shù)據(jù)是慕課網(wǎng)的視頻信息,對(duì)于視頻信息的存儲(chǔ),這里選擇使用非關(guān)系型的文檔數(shù)據(jù)庫(kù)MongoDB來(lái)進(jìn)行存儲(chǔ)。
MongoDB數(shù)據(jù)庫(kù)是基于文檔的非關(guān)系型數(shù)據(jù)庫(kù),因此MongoDB并沒有固定的結(jié)構(gòu),在建立文檔型的范例時(shí),即便沒有該數(shù)據(jù)庫(kù)的布局信息,仍能存到MongoDB數(shù)據(jù)庫(kù)中[5]。根據(jù)慕課網(wǎng)提供的字段信息,設(shè)計(jì)了如下集合:cursesinfo用于存儲(chǔ)采集的視頻信息數(shù)據(jù),history用于存儲(chǔ)點(diǎn)擊的歷史數(shù)據(jù),hotcourse是根據(jù)前面的演算和總結(jié)計(jì)算出8大熱門課程。其中curseinfo集合存儲(chǔ)的信息對(duì)應(yīng)慕課網(wǎng)爬取的各個(gè)字段如圖7所示。
數(shù)據(jù)存儲(chǔ)使用代碼實(shí)現(xiàn),即先將爬蟲爬取的網(wǎng)頁(yè)元素內(nèi)容解析,并創(chuàng)建一個(gè)dict對(duì)象,將爬取的數(shù)據(jù)逐一對(duì)應(yīng)填充到dict內(nèi),再通過(guò)PyMongo的collection方法將dict中的數(shù)據(jù)存儲(chǔ)到MongoDB中即可。
3.3 數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理主要是去除臟數(shù)據(jù),這里主要從數(shù)據(jù)缺失值檢測(cè)、數(shù)據(jù)去重、噪聲數(shù)據(jù)處理、數(shù)據(jù)集成這四個(gè)方面對(duì)數(shù)據(jù)進(jìn)行清洗。通常在數(shù)據(jù)采集和傳輸?shù)惹闆r下會(huì)導(dǎo)致數(shù)據(jù)缺失,對(duì)于缺失值處理方法通常有兩種方法:第一種方法是直接刪除不完整的數(shù)據(jù),該方法適用于缺失值的樣本占整個(gè)數(shù)據(jù)集樣本的比例較低的情況,但是這樣可能會(huì)丟失大量隱藏在這些刪除數(shù)據(jù)中的信息或者造成資源浪費(fèi);第二種方法是通過(guò)插入數(shù)據(jù)將數(shù)據(jù)填充完整,通常是將平均數(shù)據(jù)插入來(lái)補(bǔ)充完整,即是取數(shù)據(jù)中的平均數(shù)代替數(shù)據(jù)中所缺少的值,或者在數(shù)據(jù)中隨機(jī)地挑選個(gè)別數(shù)據(jù)進(jìn)行插入。本文中使用的是第一種方法,Python中的isnull為是否需要進(jìn)行插入填補(bǔ)。
3.4 基于物品的協(xié)同過(guò)濾算法的實(shí)現(xiàn)
基于物品的協(xié)同算法步驟:1)計(jì)算物品之間的相似度;2)根據(jù)物品的相似度和用戶的歷史行為記錄給用戶生成推薦列表。該算法的核心是:從物品角度找到相似度高的商品進(jìn)行推薦。算法思想為:根據(jù)用戶對(duì)物品的喜歡程度找到相似的物品,再根據(jù)用戶曾經(jīng)喜歡的物品推薦相類似的物品。從計(jì)算層面看,衡量物品的好壞就是根據(jù)用戶對(duì)這個(gè)物品的喜歡程度,根據(jù)用戶的曾經(jīng)喜歡程度和現(xiàn)在喜歡程度得到一個(gè)物品推薦的排序列表。
基于Python語(yǔ)言和物品的協(xié)同過(guò)濾推薦算法,對(duì)數(shù)據(jù)庫(kù)中的課程相關(guān)數(shù)據(jù)進(jìn)行功能的實(shí)現(xiàn),具體實(shí)現(xiàn)過(guò)程如圖8所示。
圖8的第一步是搭建用戶和物品的直接關(guān)系,接著得到用戶和物品之間的權(quán)重矩陣,計(jì)算他們之間的相似度,然后根據(jù)用戶的瀏覽記錄,給用戶推薦系統(tǒng)認(rèn)為用戶需要的物品,因此最終推薦的物品根據(jù)用戶自己的喜好決定。
4 視頻數(shù)據(jù)采集展示的實(shí)現(xiàn)
本文中推薦課程系統(tǒng)的設(shè)計(jì)采用Flask框架,其功能主要為視頻課程的推薦、搜索、分類。Flask是如今流行的Web框架,它使用Python實(shí)現(xiàn)功能,由于Flask不會(huì)將其全部的Web框架放在Python里面,而是將代碼簡(jiǎn)單化,因此它又被稱為“微框架”。通常情況下Flask自己不會(huì)主動(dòng)提供系統(tǒng)所需要的功能,在項(xiàng)目結(jié)構(gòu)的運(yùn)行狀態(tài)下它們可以自由進(jìn)行配置。Flask主要包含兩個(gè)核心:Werkzeug和Jinja2,這兩個(gè)核心有著不一樣的功能。而就是由于Flask這兩個(gè)核心功能讓W(xué)eb前端展示更為簡(jiǎn)便明了。
分類展示:選擇搜索框下的技術(shù)標(biāo)簽,對(duì)于慕課網(wǎng)的對(duì)應(yīng)分類視頻信息書籍進(jìn)行展示,如圖11展示結(jié)果為前端技術(shù)教學(xué)相關(guān)內(nèi)容。
推薦課程展示:在系統(tǒng)的推薦下,Recommend算法根據(jù)用戶瀏覽的課程進(jìn)行推薦,實(shí)現(xiàn)推薦與關(guān)鍵字相關(guān)的課程信息。
相關(guān)課程關(guān)鍵字搜索:系統(tǒng)根據(jù)輸入的關(guān)鍵字進(jìn)行模糊查詢,并實(shí)時(shí)進(jìn)行數(shù)據(jù)采集,將采集后的內(nèi)容呈現(xiàn)在頁(yè)面上,以展示相關(guān)的課程搜索結(jié)果及相關(guān)推薦課程展示。
5 結(jié)束語(yǔ)
本文主要使用Scrapy爬蟲技術(shù)爬取慕課網(wǎng)站的視頻資源,并使用協(xié)同推薦算法對(duì)采集的信息進(jìn)行推薦和展示。該視頻資源系統(tǒng)可以給教師與學(xué)生提供更豐富便捷的教學(xué)資源平臺(tái),對(duì)今后的計(jì)算機(jī)課程在線教與學(xué)具有創(chuàng)新價(jià)值和意義。
參考文獻(xiàn):
[1] 劉雯.主流開源爬蟲框架比較與分析[J].電子世界,2018(6):65-67.
[2] 施金龍.基于PythonScrapy技術(shù)的新聞線索匯聚實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2020(13):180-181.
[3] 張捷,郝建維,李歡歡.基于Scrapy的分布式網(wǎng)頁(yè)及文件爬蟲應(yīng)用的研究[J].科技創(chuàng)新導(dǎo)報(bào),2020,17(21):149-153.
[4] 唐琳,董依萌,何天宇.基于Python的網(wǎng)絡(luò)爬蟲技術(shù)的關(guān)鍵性問題探索[J].電子世界,2018(14):32-33.
[5] 李興武.大數(shù)據(jù)下MongoDB數(shù)據(jù)庫(kù)數(shù)據(jù)文檔存儲(chǔ)去重研究[J].數(shù)字技術(shù)與應(yīng)用,2017(9):99-101.
【通聯(lián)編輯:謝媛媛】