楊 雄
(西北民族大學(xué),甘肅 蘭州 730000)
據(jù)人力資源和社會(huì)保障統(tǒng)計(jì),每年高校畢業(yè)生高達(dá)數(shù)萬(wàn),勢(shì)必會(huì)造成巨大的就業(yè)壓力,能否找到心儀的工作還得靠自身的能力,不僅取決于是否具有畢業(yè)證和學(xué)位證,還取決于在校時(shí)獲得的其他證書及平時(shí)的各類成績(jī)。獲得相應(yīng)的證書可以直觀地反應(yīng)個(gè)人的能力大小,例如:獲得華為主辦的中國(guó)區(qū)大學(xué)生ICT大賽、國(guó)際計(jì)算機(jī)協(xié)會(huì)主辦的ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽、中國(guó)工業(yè)與應(yīng)用數(shù)學(xué)學(xué)會(huì)舉辦的大學(xué)生數(shù)學(xué)建模比賽、武漢大學(xué)主辦的全國(guó)大學(xué)生化學(xué)實(shí)驗(yàn)競(jìng)賽等比賽的證書將會(huì)在面試時(shí)為學(xué)生帶來(lái)更大的信心。但是據(jù)調(diào)查顯示,很多人都不知道這些賽事的舉辦時(shí)間及內(nèi)容等。通過(guò)Python網(wǎng)絡(luò)爬蟲技術(shù)將比賽信息抓取到MySQL數(shù)據(jù)庫(kù)中,可以方便用戶進(jìn)行查詢及關(guān)注。
目前發(fā)現(xiàn)已經(jīng)使用的與Python爬取比賽信息有關(guān)的系統(tǒng)或APP,具有如下特點(diǎn):(1)以Python技術(shù)作為基礎(chǔ)進(jìn)行開發(fā),綜合應(yīng)用了Python網(wǎng)絡(luò)函數(shù)庫(kù)。(2)以盈利為目的。(3)銷售有關(guān)比賽的書籍及課程。
通過(guò)問(wèn)卷調(diào)查及走訪高校同學(xué)發(fā)現(xiàn)如下問(wèn)題:(1)只知道四六級(jí)及計(jì)算機(jī)二級(jí)之類常規(guī)考試。(2)對(duì)將來(lái)找工作是否應(yīng)該具有更多的證書概念模糊。(3)更多的同學(xué)對(duì)比賽的時(shí)間、地點(diǎn)等不清楚,更不知道怎么去復(fù)習(xí)。(4)找不到一起參加比賽的隊(duì)友,一個(gè)人不想?yún)⒓颖荣惖取?/p>
對(duì)于上述問(wèn)題,需研發(fā)一個(gè)系統(tǒng)來(lái)解決,這個(gè)系統(tǒng)具有以下的特點(diǎn):(1)通過(guò)Python爬蟲技術(shù)抓取相關(guān)比賽信息。(2)實(shí)現(xiàn)抓取信息定制化。(3)實(shí)現(xiàn)信息查詢功能。(4)可以相互交流并尋找參賽隊(duì)友。
此系統(tǒng)實(shí)現(xiàn)爬取過(guò)程比較簡(jiǎn)單,先明確初始網(wǎng)頁(yè)的統(tǒng)一資源定位符(URL),找到數(shù)據(jù)對(duì)應(yīng)的網(wǎng)頁(yè),分析網(wǎng)頁(yè)結(jié)構(gòu),找到數(shù)據(jù)所在標(biāo)簽位置,模擬超文本傳輸協(xié)議(HTTP)請(qǐng)求,并向服務(wù)器發(fā)送這個(gè)請(qǐng)求,獲取到服務(wù)器返回的超文本標(biāo)記語(yǔ)言(HTML),傳遞給數(shù)據(jù)解析模塊之后,將URL放進(jìn)已經(jīng)爬取的URL隊(duì)列中,數(shù)據(jù)解析模塊解析收到的HTML之后,通過(guò)正則表達(dá)式來(lái)處理所要爬取的具體內(nèi)容,系統(tǒng)具體框架如圖1所示。
圖1 系統(tǒng)具體框架
所謂網(wǎng)絡(luò)爬蟲[1-2],就是一段自動(dòng)抓取互聯(lián)網(wǎng)信息的程序,從互聯(lián)網(wǎng)上抓取有價(jià)值的信息,就像一張蜘蛛網(wǎng),順著這張網(wǎng)爬行,每到一個(gè)網(wǎng)頁(yè)就用抓取程序?qū)⒕W(wǎng)頁(yè)抓下來(lái),將內(nèi)容抽取出來(lái),同時(shí)抽取超鏈接,作為進(jìn)一步爬行的線索。
Python爬蟲是按一定的規(guī)則自動(dòng)爬取瀏覽器中信息的程序及腳本,也就是獲取Web頁(yè)面上自己想要的數(shù)據(jù);爬蟲架構(gòu)主要由5個(gè)部分組成,具體如下[3]:
(1)調(diào)度器。相當(dāng)于電腦的中央處理器(CPU),主要負(fù)責(zé)調(diào)度URL管理器、下載器、解析器之間的協(xié)調(diào)工作。
(2)URL管理器。包括待爬取的URL地址和已爬取的URL地址,防止重復(fù)抓取URL,實(shí)現(xiàn)URL管理器主要有3種方式,通過(guò)內(nèi)存、數(shù)據(jù)庫(kù)、緩存數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)。
(3)網(wǎng)頁(yè)下載器。通過(guò)傳入一個(gè)URL地址來(lái)下載網(wǎng)頁(yè),將網(wǎng)頁(yè)轉(zhuǎn)換成一個(gè)字符,網(wǎng)頁(yè)下載器有urllib包括需要登錄、代理和cookier,requests。
(4)網(wǎng)頁(yè)解析器。將一個(gè)網(wǎng)頁(yè)字符串進(jìn)行解析,可以按照用戶的要求來(lái)提取出有用的信息。
(5)應(yīng)用程序。指從網(wǎng)頁(yè)中提取的有用數(shù)據(jù)組成的一個(gè)應(yīng)用。
HTML不是一種編程語(yǔ)言,而是標(biāo)識(shí)語(yǔ)言,用于創(chuàng)建網(wǎng)頁(yè),使用標(biāo)簽來(lái)描述網(wǎng)頁(yè)的。
瀏覽器/服務(wù)器(Brower/Server,B/S)模式統(tǒng)一了客戶端,將系統(tǒng)功能的核心部分集中到服務(wù)器上,簡(jiǎn)化了系統(tǒng)的開發(fā)、維護(hù)和使用。
計(jì)算機(jī)二級(jí)是本科生階段最基礎(chǔ)的考試,為了能夠從大量信息中提取出有關(guān)于計(jì)算機(jī)二級(jí)的基本信息,本研究通過(guò)具體的代碼以及使用正則表達(dá)式來(lái)實(shí)現(xiàn)基本信息的抓取,供后期數(shù)據(jù)分析。
首先,在I E瀏覽器中輸入ht t ps://bai ke.so.com/doc/5309824-5544749.html,就會(huì)出現(xiàn)關(guān)于計(jì)算機(jī)二級(jí)的所有信息;其次,按“F12”鍵進(jìn)入源代碼調(diào)試窗口,此窗口中有許多“div”標(biāo)簽,標(biāo)簽中的內(nèi)容就是待抓取數(shù)據(jù)。使用正則表達(dá)式來(lái)篩選。
在進(jìn)行數(shù)據(jù)抓取時(shí),要先尋找標(biāo)簽或標(biāo)識(shí)符,選取所需標(biāo)簽時(shí)要遵循3個(gè)原則:
(1)確定唯一能起決作用的標(biāo)識(shí)。
(2)找最接近提取數(shù)據(jù)的標(biāo)簽。
(3)選取閉合的標(biāo)簽,進(jìn)入源代碼調(diào)試窗口之后,左上角就會(huì)出現(xiàn)類似于小箭頭的按鈕(),鼠標(biāo)點(diǎn)擊此箭頭。移動(dòng)鼠標(biāo),當(dāng)鼠標(biāo)指向基本信息時(shí),源代碼調(diào)試窗口就會(huì)顯示包含基本信息的代碼,接著就在Pycharm編譯器中編寫代碼(關(guān)鍵代碼:form urllib import request;class Spider();url=”…”;root_pattern=”…”;…)。當(dāng)確定了“url”及“root_pattern”之后,能否提取到所有基本信息取決于在“root_pattern”的“div”標(biāo)簽中靈活使用正則表達(dá)式,正則表達(dá)式中字符集包括“a.[d D],b.[w 單詞字符W],c.[s空白字符S]”等。使用“[s S]*”就可以抓取關(guān)于二級(jí)的基本信息,抓取結(jié)果如圖2所示。
圖2 抓取到的關(guān)于計(jì)算機(jī)二級(jí)的基本信息
當(dāng)爬取數(shù)據(jù)量較小時(shí),執(zhí)行速度快;當(dāng)數(shù)據(jù)量較大時(shí),會(huì)出現(xiàn)卡頓情況,因?yàn)橄到y(tǒng)要為每個(gè)線程分配資源,同時(shí),要具備較好的網(wǎng)速以及較強(qiáng)的硬件,才會(huì)提升爬取速率。
文章以對(duì)計(jì)算機(jī)二級(jí)的基本信息查詢?yōu)槔榻B了一種基于Python爬蟲的比賽信息查詢及交流系統(tǒng)的程序設(shè)計(jì),面對(duì)所爬取對(duì)象,文章還存在一定的缺陷,有進(jìn)一步的優(yōu)化空間。例如:爬取數(shù)據(jù)較大時(shí),速度會(huì)變慢,可以通過(guò)緩存或多線程技術(shù)優(yōu)化爬蟲算法效率。文章Python爬蟲技術(shù)的實(shí)現(xiàn)為后續(xù)研究工作奠定了一定的基礎(chǔ)。