公務(wù)員期刊網(wǎng) 論文中心 正文

學(xué)生信息管理微信小程序數(shù)據(jù)獲取構(gòu)建

前言:想要寫(xiě)出一篇引人入勝的文章?我們特意為您整理了學(xué)生信息管理微信小程序數(shù)據(jù)獲取構(gòu)建范文,希望能給你帶來(lái)靈感和參考,敬請(qǐng)閱讀。

學(xué)生信息管理微信小程序數(shù)據(jù)獲取構(gòu)建

摘要:隨著信息化建設(shè)步伐的不斷加快,為滿(mǎn)足校園信息化建設(shè)的要求,需要為學(xué)生開(kāi)發(fā)一款基于微信小程序的學(xué)生信息管理平臺(tái),整合學(xué)校各信息系統(tǒng)資源,方便學(xué)生使用,減少不必要的操作。該平臺(tái)將采用python爬蟲(chóng)的方式,在教務(wù)系統(tǒng)、學(xué)工管理系統(tǒng)、實(shí)習(xí)平臺(tái)等獲取相關(guān)的數(shù)據(jù),利用爬蟲(chóng)實(shí)現(xiàn)帶驗(yàn)證碼和反爬機(jī)制的虛擬登陸,并通過(guò)scrapy框架獲取系統(tǒng)中的數(shù)據(jù),實(shí)現(xiàn)資源整合。

關(guān)鍵詞:python;爬蟲(chóng);scrapy框架;資源整合

1引言

隨著學(xué)校信息化建設(shè)不斷推進(jìn),各類(lèi)系統(tǒng)平臺(tái)不斷開(kāi)發(fā)并投入使用,提高了學(xué)校師生的信息化水平。但在進(jìn)行相關(guān)系統(tǒng)平臺(tái)建設(shè)的過(guò)程中,不同的部門(mén)對(duì)系統(tǒng)平臺(tái)有各自的要求,這樣導(dǎo)致學(xué)校的系統(tǒng)各自獨(dú)立,數(shù)據(jù)不互通,登錄賬戶(hù)也各不相同。如涉及學(xué)生的系統(tǒng)就包含了學(xué)工系統(tǒng)、教務(wù)管理系統(tǒng)、實(shí)習(xí)系統(tǒng)等,導(dǎo)致學(xué)校存在數(shù)據(jù)孤島的問(wèn)題,數(shù)據(jù)在不同部門(mén)相互獨(dú)立存儲(chǔ),獨(dú)立維護(hù),彼此間相互孤立,形成了物理上的孤島。為了解決數(shù)據(jù)孤島的問(wèn)題,需要對(duì)信息系統(tǒng)數(shù)據(jù)做進(jìn)一步的整合。在節(jié)約學(xué)校開(kāi)支的前提下,開(kāi)發(fā)一款基于微信小程序的學(xué)生信息平臺(tái),通過(guò)使用python網(wǎng)絡(luò)爬蟲(chóng)的方式從各個(gè)信息系統(tǒng)進(jìn)行信息的爬取最終整合到一個(gè)平臺(tái)上,方便用戶(hù)使用。本文將以獲取教務(wù)系統(tǒng)中的課程表為例,探討如何通過(guò)爬蟲(chóng),采用模擬登陸的方式,在微信小程序中快速獲取相關(guān)信息[1-3]。

2爬蟲(chóng)設(shè)計(jì)

2.1技術(shù)概述

2.1.1SeleniumSelenium是一個(gè)模擬瀏覽器操作的測(cè)試工具。使用Selenium,安裝相應(yīng)的瀏覽器驅(qū)動(dòng),便可以直接對(duì)瀏覽進(jìn)行操作,就像真正的用戶(hù)在操作一樣。兼容市面上各種主流瀏覽器包括IE(7或以上)、MozillaFirefox、Safari、GoogleChrome、Opera等。Selenium主要功能包括:用于檢驗(yàn)開(kāi)發(fā)項(xiàng)目在不同瀏覽不同系統(tǒng)的兼容情況,利用腳本,使用selenium進(jìn)行模測(cè)試工作。通過(guò)創(chuàng)建回歸測(cè)試檢驗(yàn)用戶(hù)需要和軟件性能以檢驗(yàn)系統(tǒng)功能是否正常??梢愿鶕?jù)不同的開(kāi)發(fā)環(huán)境和編程語(yǔ)言如.NET、JAVA等進(jìn)行測(cè)試腳本的錄制工作[4]。

2.1.2requestsrequests是由python編寫(xiě)的常用的網(wǎng)絡(luò)請(qǐng)求http庫(kù)。request代碼編寫(xiě)簡(jiǎn)潔,功能十分強(qiáng)大。在python內(nèi)置模塊的基礎(chǔ)上進(jìn)行高度的封裝,從而使得python進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),變得人性化,使用requests可以輕而易舉完成瀏覽器的任何操作。

2.1.3ScrapyFrameworkScrapy是現(xiàn)在主流的數(shù)據(jù)爬蟲(chóng)框架,用以提取網(wǎng)絡(luò)中的各種數(shù)據(jù),有著較為廣泛的用途。Scrapy常應(yīng)用于數(shù)據(jù)挖掘、數(shù)據(jù)獲取、數(shù)據(jù)處理數(shù)據(jù)存儲(chǔ)等一系列過(guò)程。使用Scrapy框架可以很簡(jiǎn)單地實(shí)現(xiàn)從互聯(lián)網(wǎng)中獲取指定網(wǎng)站中的內(nèi)容。

2.1.4TesseractOCRTesseractORC(OpticalCharacterRecognition,光學(xué)字符識(shí)別)是一個(gè)用于文字圖形轉(zhuǎn)換的開(kāi)源引擎,由HP實(shí)驗(yàn)室開(kāi)發(fā)并由Google進(jìn)行維護(hù)。它可以通過(guò)不斷地進(jìn)行機(jī)器訓(xùn)練,通過(guò)優(yōu)化訓(xùn)練集,來(lái)改善結(jié)果集,從而獲得自己想要的結(jié)果。2.1.5PEEWEEORMPEEWEE是python中常用的數(shù)據(jù)庫(kù)映射模塊,是一個(gè)輕量級(jí)的ORM,即對(duì)象關(guān)系映射(ObjectRelationalMapping,簡(jiǎn)稱(chēng)ORM)。其特點(diǎn)是通過(guò)映射關(guān)系對(duì)數(shù)據(jù)進(jìn)行操作,使得對(duì)各類(lèi)數(shù)據(jù)庫(kù)能夠?qū)崿F(xiàn)兼容,通過(guò)映射來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種操作,使用戶(hù)對(duì)于數(shù)據(jù)庫(kù)的使用成本大大降低。

2.2系統(tǒng)需求及分析

網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的開(kāi)發(fā)是否成功取決于系統(tǒng)能否實(shí)現(xiàn)用戶(hù)定制功能,達(dá)到預(yù)期設(shè)計(jì)目的。因此,在網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)開(kāi)發(fā)前,需要對(duì)該系統(tǒng)需求加以詳盡分析,從而對(duì)整體設(shè)計(jì)有一個(gè)清晰的思路。目前,普遍適用的爬蟲(chóng)系統(tǒng)都是模塊化的。模塊化的程序設(shè)計(jì)有利于代碼塊的測(cè)試與維護(hù),而且也進(jìn)一步增加了代碼的適用性。在此基礎(chǔ)上,只要對(duì)各個(gè)模塊進(jìn)行組合,就能夠構(gòu)建出一個(gè)完整的爬蟲(chóng)系統(tǒng)。本文以獲取學(xué)院教務(wù)系統(tǒng)中的課程表為例,開(kāi)展模塊化的編程設(shè)計(jì)。由于爬取教務(wù)系統(tǒng)中的數(shù)據(jù)前需要進(jìn)行登錄操作,所以想要獲取系統(tǒng)中的相應(yīng)信息就必須解決如何登錄的問(wèn)題,包括如何自動(dòng)填入用戶(hù)賬戶(hù)和密碼、如何自動(dòng)識(shí)別驗(yàn)證碼等問(wèn)題[5-6]。

2.3爬蟲(chóng)設(shè)計(jì)

2.3.1爬蟲(chóng)模塊介紹要爬取頁(yè)面的信息需要借助相應(yīng)的爬蟲(chóng)模塊,本文所使用到的模塊包括:requests,python中常用的發(fā)起網(wǎng)絡(luò)請(qǐng)求的模塊;Scrapy,python中最主流的爬蟲(chóng)框架;peewee,輕量級(jí)ORM框架,用于python和Mysql等數(shù)據(jù)庫(kù)的映射操作;selenuim,用于網(wǎng)頁(yè)測(cè)試的模塊,使用該模塊來(lái)實(shí)現(xiàn)模擬登陸的環(huán)節(jié);Pillow,python中常用的圖片處理模塊,使用該模塊對(duì)驗(yàn)證碼進(jìn)行處理;Tesseract,python中圖像識(shí)別的模塊,利用OCR光學(xué)字符識(shí)別對(duì)驗(yàn)證碼進(jìn)行識(shí)別。

2.3.2流程分析(1)使用selenium模塊調(diào)用瀏覽器打開(kāi)指定頁(yè)面,利用Xpath定位到用戶(hù)名和密碼輸入框,并通過(guò)send_key()方法,填入用戶(hù)名和密碼。(2)使用Pillow模塊配合selenuim截取頁(yè)面中的驗(yàn)證碼部分,通過(guò)Pillow對(duì)登陸驗(yàn)證碼進(jìn)行預(yù)處理。(3)使用Tesseract-OCR對(duì)驗(yàn)證碼進(jìn)行識(shí)別。(4)登陸到頁(yè)面后保存Cookie和session,通過(guò)requests獲取目標(biāo)信息。(5)通過(guò)peewee框架將獲取到的內(nèi)容存放到Mysql。數(shù)據(jù)爬取流程如圖1所示。

3系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

為整合校內(nèi)各平臺(tái)數(shù)據(jù)資源,降低數(shù)據(jù)孤島的影響,減少學(xué)生因校內(nèi)平臺(tái)眾多所帶來(lái)的不必要的操作,開(kāi)發(fā)一款針對(duì)學(xué)生的信息管理微信小程序,使得學(xué)生們只需要通過(guò)手機(jī)移動(dòng)端,便能獲取到校內(nèi)各平臺(tái)數(shù)據(jù)。數(shù)據(jù)獲取作為小程序構(gòu)建最重要的核心內(nèi)容,將通過(guò)數(shù)據(jù)爬蟲(chóng)的方式進(jìn)行獲取。本文以爬取教務(wù)系統(tǒng)中的學(xué)生課程表為例。學(xué)校的教務(wù)網(wǎng)站需要用戶(hù)登錄以后才能獲取相應(yīng)用戶(hù)的信息,并且該網(wǎng)站的登陸驗(yàn)證采用的是4位數(shù)字加英文混合的驗(yàn)證碼的驗(yàn)證模式。為了解決用戶(hù)自動(dòng)登陸的問(wèn)題,其中如何能夠準(zhǔn)確地識(shí)別驗(yàn)證碼將會(huì)是一個(gè)重點(diǎn)。登陸到頁(yè)面后,需要獲取目標(biāo)信息——課程表。通過(guò)requests請(qǐng)求系統(tǒng)中的課程表頁(yè)面URL獲取相關(guān)的信息,通過(guò)對(duì)頁(yè)面的分析,對(duì)目標(biāo)頁(yè)面發(fā)起請(qǐng)求,需要包含相關(guān)的cookie和header,否則將無(wú)法從目標(biāo)頁(yè)面獲取想要的信息[7-9]。

3.1登錄信息設(shè)計(jì)

登錄信息主要涉及到登錄頁(yè)面中的用戶(hù)名、用戶(hù)密碼以及驗(yàn)證,只有三者皆輸入正確后,才可以登錄到后臺(tái)的頁(yè)面。其中用戶(hù)名和密碼為確定值,而驗(yàn)證碼是一個(gè)隨機(jī)值,在解決自動(dòng)登陸的環(huán)節(jié)中,主要是解決驗(yàn)證碼的問(wèn)題。首先通過(guò)selenium操控瀏覽器打開(kāi)教務(wù)系統(tǒng)網(wǎng)站,通過(guò)Xpath快速定位到網(wǎng)頁(yè)中的用戶(hù)名、密碼和驗(yàn)證碼的輸入框。通過(guò)send_key()方法,將相關(guān)信息傳入輸入框內(nèi),驗(yàn)證的值則需使用第三方庫(kù)進(jìn)行機(jī)器識(shí)別。

3.2驗(yàn)證碼處理設(shè)計(jì)

驗(yàn)證碼圖片是頁(yè)面代碼動(dòng)態(tài)生成,只能通過(guò)selenium定位元素,并配合pillow的crop()方法進(jìn)行截取。由于截取到的二維碼背景帶有感染,直接通過(guò)機(jī)器識(shí)別會(huì)降低識(shí)別率,所以要對(duì)圖片進(jìn)行預(yù)處理。通過(guò)pillow模塊將截取的二維碼圖片進(jìn)行二值化處理。圖像的二值化,就是將圖像上的像素點(diǎn)的灰度值兩極分化(設(shè)置為0或255,0表示黑,255表示白),也就是將整個(gè)圖像呈現(xiàn)出明顯的只有黑和白的視覺(jué)效果。目的是加深字符與背景的顏色差,便于Tesseract的識(shí)別和分割。對(duì)于閾值的選取,使用0和255的平均值。并通過(guò)處理再將背景的干擾項(xiàng)進(jìn)一步清除,如圖2所示。將預(yù)處理完的圖片交由Tesseract-OCR進(jìn)行機(jī)器識(shí)別[10]。

3.3信息獲取設(shè)計(jì)

登陸進(jìn)系統(tǒng)后,獲取到頁(yè)面的cookie_jar,準(zhǔn)備對(duì)目標(biāo)信息進(jìn)行獲取,通過(guò)requests的get方法對(duì)目標(biāo)url發(fā)起請(qǐng)求并攜帶相應(yīng)的cookie信息,以獲取需要的信息。但實(shí)際操作發(fā)現(xiàn),并不能返回正確的結(jié)果。通過(guò)對(duì)網(wǎng)頁(yè)的分析發(fā)現(xiàn),在發(fā)起requests請(qǐng)求除了要攜帶cookie外,還需要有相應(yīng)的header的referer信息。通過(guò)request攜帶相應(yīng)的cookie和header后,便從目標(biāo)url中獲取到想要的數(shù)據(jù)。

3.4信息處理

通過(guò)scrapy爬蟲(chóng)框架,對(duì)目標(biāo)url發(fā)起requsets請(qǐng)求獲取想要的數(shù)據(jù),將獲取到信息通過(guò)輕量級(jí)ORM的框架peewee,存儲(chǔ)到目標(biāo)Mysql中。

4結(jié)束語(yǔ)

本文以爬取學(xué)校教務(wù)系統(tǒng)數(shù)據(jù)據(jù)為例,介紹了模擬登陸爬取數(shù)據(jù)的程序設(shè)計(jì),并作為學(xué)生信息系統(tǒng)微信小程序的數(shù)據(jù)來(lái)源。該系統(tǒng)通過(guò)爬蟲(chóng)獲取數(shù)據(jù)構(gòu)建,解決了學(xué)校平臺(tái)眾多、數(shù)據(jù)孤立不互通等問(wèn)題,幫助學(xué)生們減少了許多不必要的操作,在小程序中集中數(shù)據(jù)呈現(xiàn)給學(xué)生,方便操作。

參考文獻(xiàn)

[1]陳紅菊.高職院校學(xué)生綜合信息管理系統(tǒng)的設(shè)計(jì)和應(yīng)用.科技展望,2016,26(24):150,152

[2]葛秀峰,戴志鋒.基于微信小程序的“掌上經(jīng)院”校園服務(wù)平臺(tái).科技創(chuàng)新與應(yīng)用,2020(08):80-81

[3]胡玉峰.基于微信的校園信息服務(wù)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[碩士學(xué)位論文].蘭州交通大學(xué),蘭州,2015

[4]樊濤,趙征,劉敏娟.基于Selenium的網(wǎng)絡(luò)爬蟲(chóng)分析與實(shí)現(xiàn).電腦編程技巧與維護(hù),2019(09):155-156,170

[5]劉波,黃情琴,李鑫科,劉連滴,蘇澤利,余文森.微信校園便捷服務(wù)平臺(tái)的開(kāi)發(fā)與實(shí)現(xiàn).現(xiàn)代信息科技,2019,3(22):86-88,91

[6]邵亞麗,黃菲,黃宇涵,陳曉純.基于微信小程序的校園心理服務(wù)系統(tǒng).計(jì)算機(jī)時(shí)代,2020(02):33-35

[7]王海玲,周志彬.基于Scrapy框架的爬蟲(chóng)設(shè)計(jì).軟件導(dǎo)刊,2020,19(04):224-228

[8]常逢佳,李宗花,文靜,常逢錦.基于Python的招聘數(shù)據(jù)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn).軟件導(dǎo)刊,2019,18(12):130-133

[9]莊旭菲,田雪.基于Scrapy和Elasticsearch的校園網(wǎng)搜索引擎的研究與實(shí)現(xiàn).科技資訊,2019,17(29):12-15

[10]潘浩,李蘭.基于Tesseract引擎樣本訓(xùn)練的驗(yàn)證碼識(shí)別.信息與電腦(理論版),2020,32(01):138-139,142

作者:郝佳睿 單位:廣東食品藥品職業(yè)學(xué)院軟件學(xué)院