劉 清,徐華麗
(皖西學(xué)院,安徽 六安 237012)
大數(shù)據(jù)科學(xué)與技術(shù)是國(guó)家重點(diǎn)支持的新型特我專業(yè)之一,具有廣闊的行業(yè)發(fā)展前景[1]。作為獲取互聯(lián)網(wǎng)數(shù)據(jù)主要技術(shù)手段的網(wǎng)絡(luò)爬蟲技術(shù),自然受到廣大師生的廣泛關(guān)注[2]。
網(wǎng)絡(luò)爬蟲課程是大數(shù)據(jù)科學(xué)與技術(shù)專業(yè)的核心課程,具有區(qū)別于傳統(tǒng)編程類課程的特點(diǎn):課堂案例的爬蟲代碼有效期短,學(xué)生課后復(fù)習(xí)難度大。主要原因是教師在課堂上演示的爬蟲程序都是針對(duì)特定網(wǎng)頁編寫的,只要目標(biāo)網(wǎng)頁的結(jié)構(gòu)發(fā)生變化,演示程序就不能得到正確的結(jié)果。這一特點(diǎn)與C 語言程序設(shè)計(jì)[3]、Java 程序設(shè)計(jì)[4]等程序類課程具有明顯的差異。因此,學(xué)生必須積極參與課堂教學(xué),否則很難深入理解并掌握相關(guān)知識(shí)點(diǎn)。
鑒于上述特點(diǎn),以教師為中心的知識(shí)點(diǎn)傳授教學(xué)模式,必然面臨諸多挑戰(zhàn):學(xué)生課堂參與度不高、學(xué)生課后復(fù)習(xí)難度較大及核心知識(shí)點(diǎn)難以深入理解等問題。
本文主要通過在網(wǎng)絡(luò)爬蟲課程中,設(shè)置難度適宜的項(xiàng)目,將傳統(tǒng)知識(shí)點(diǎn)傳授教學(xué)法與項(xiàng)目驅(qū)動(dòng)教學(xué)法[5]有機(jī)結(jié)合起來:讓學(xué)生自主設(shè)計(jì)項(xiàng)目解決方案,在項(xiàng)目實(shí)施過程中,主動(dòng)發(fā)現(xiàn)問題并解決問題;進(jìn)而全面提升學(xué)生的學(xué)習(xí)積極性、發(fā)現(xiàn)問題及解決問題的綜合能力。
為了進(jìn)一步提升大學(xué)生的課堂學(xué)習(xí)效率并熟練掌握網(wǎng)絡(luò)爬蟲技術(shù),本文采用項(xiàng)目驅(qū)動(dòng)的教學(xué)方式,以學(xué)生為中心構(gòu)建項(xiàng)目解決方案,綜合提升學(xué)生的學(xué)習(xí)能力。
脫離實(shí)際問題的、純粹的知識(shí)點(diǎn)傳授式教學(xué),大多是枯燥與乏味的,不能引起大多數(shù)學(xué)生的學(xué)習(xí)興趣。項(xiàng)目驅(qū)動(dòng)教學(xué)法認(rèn)為學(xué)習(xí)的動(dòng)力來自解決生活中的問題;解決問題的過程便是構(gòu)建知識(shí)框架、提升思維能力的學(xué)習(xí)過程。因此,項(xiàng)目驅(qū)動(dòng)教學(xué)的核心理念就是讓學(xué)生在項(xiàng)目實(shí)施的過程中,發(fā)現(xiàn)問題并自主解決問題,從而提升其學(xué)習(xí)積極性。區(qū)別于傳統(tǒng)教學(xué)方法強(qiáng)調(diào)在“聽中學(xué)”,項(xiàng)目驅(qū)動(dòng)教學(xué)法則強(qiáng)調(diào)在“做中學(xué)”[5]。在項(xiàng)目驅(qū)動(dòng)教學(xué)過程中,學(xué)生在項(xiàng)目問題的指引下,不斷解決問題和發(fā)現(xiàn)新的問題,并最終完成整個(gè)項(xiàng)目任務(wù)。項(xiàng)目驅(qū)動(dòng)教學(xué)是一種現(xiàn)代化的教學(xué)方法,現(xiàn)已廣泛應(yīng)用于多學(xué)科的教學(xué)實(shí)踐中。
特別是在大數(shù)據(jù)時(shí)代背景下,絕大多數(shù)課程的核心知識(shí)點(diǎn)及常見易錯(cuò)問題,在互聯(lián)網(wǎng)上都能找到原型。這就為項(xiàng)目驅(qū)動(dòng)教學(xué)的實(shí)施提供了豐富的經(jīng)驗(yàn)供學(xué)生學(xué)習(xí)與借鑒。
項(xiàng)目驅(qū)動(dòng)教學(xué)在實(shí)施過程中,主要以小組為單位,組員之間分工明確并合作解決項(xiàng)目難題。項(xiàng)目驅(qū)動(dòng)教學(xué)一般具有如下幾個(gè)特點(diǎn)。
首先,項(xiàng)目的難易程度對(duì)項(xiàng)目實(shí)施效果有重要影響。教師要恰當(dāng)選擇學(xué)生感興趣的話題,將核心知識(shí)點(diǎn)融入其中,并將之設(shè)計(jì)為功能較為完善、難度適中的項(xiàng)目。難度大的項(xiàng)目會(huì)挫敗學(xué)生的自信心,讓學(xué)生望而卻步;難度過小的項(xiàng)目則很難引起學(xué)生的學(xué)習(xí)興趣。難度適中的項(xiàng)目一般具有入手簡(jiǎn)單、多知識(shí)點(diǎn)相互關(guān)聯(lián)等特點(diǎn)。這樣的項(xiàng)目能夠讓學(xué)生產(chǎn)生解決項(xiàng)目的自信心,并在解決項(xiàng)目的過程中,不斷挖掘潛在的知識(shí)點(diǎn)。
其次,學(xué)生是項(xiàng)目驅(qū)動(dòng)教學(xué)的主體。在項(xiàng)目教學(xué)過程中,學(xué)生根據(jù)教師的指導(dǎo),自主完成項(xiàng)目解決方案的設(shè)定、組員工作內(nèi)容分工及關(guān)鍵核心問題的攻克等任務(wù)。學(xué)生遇到問題之后,可以選擇與組員交流討論,也可以借助網(wǎng)絡(luò)搜索相關(guān)解決方案。教師只在必要的時(shí)候給予一定指導(dǎo),以幫助學(xué)生順利解決問題。
最后,學(xué)生的綜合能力得到顯著提升。在項(xiàng)目實(shí)施過程中,學(xué)生需要協(xié)商制定項(xiàng)目解決方案;需要根據(jù)學(xué)生特點(diǎn),自主合理地分配項(xiàng)目?jī)?nèi)容;需要不斷反思當(dāng)前學(xué)習(xí)活動(dòng)存在的問題,修正項(xiàng)目方案。因此,學(xué)生的合作能力、邏輯思維能力及交流與溝通能力等綜合能力將得到較大的提升。
項(xiàng)目驅(qū)動(dòng)教學(xué)從教師設(shè)置項(xiàng)目開始到項(xiàng)目評(píng)價(jià)結(jié)束,主要包括以下幾個(gè)過程。
(1)項(xiàng)目設(shè)計(jì)與理論教學(xué)。教師根據(jù)當(dāng)前研究熱點(diǎn),選擇具有實(shí)際應(yīng)用意義的課題并將若干核心知識(shí)點(diǎn)融入其中,從而設(shè)計(jì)合適的項(xiàng)目,供學(xué)生學(xué)習(xí)。在項(xiàng)目實(shí)施之前,教師應(yīng)當(dāng)為學(xué)生開展相應(yīng)的理論教學(xué),讓學(xué)生掌握一定的專業(yè)基礎(chǔ)知識(shí)。
(2)解決方案制定與項(xiàng)目分工。首先,在教師的指導(dǎo)下,學(xué)生完成分組之后,重點(diǎn)協(xié)商并制定項(xiàng)目解決方案。在這一環(huán)節(jié),學(xué)生需要按照軟件生命周期,完成項(xiàng)目需求分析及解決方案的整體框架設(shè)計(jì)。其次,每個(gè)小組需要根據(jù)組員的特點(diǎn)及項(xiàng)目解決方案的結(jié)構(gòu),合理劃分項(xiàng)目子模塊,并合理分配任務(wù)。
(3)程序編碼與測(cè)試。每個(gè)小組成員根據(jù)自己分配的任務(wù),有針對(duì)性地開發(fā)相關(guān)程序,并測(cè)試程序的性能。在遇到較難的問題時(shí),可以與組員討論、在互聯(lián)網(wǎng)上搜索相關(guān)案例經(jīng)驗(yàn)或者咨詢指導(dǎo)教師。
(4)小組答辯與教師評(píng)價(jià)。每個(gè)小組將組員的子程序模塊組合為功能完善的作品,并撰寫詳細(xì)的說明文檔。小組匯報(bào)時(shí)提供項(xiàng)目解決方案,項(xiàng)目實(shí)施過程中遇到的難題及對(duì)應(yīng)解決方法。教師根據(jù)學(xué)生匯報(bào)情況,做出總結(jié)并給出若干建議,幫助學(xué)生認(rèn)識(shí)自身的優(yōu)勢(shì)與不足,以進(jìn)一步提升學(xué)生的學(xué)習(xí)興趣。
本文將項(xiàng)目驅(qū)動(dòng)教學(xué)法應(yīng)用于網(wǎng)絡(luò)爬蟲課程的實(shí)際教學(xué)活動(dòng)中。通過問卷調(diào)查的方式,在大三學(xué)生普遍關(guān)心的小說自動(dòng)下載、考研信息匹配、圖書信息獲取、商品比價(jià)及大學(xué)生就業(yè)分析等眾話題中,選擇教學(xué)項(xiàng)目:編寫爬蟲程序自動(dòng)從拉勾網(wǎng)獲取相關(guān)專業(yè)的招聘信息,并分析崗位、薪資、區(qū)域的分布情況。該python 爬蟲教學(xué)項(xiàng)目的總體要求如下。
(1)兩人一組,合作完成爬蟲方案選擇與代碼編寫。
(2)使用selenium 庫模擬登錄網(wǎng)頁并獲取相關(guān)數(shù)據(jù)。Selenium 庫是python 爬蟲常用的一種第三方工具,能夠自動(dòng)打開網(wǎng)頁并模擬用戶操作網(wǎng)頁,實(shí)現(xiàn)元素定位、條件匹配等多種功能。
通過selenium 庫自動(dòng)獲取拉勾網(wǎng)招聘信息的爬蟲程序主要包括三個(gè)模塊:網(wǎng)絡(luò)數(shù)據(jù)采集與存儲(chǔ)模塊、數(shù)據(jù)處理模塊及數(shù)據(jù)可視化顯示模塊。下面簡(jiǎn)單介紹各模塊的功能及實(shí)現(xiàn)的技術(shù)細(xì)節(jié)。
登錄指定URL 鏈接地址,獲取當(dāng)前頁的HTML 文檔,然后通過Css_selector 選擇器定位元素。定位當(dāng)前頁面職位信息的python 語句為:Jobs=webdriver.find_elements_by_css_selector('div',[class=“job_item__1_khT”])。Jobs 是一個(gè)迭代類型,包含當(dāng)前頁面所有職位條目,每個(gè)條目包含:職位名稱、工作地點(diǎn)和薪資等信息。
獲取到上述信息之后,可利用MySql 數(shù)據(jù)庫存儲(chǔ)工作信息。數(shù)據(jù)庫相關(guān)的操作函數(shù):MySQLdb.connect 函數(shù)(打開并鏈接數(shù)據(jù)庫)、cursor()(獲取游標(biāo))、cursor.execute(data)(插入數(shù)據(jù)記錄)。
根據(jù)獲取的數(shù)據(jù),分別統(tǒng)計(jì)高薪工作的職業(yè)分布、區(qū)域分布及高薪崗位的共性要求。數(shù)據(jù)處理模塊工作流程如下。
首先,通過python 指令鏈接數(shù)據(jù)庫,并選擇數(shù)據(jù)庫及指定表格。主要函數(shù)包括以下幾種。
(1)conn.select_db(database_name):選擇指定數(shù)據(jù)庫;database_name 是選擇數(shù)據(jù)庫的名字。
(2)cur.execute(“SELECT*FROM”+table_name):按名選擇表格,table_name 為選擇的數(shù)據(jù)表格名稱。
(3)result=cur.fetchall():獲取表格數(shù)據(jù),最終返回的result 是一個(gè)元組類型變量。
其次,去除崗位信息中的多余空格,刪除含有缺失信息的職位信息。String.strip()函數(shù)直接刪除數(shù)據(jù)中的多余空格;在某些職位信息中可能缺失崗位的工資信息,因此需要?jiǎng)h除該崗位信息:若job['salary']的類型為str,則刪除。主要原因是:工作崗位的工資信息是一個(gè)浮點(diǎn)型數(shù)據(jù),若缺失,系統(tǒng)會(huì)用空字符替代。
最后,將獲取的招聘數(shù)據(jù)組織成列表job_list;在job_list 中的每個(gè)元素是一個(gè)字典類型的數(shù)據(jù),包含屬性:發(fā)布時(shí)間、崗位名稱、月工資、工作地點(diǎn)、鏈接地址、招聘單位、職位要求與說明。
在獲取到相關(guān)招聘信息之后,本文對(duì)就業(yè)信息進(jìn)行分類統(tǒng)計(jì)和數(shù)據(jù)可視化分析。
首先,統(tǒng)計(jì)月薪高于2 萬的高薪招聘崗位,并統(tǒng)計(jì)其區(qū)域分布。高薪崗位—城域分布如圖1 所示。
圖1 高薪崗位—城域分布圖
從圖1 可以看出,月薪高于2 萬的招聘崗位大多分布于上海、深圳、廣州及北京,這四個(gè)國(guó)內(nèi)的大都市,其中上海和深圳的高薪崗位占比高于21%,遠(yuǎn)高于國(guó)內(nèi)其他城市。圖1 還說明,蘇州、杭州、成都和武漢等城市的高薪崗位占比低于北京等一線城市,這與城市的整體經(jīng)濟(jì)水平保持一致。
其次,統(tǒng)計(jì)計(jì)算機(jī)方向高薪崗位的技術(shù)分類及其占比。本文重點(diǎn)統(tǒng)計(jì)了計(jì)算機(jī)方向上的傳統(tǒng)技術(shù)及大數(shù)據(jù)技術(shù),區(qū)塊鏈等新興技術(shù)的高薪崗位比例,以引導(dǎo)大學(xué)生根據(jù)自身興趣,及早準(zhǔn)備相關(guān)技術(shù)知識(shí),為后期擇業(yè)做好充足準(zhǔn)備。各技術(shù)的高薪崗位分布圖如圖2 所示。
圖2 高薪職業(yè)的技術(shù)類型分布圖
從圖2 可以看出,區(qū)塊鏈和大數(shù)據(jù)的占比最高,分別為29.5%和21.5%。這說明,在IT 行業(yè),新興技術(shù)的工資水平普遍高于傳統(tǒng)的軟件、程序類崗位。圖2 還說明,傳統(tǒng)技術(shù)之中,多媒體、軟件設(shè)計(jì)仍然是較為受歡迎的就業(yè)選擇。在C++、Java 及go 語言等主要的編程語言中,java 的高薪崗位略多于C++;go 語言是最近幾年興起的編程語言,現(xiàn)已超越python[6],成為僅次于C++的熱門程序語言之一。
再次,根據(jù)每條招聘信息的崗位說明,本文利用詞頻統(tǒng)計(jì),對(duì)高薪崗位(月薪高于2 萬/月)要求的工作經(jīng)驗(yàn)?zāi)晗捱M(jìn)行分類統(tǒng)計(jì)。詳細(xì)的工作經(jīng)驗(yàn)?zāi)晗薹植紙D如圖3 所示。
圖3 高薪崗位的工作經(jīng)驗(yàn)?zāi)晗薹植紙D
從圖3 可以看出,高薪崗位對(duì)工作經(jīng)驗(yàn)的要求大部分集中于3~4 年和5~7 年,這兩個(gè)時(shí)間區(qū)間內(nèi),分別占比44%和27%;而工作年限在7~9 年之間的高薪崗位占比不到5%。出現(xiàn)這一現(xiàn)象的原因主要包括兩個(gè)方面:①計(jì)算機(jī)方向的技術(shù)更新較快,工作7~9 年之后,程序員的技術(shù)很難再次轉(zhuǎn)型;②年齡限制:本科畢業(yè)約24 歲左右,工作9 年之后,約35 歲,程序員的中年危機(jī)現(xiàn)象一直較為嚴(yán)重。通過對(duì)圖3 的分析,將有助于大學(xué)生做好個(gè)人職業(yè)的長(zhǎng)期發(fā)展規(guī)劃。
最后,本文還分類統(tǒng)計(jì)了高薪崗位對(duì)邏輯思維、團(tuán)隊(duì)合作和逆向分析等關(guān)鍵能力特征及其在職業(yè)招聘中的占比分析,結(jié)果如圖4 所示。
圖4 高薪職業(yè)的能力特征比例圖
從圖4 可以看出,在高薪崗位招聘中,邏輯思維能力和團(tuán)隊(duì)合作能力是最重要的兩種能力,分別占比32.7%和33.4%;逆向分析及獨(dú)立思考能力也是高薪崗位要求的重要能力;讓人意外的是發(fā)現(xiàn)問題的能力占比不高,只有0.8%。主要原因應(yīng)該是絕大多數(shù)崗位主要從事系統(tǒng)開發(fā)、維護(hù)等工作,而非科學(xué)研究型工作。
為了客觀評(píng)價(jià)本次項(xiàng)目驅(qū)動(dòng)教學(xué)的效果,本文在實(shí)施項(xiàng)目驅(qū)動(dòng)教學(xué)之前以及項(xiàng)目實(shí)施之后,對(duì)學(xué)生各進(jìn)行一次相關(guān)爬蟲數(shù)據(jù)獲取、數(shù)據(jù)清洗及數(shù)據(jù)可視化基礎(chǔ)知識(shí)的測(cè)試,最終成績(jī)對(duì)比見表1。
表1 項(xiàng)目實(shí)施前后,測(cè)試成績(jī)對(duì)比表
表1 的測(cè)試成績(jī)統(tǒng)計(jì)數(shù)據(jù)說明,在項(xiàng)目實(shí)施前后,測(cè)試分?jǐn)?shù)在61~85 分之間的人數(shù)比例總體基本保持一致,波動(dòng)幅度不大;變化最明顯的是分?jǐn)?shù)在60 分以下的人數(shù)占比由原來的21%縮小為5%。這說明,通過本項(xiàng)目的實(shí)施,大部分不及格的同學(xué)能夠通過自我學(xué)習(xí),掌握爬蟲相關(guān)的核心概念及基礎(chǔ)知識(shí)。另外一個(gè)明顯的變化是高分成績(jī)的學(xué)生比例迅速增加:85 分以上的學(xué)生由原來的2%提升至19%。這一現(xiàn)象充分說明,通過項(xiàng)目驅(qū)動(dòng)教學(xué),學(xué)生能夠深入理解并且熟練掌握相關(guān)核心知識(shí)。
本項(xiàng)目成功將項(xiàng)目驅(qū)動(dòng)教學(xué)法應(yīng)用于網(wǎng)絡(luò)爬蟲課程的日常教學(xué)之中。通過挑選學(xué)生感興趣的熱門話題,讓學(xué)生主動(dòng)參與爬蟲程序設(shè)計(jì)的教學(xué)過程,極大提升了學(xué)生自主學(xué)習(xí)的興趣。本項(xiàng)目的爬蟲程序重點(diǎn)獲取了大學(xué)畢業(yè)生重點(diǎn)關(guān)注的招聘信息,并對(duì)高薪崗位進(jìn)行了統(tǒng)計(jì)分析:高薪崗位城市分布、技術(shù)分布、工作經(jīng)驗(yàn)及特定能力要求等。通過對(duì)高薪崗位的分析,增強(qiáng)了計(jì)算機(jī)方向畢業(yè)生對(duì)其職業(yè)生涯的宏觀認(rèn)知,對(duì)其未來職業(yè)規(guī)劃具有積極的指導(dǎo)意義。從最終的測(cè)試成績(jī)分析可知,通過本項(xiàng)目的驅(qū)動(dòng),大部分學(xué)生能夠通過自主學(xué)習(xí),較大幅度地提升其知識(shí)掌握水平,以及獨(dú)立開發(fā)爬蟲程序的能力。