王 芳,肖皇培
?
以爬蟲為興趣牽引的Python教學(xué)方案探索與實踐
王 芳,肖皇培
(華南理工大學(xué)廣州學(xué)院 計算機工程學(xué)院,廣東 廣州 510800)
本文從Python程序設(shè)計語言課程教學(xué)方案設(shè)計、案例設(shè)計展開研究,給出一套可行的“爬蟲牽引興趣,案例驅(qū)動學(xué)習(xí)”的Python教學(xué)方案,該教學(xué)方案適用于計算機或軟件類專業(yè)(方向)的本科Python語言課程教學(xué)。
爬蟲;Python;教學(xué)模式;案例教學(xué)
Python是當(dāng)今最受歡迎的語言之一,它的PYPL指數(shù)[1](Popularity of Programming Language Index)在今年5月已超過Java,躍居第一位,如圖一。Python 語言是最接近自然語言的語言,是最接近人工智能的語言。人類天才棋手被人工智能打敗表明計算機技術(shù)已進入人工智能階段。AlphaGo背后的程序,有部分是用Python編寫的。AlphaGo在全球產(chǎn)生巨大影響力的同時,其背后的 TensorFlow技術(shù)開源并快速應(yīng)用于機器翻譯、自動駕駛、唇語識別等多個領(lǐng)域。Python在網(wǎng)絡(luò)爬蟲、數(shù)據(jù)分析、AI、機器學(xué)習(xí)、Web開發(fā)、金融、運維、測試等多個領(lǐng)域都有不俗的表現(xiàn)。教育部考試中心也于2017年10月11日發(fā)布了“關(guān)于全國計算機等級考試(NCRE)體系調(diào)整”的通知,決定自2018年3月起,在計算機二級考試加入了“Python語言程序設(shè)計”科目。近幾年來國內(nèi)也有不少學(xué)校陸續(xù)開設(shè)了Python程序設(shè)計課程。程序設(shè)計課程教學(xué)改革不僅僅是選擇一種語言,更應(yīng)該是建立一種易于理解、提升興趣的教學(xué)形式[2]。Python語言符合計算機技術(shù)發(fā)展階段。在新工科建設(shè)背景下,只有面向未來的教學(xué)內(nèi)容才值得進行大范圍、深刻的教學(xué)改革[3]。
在以往的程序設(shè)計語言類課程中,往往將大量學(xué)時用于編程語言的語法和所附加功能的教學(xué)上,而并未訓(xùn)練學(xué)生解決實際問題的思維邏輯,難以引發(fā)學(xué)生學(xué)習(xí)興趣,難以保持學(xué)習(xí)熱情。Python 語法簡潔,程序邏輯設(shè)計純粹,易上手,有助于保護學(xué)生的學(xué)習(xí)熱情。Python 語言有十萬余第三方庫,其中部分庫適合初學(xué)者進行程序設(shè)計探索,其易調(diào)用性和實用性也容易引發(fā)學(xué)習(xí)興趣。
圖1 PYPY指數(shù)
爬蟲[4]通常指的是網(wǎng)絡(luò)爬蟲,就是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。一般是根據(jù)定義的行為自動進行抓取,更智能的爬蟲會自動分析目標(biāo)網(wǎng)站結(jié)構(gòu)。它還有一些不常使用的名字,如:網(wǎng)絡(luò)蜘蛛(Web spider)、螞蟻(ant)、自動檢索工具(automatic indexer)、網(wǎng)絡(luò)疾走(WEB scutter)、網(wǎng)絡(luò)機器人等。很多人將Python和爬蟲綁在一起。與Java、Php等靜態(tài)編程語言相比,Python 擁有更豐富的第三方庫,寫一個簡單的爬蟲只需要十幾行代碼。
學(xué)習(xí)爬蟲是一件很有趣的事。我們想從互聯(lián)網(wǎng)中獲取一些自己感興趣或需要的東西,就可以利用爬蟲技術(shù)。我們使用爬蟲獲取更多的數(shù)據(jù)源,這些數(shù)據(jù)源可以按我們的目的進行采集,去掉無關(guān)數(shù)據(jù),保留感興趣的數(shù)據(jù)。興趣是最好的老師,我們學(xué)習(xí)跟興趣有關(guān)的知識不但學(xué)的快記的牢,而且有成就感。簡單來說,我們學(xué)會了爬蟲編寫之后,就可以利用爬蟲自動地從互聯(lián)網(wǎng)中采集我們感興趣的信息,采集回來后進行相應(yīng)的存儲或處理,在需要檢索某些信息的時候,只需在采集回來的信息中進行檢索,就像實現(xiàn)了個人的搜索引擎。我們還可以對這些爬取到的數(shù)據(jù)進行更深層次的數(shù)據(jù)分析,獲取更多有價值的信息。當(dāng)然,信息的爬取、存儲、分析、相關(guān)性計算等方法,都是需要我們進行設(shè)計的,而爬蟲技術(shù)主要解決信息獲取的問題。
隨著大數(shù)據(jù)時代的來臨,爬蟲技術(shù)的應(yīng)用越來越廣泛,各行業(yè)對爬蟲工程師的需求量越來越大,爬蟲工程師成為緊缺型高薪人才,并且擁有很好的發(fā)展空間。所以掌握爬蟲技術(shù)對學(xué)生來說是非常有吸引力的。
學(xué)習(xí)Python爬蟲需要具備一定的網(wǎng)絡(luò)基礎(chǔ)和前端基礎(chǔ)。我校將《Python語言》作為專業(yè)選修課程開設(shè)在軟件工程專業(yè)大三學(xué)生的第一學(xué)期,本專業(yè)的學(xué)生已經(jīng)在大二學(xué)習(xí)過網(wǎng)絡(luò)和前端基礎(chǔ)的相關(guān)課程,已經(jīng)基本掌握了http協(xié)議、request/response流程、html網(wǎng)頁結(jié)構(gòu)、JS/Ajax請求過程、css定位/選擇器等知識。我們將在本課程中教授Python基礎(chǔ)知識以及爬蟲技術(shù)常用的如scrapy、requests、beau-tifulsoap、re等第三方庫的使用。通過具體案例學(xué)習(xí)和體會爬取靜態(tài)網(wǎng)站和動態(tài)網(wǎng)站的過程。
我校軟件工程專業(yè)是在學(xué)生已經(jīng)先修了C和Java之后再開設(shè)的Python課程,除了簡要介紹Python作為程序設(shè)計語言的基本知識點外,更多要考慮讓學(xué)生了解Python語言的特點。而Python作為專業(yè)選修課開設(shè)在大三,更應(yīng)該注重Python的實踐應(yīng)用。針對我校軟件工程專業(yè)學(xué)生,結(jié)合Python語言的特點,我們在教學(xué)過程中輕語法、重實踐,加強實際問題求解能力的培養(yǎng),選擇以網(wǎng)絡(luò)爬蟲技術(shù)為應(yīng)用目標(biāo)來開展Python課程教學(xué),適當(dāng)增加實踐學(xué)時和實踐訓(xùn)練量,從而達到提升學(xué)生解決實際問題能力的目的[5]。
我校軟件工程專業(yè)選修課《Python語言》的課程教學(xué)方案分為兩個部分:第一部分是Python編程基礎(chǔ)。主要講解Python語言基本語法,包括基礎(chǔ)數(shù)據(jù)類型、基本運算、控制流、高級數(shù)據(jù)類型、函數(shù)、類與對象等內(nèi)容。重點講解對列表、元組、字典的操作,列表推導(dǎo)式,文件讀寫。第二部分是面向能力培養(yǎng)的網(wǎng)絡(luò)爬蟲技術(shù)。圍繞一系列第三方庫培養(yǎng)學(xué)生掌握網(wǎng)絡(luò)爬蟲的實戰(zhàn)能力。通過講解 requests庫、beautifulsoup庫和re庫,培養(yǎng)學(xué)生Web爬取和信息提取的能力;通過講解numpy庫、matplotlib庫和pandas庫,培養(yǎng)學(xué)生數(shù)據(jù)處理和展示的能力[3]。
圖2 Python課程教學(xué)方案
如圖2所示,從第一堂課就開始介紹并展示爬蟲,以牽引學(xué)生的學(xué)習(xí)興趣。第一部分“Python編程基礎(chǔ)”講解過程中要配合一定的基礎(chǔ)練習(xí),以讓學(xué)生熟悉Python語言的語法特點。在高級數(shù)據(jù)類型、數(shù)據(jù)存儲章節(jié)主要講解的知識點都是為第二部分“網(wǎng)絡(luò)爬蟲技術(shù)”的內(nèi)容服務(wù)的。開始第二部分“網(wǎng)絡(luò)爬蟲技術(shù)”之前,要求學(xué)生復(fù)習(xí)網(wǎng)絡(luò)和前端相關(guān)知識點,也可以設(shè)計2個學(xué)時帶領(lǐng)學(xué)生有針對性地復(fù)習(xí)。第二部分“網(wǎng)絡(luò)爬蟲技術(shù)”采用案例教學(xué)法,以抓取“豆瓣電影”分類頁面內(nèi)容為例來講解數(shù)據(jù)的爬取、提取、整理及展示過程。最后給學(xué)生布置課后實戰(zhàn)練習(xí):仿照課堂上的案例抓取并分析招聘網(wǎng)站數(shù)據(jù)。
網(wǎng)絡(luò)爬蟲技術(shù)講解過程中,偏重講解網(wǎng)絡(luò)爬蟲技術(shù)的原理和第三方庫的使用。引導(dǎo)學(xué)生在理解不同網(wǎng)站和頁面的爬取原理后,對案例進行消化和吸收,復(fù)習(xí)和補充各種學(xué)生認為有必要掌握的理論知識,在主動學(xué)習(xí)的過程中進一步加深了對知識的理解。下圖展示了爬取數(shù)據(jù)時分析數(shù)據(jù)源的詳細流程。
如圖3所示,在完成數(shù)據(jù)爬取后,是對數(shù)據(jù)的分析、整理和展示。此時,第三方庫的引入可以極大地簡化問題求解和學(xué)生學(xué)習(xí)的難度,培養(yǎng)和引導(dǎo)學(xué)生盡可能利用第三方庫進行編程,用最簡單的方法快速解決問題[6]。除了圖3中提到的庫外,常用的還有selenium庫用于模擬瀏覽器、lxml庫用于xpath、scrapy庫已發(fā)展成一個成熟的爬蟲框架。
圖3 爬取過程分析
經(jīng)過兩輪的探索和實踐,以及對課程內(nèi)容和授課方式的不斷細化和調(diào)整,我校軟件工程專業(yè)已初步形成了以爬蟲為興趣牽引的Python教學(xué)模式。從課程評價、學(xué)生項目質(zhì)量等方面看,實施效果較好,可作為同類院校計算機或軟件類專業(yè)高年級Python課程的教學(xué)方案。
Python在良好的開源生態(tài)下競爭激烈且發(fā)展迅速[3]。例如,urllib、requests、scrapy 等第三方庫都提供網(wǎng)絡(luò)爬蟲功能,隨著競爭深入,requests 庫成為簡單頁面爬取的主流工具,scrapy庫成為可靠爬蟲框架,urllib 被逐步淘汰。以此為縮影,面向能力培養(yǎng)的案例教學(xué)形式對教師也提出了更高的要求,要求教師不斷吸收新技術(shù)新知識,不斷更新教學(xué)案例,不斷補充教學(xué)內(nèi)容。
[1] Popularity of Programming Language Index[EB/OL]. [2018-09- 30]. http://pypl.github.io/PYPL.html.
[2] 黃天羽, 嵩天. 以圖形牽引興趣的Python案例教學(xué)方法與實踐[J]. 計算機教育, 2017(8): 32-37.
[3] 嵩天, 黃天羽, 禮欣. 面向計算生態(tài)的Python語言入門課程教學(xué)方案[J]. 計算機教育, 2017(8): 7-12.
[4] 網(wǎng)絡(luò)爬蟲[EB/OL]. [2018-11-13]. https://baike.baidu.com/ item/網(wǎng)絡(luò)爬蟲/5162711.
[5] 趙廣輝. 面向新工科的Python程序設(shè)計交叉融合案例教學(xué)[J]. 計算機教育, 2017(8):23-27.
[6] 張莉, 金瑩, 張潔. 多樣化可擴展的Python教學(xué)體系探索與實踐[J]. 計算機教育, 2017, 8, 18-22.
Exploration and Practice on the Python Teaching Scheme of Attracted by Web Crawler
WANG Fang, XIAO Huang-pei
(Guangzhou College of South China University of Technology, Guangzhou 510800, Guangdong, China)
This article, with respect to design of the teaching plan, teaching method, teaching case, etc, systematically studies and thoroughly designs the education mode of Python courses. In teaching of Python, the adoption of interest-driving teaching method combined with detailed case projects of Web Crawler can both stimulate students interest in learning and enhance teaching quality, and very practical and has strong promotional value in simiar majors.
Web Crawler; Python; Teaching scheme; Case teaching
TP311
A
10.3969/j.issn.1003-6970.2018.12.007
華南理工大學(xué)廣州學(xué)院2018“創(chuàng)新強校工程”(JY181401)
王芳(1986-),女,碩士研究生,助教,主要研究方向:軟件工程?大數(shù)據(jù)技術(shù);肖皇培(1979-),男,博士,副研究員,主要研究方向:信息安全?密碼學(xué)。
王芳,肖皇培. 以爬蟲為興趣牽引的Python教學(xué)方案探索與實踐[J]. 軟件,2018,39(12):28-31