【摘要】當(dāng)今已進(jìn)入大數(shù)據(jù)時(shí)代,網(wǎng)絡(luò)爬蟲成為數(shù)據(jù)獲取的有效手段,獲得廣泛應(yīng)用。但在教育領(lǐng)域,尤其是職業(yè)教育領(lǐng)域的相關(guān)應(yīng)用較少。隨著國家職教改革各項(xiàng)政策的逐步落實(shí),職業(yè)教育目前正處于快速發(fā)展期,職業(yè)教育課程資源建設(shè)也顯得尤為重要。本文參考Python的Scrapy爬蟲框架,利用Selenium模擬瀏覽器執(zhí)行網(wǎng)頁操作,最終設(shè)計(jì)出一個(gè)簡潔、實(shí)用的爬蟲系統(tǒng)。對(duì)中國大學(xué)MOOC網(wǎng)站進(jìn)行相關(guān)課程信息的爬取和分析。通過數(shù)據(jù)分析,了解職業(yè)教育線上課程資源建設(shè)情況,對(duì)未來職業(yè)教育慕課、精品課程建設(shè)提出建議。同時(shí),本文提供了爬蟲系統(tǒng)在教育領(lǐng)域應(yīng)用的成功經(jīng)驗(yàn)。
【關(guān)鍵詞】Python? 爬蟲? Selenium? MOOC? 職業(yè)教育
【基金項(xiàng)目】福建省教育廳中青年教師教育科研項(xiàng)目(科技類)“基于Scrapy框架的網(wǎng)絡(luò)爬蟲系統(tǒng)的設(shè)計(jì)及其在教育領(lǐng)域的應(yīng)用”(項(xiàng)目編號(hào):JAT191700)。
【中圖分類號(hào)】TP393.092;TP391.3? 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】2095-3089(2021)30-0077-02
一、Python及爬蟲介紹
(一)網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲(Web crawler),也稱為網(wǎng)絡(luò)機(jī)器人(bot)。其是一種可以實(shí)現(xiàn)網(wǎng)頁數(shù)據(jù)抓取的自動(dòng)化程序,通過多種手段收集網(wǎng)絡(luò)數(shù)據(jù)的方式,不光是通過與API交互或者直接與瀏覽器交互的方式。最常用的方法是寫一個(gè)自動(dòng)化程序向網(wǎng)絡(luò)服務(wù)器請求數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行解析,提取需要的信息。[1]網(wǎng)絡(luò)爬蟲的思維模式就是模擬瀏覽器向服務(wù)器發(fā)出請求,接收到請求數(shù)據(jù)后再進(jìn)行解析。一般而言,基礎(chǔ)爬蟲的兩大請求庫urllib和requests。但是,目前越來越多的網(wǎng)站頁面是經(jīng)過JavaScript渲染的,當(dāng)requests在抓取頁面時(shí),得到的結(jié)果和在瀏覽器中看到的將不一樣。為解決以上問題,本文選擇Selenium實(shí)現(xiàn)爬蟲,它是一個(gè)自動(dòng)化測試工具,利用它可以驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊、下拉等操作,同時(shí)還可以獲取瀏覽器當(dāng)前呈現(xiàn)的頁面的源代碼,做到可見即可爬。[2]
(二)Python語言
隨著大數(shù)據(jù)、人工智能等領(lǐng)域的快速發(fā)展和廣泛應(yīng)用,Python語言的優(yōu)勢凸顯,變得比以往更加流行。在2021年7月的語言排行榜單升至第三位,近年來與C、Java、C++一起穩(wěn)居前四。從編程語言的市場份額可以看出,一定時(shí)期內(nèi)使用Python語言的人數(shù)越來越多。在爬蟲領(lǐng)域,因其語言簡單易懂、支持多平臺(tái)、擁有優(yōu)秀的網(wǎng)絡(luò)爬蟲庫等優(yōu)勢,成為絕大部分網(wǎng)絡(luò)爬蟲設(shè)計(jì)的首選,可以說是網(wǎng)絡(luò)爬蟲領(lǐng)域的第一編程語言。
二、爬蟲具體設(shè)計(jì)及實(shí)現(xiàn)
(一)爬取流程
Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。其架構(gòu)清晰,模塊之間的耦合程度低,可擴(kuò)展性極強(qiáng),可以靈活完成各種需求。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等。[2]
基于對(duì)Scrapy爬蟲框架的學(xué)習(xí)和研究,本文自主設(shè)計(jì)了一個(gè)更加實(shí)用和簡潔的爬蟲流程。該設(shè)計(jì)利用Selenium抓取中國大學(xué)MOOC網(wǎng)站課程數(shù)據(jù),并解析出課程的名稱、評(píng)級(jí)、開課學(xué)校、課程介紹等信息,并保存為Json和txt文件形式。本爬蟲系統(tǒng)的自動(dòng)化工作流程如圖1所示,分為三個(gè)階段:進(jìn)入檢索頁面、爬取數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)。首先,在進(jìn)入檢索頁面階段,利用Selenium依次完成初始化瀏覽器驅(qū)動(dòng)、打開網(wǎng)頁、進(jìn)入指定關(guān)鍵詞“電子技術(shù)”相關(guān)課程檢索頁。另外,經(jīng)實(shí)際測試及性能分析,這里選用Firefox瀏覽器。其次,在爬取數(shù)據(jù)階段,依次要完成檢索結(jié)果列表頁信息、列表頁中每個(gè)課程的詳情頁相關(guān)信息、進(jìn)入檢索結(jié)果的下一頁面等動(dòng)作。周而復(fù)始,直到爬取完檢索到的全部課程信息。最后,進(jìn)入存儲(chǔ)數(shù)據(jù)階段,為了便于數(shù)據(jù)分析,將課程名稱、課程評(píng)級(jí)、課設(shè)學(xué)校信息保存為Json格式;對(duì)于課程簡介數(shù)據(jù)量大,保存為txt格式。
(二)爬蟲程序設(shè)計(jì)
1.初始化。根據(jù)本設(shè)計(jì)采用的爬蟲技術(shù)及數(shù)據(jù)存儲(chǔ)方式,導(dǎo)入以下庫及函數(shù)。例如:webdriber用于初始化瀏覽器;WebDriverWait用于設(shè)置瀏覽器響應(yīng)等待最長時(shí)間;json用于將數(shù)據(jù)存儲(chǔ)為Json格式。同時(shí),完成相關(guān)參數(shù)的初始化。例如:logging.basicConnfig完成日志的配置;INDEX_URL完成網(wǎng)址初始值設(shè)置。
2.檢索結(jié)果首頁面的加載及跳轉(zhuǎn)。爬取網(wǎng)頁的初始地址為“https://www.icourse163.org/search.htm?search=電子技術(shù)#type=30&orderBy=0&pageIndex={page}&courseTagType=null”,經(jīng)分析發(fā)現(xiàn)檢索結(jié)果的每一頁地址的page參數(shù)呈現(xiàn)1、2、3…累加規(guī)律。同時(shí),考慮到爬蟲過程受到網(wǎng)絡(luò)情況的影響,設(shè)置頁面加載最長等待時(shí)間及超時(shí)報(bào)錯(cuò)。但是,經(jīng)實(shí)際測試MOOC網(wǎng)站發(fā)現(xiàn),通過更新page參數(shù)獲得新地址,無法實(shí)現(xiàn)頁面的跳轉(zhuǎn)。所以調(diào)整策略為通過Selenium模擬點(diǎn)擊“下一頁”按鈕實(shí)現(xiàn)頁面跳轉(zhuǎn)。
同時(shí),在檢索結(jié)果的每一頁,進(jìn)行數(shù)據(jù)的初步解析,爬取當(dāng)前頁檢索課程名稱、課程評(píng)級(jí)等信息。
3.爬取每一門課程的詳情頁。進(jìn)入每一門課的詳情頁后,分析網(wǎng)頁源碼,利用CSS選擇器定位到“課程描述”。爬取后關(guān)閉詳情頁,再重新定位回當(dāng)前的檢索結(jié)果列表頁。然后,重新進(jìn)入新課程的詳情頁爬取數(shù)據(jù)。如圖2所示,在分析檢索結(jié)果及HTML代碼時(shí)發(fā)現(xiàn),部分檢索結(jié)果并非常規(guī)課程,可能是講座、考試輔導(dǎo)等等,如何識(shí)別這部分的檢索結(jié)果和避免其對(duì)爬蟲數(shù)據(jù)的影響呢?本文在代碼設(shè)計(jì)時(shí),因此類非常規(guī)課程未提供“課程描述”部分,所以利用這一點(diǎn),在代碼中加入try-except模塊進(jìn)行處理,成功達(dá)到目的。
4.數(shù)據(jù)存儲(chǔ)。本設(shè)計(jì)通過構(gòu)建字典的形式存儲(chǔ)信息,其中將課程名稱、課程評(píng)級(jí)(國家精品或職業(yè)教育課程)存儲(chǔ)為JSON格式、課程描述存儲(chǔ)為txt格式。具體實(shí)施步驟為數(shù)據(jù)提取、數(shù)據(jù)存儲(chǔ)。
5.問題解決。(1)爬取策略過濾了培訓(xùn)、講座等非課程的信息,保證了數(shù)據(jù)的有效性;(2)有效規(guī)避了網(wǎng)站的反爬限制,保證了爬蟲的順利進(jìn)行;(3)實(shí)現(xiàn)模擬網(wǎng)頁操作、數(shù)據(jù)抓取、存儲(chǔ)、數(shù)據(jù)分析的全流程。
三、實(shí)驗(yàn)分析
本文在中國大學(xué)MOOC慕課網(wǎng)站,檢索指定關(guān)鍵詞“電子技術(shù)”相關(guān)課程信息。利用網(wǎng)絡(luò)爬蟲對(duì)檢索的全部課程信息進(jìn)行數(shù)據(jù)抓取。如圖3所示,檢索相關(guān)課程共624門,其中國家精品課程為342門,占相關(guān)課程的54.8%;獲得職業(yè)教育課程認(rèn)定的僅為30門,占相關(guān)課程4.8%。數(shù)據(jù)表明,普通高等教育的慕課資源建設(shè)已非常成熟,擁有一大批優(yōu)質(zhì)課程。但是,針對(duì)職業(yè)教育的課程資源嚴(yán)重偏少。且絕大部分是高職課程,中職慕課資源更加匱乏。
新時(shí)代國家大力推動(dòng)職業(yè)教育的發(fā)展,職業(yè)教育已經(jīng)成為和普通教育同等地位的類型教育,未來將在服務(wù)國家產(chǎn)業(yè)和經(jīng)濟(jì)發(fā)展方面提供有力支撐。按照國家政策,中等職業(yè)技術(shù)學(xué)校入學(xué)人數(shù)增加,高職近幾年也在不斷擴(kuò)招,接收職業(yè)教育的人數(shù)將越來越多。所以打造和豐富相關(guān)職業(yè)教育的學(xué)習(xí)資源,必須提上議程,以適應(yīng)新時(shí)代的發(fā)展需求。同時(shí),國家推動(dòng)一師一優(yōu)課,一課一名師。作為職業(yè)教育的教師,應(yīng)努力踐行三教改革,打造精品課程、開發(fā)出更多的優(yōu)質(zhì)教學(xué)資源。
四、總結(jié)
綜上所述,本文設(shè)計(jì)了一個(gè)簡潔、實(shí)用的基于Selen?
ium技術(shù)的爬蟲系統(tǒng),實(shí)現(xiàn)對(duì)中國大學(xué)MOOC網(wǎng)站課程信息的有效爬取。通過數(shù)據(jù)分析發(fā)現(xiàn)職業(yè)教育的優(yōu)質(zhì)慕課資源相對(duì)偏少,僅占到整個(gè)調(diào)研數(shù)據(jù)的14%,尤其是中職的更加匱乏,通過此研究結(jié)果凸顯了職業(yè)教育慕課資源建設(shè)的緊迫性。最終,本文的研究成果拓展了網(wǎng)絡(luò)爬蟲在教育領(lǐng)域的應(yīng)用,一定程度上促進(jìn)了爬蟲技術(shù)的發(fā)展和職業(yè)教育課程資源建設(shè)。
參考文獻(xiàn):
[1]瑞安·米切爾.Python網(wǎng)絡(luò)爬蟲權(quán)威指南[M].北京:人民郵電出版社,2020:56-57.
[2]劉宇,鄭成煥.基于Scrapy的深層網(wǎng)絡(luò)爬蟲研究[J].軟件,2017,38(7):32-33.
作者簡介:
鄒興宇(1984年-),男,漢族,黑龍江綏化人,講師,碩士研究生,研究方向?yàn)槲锫?lián)網(wǎng)、人工智能。