• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      全國高職專業(yè)點數(shù)據(jù)爬蟲的設(shè)計與實現(xiàn)

      2021-07-31 07:38:46鄧子云
      南方職業(yè)教育學刊 2021年1期
      關(guān)鍵詞:數(shù)據(jù)項爬蟲中間件

      鄧子云

      (長沙商貿(mào)旅游職業(yè)技術(shù)學院 湘商學院,湖南 長沙 410116)

      為能用大數(shù)據(jù)技術(shù)分析全國高等職業(yè)教育(以下簡稱“高職”)專業(yè)點布局的規(guī)律與存在的問題,需要先獲得全國高職專業(yè)點的設(shè)置數(shù)據(jù)。在全國職業(yè)院校專業(yè)設(shè)置管理與公共信息服務(wù)平臺(http://zyyxzy.moe.edu.cn)中,已經(jīng)收集了全國高職專業(yè)點設(shè)置的數(shù)據(jù)和專業(yè)名錄,該平臺中的數(shù)據(jù)面向互聯(lián)網(wǎng)公開。因此,可以設(shè)計出一種爬蟲來爬取這些數(shù)據(jù)。

      一、爬蟲的架構(gòu)設(shè)計

      爬蟲的架構(gòu)設(shè)計包括功能架構(gòu)和技術(shù)架構(gòu)兩個部分[1]。目前關(guān)于爬蟲的設(shè)計已有成熟穩(wěn)定的框架系統(tǒng),因此沒有必要再從技術(shù)底層開始全面開發(fā)爬蟲[2]??晒┻x擇的爬蟲框架系統(tǒng)有基于Java語言的Crawler4j[3]、基于Python語言的Scrapy[4]??紤]到后續(xù)作大數(shù)據(jù)處理仍然采用Python語言,且Python語言開發(fā)簡便、快捷,因此選用Scrapy作為爬蟲開發(fā)的框架[5]。

      (一)功能架構(gòu)

      從功能需求出發(fā),結(jié)合Scrapy框架,應(yīng)當實現(xiàn)如圖1所示的功能:1.需要爬取專業(yè)設(shè)置點的數(shù)據(jù);2.需要爬取專業(yè)名錄數(shù)據(jù);3.需要對爬行過程中的異常作出處理;4.為應(yīng)對反爬蟲系統(tǒng)需要作爬蟲偽裝;5.將爬取的數(shù)據(jù)存儲到數(shù)據(jù)庫中;6.設(shè)計并實現(xiàn)高職專業(yè)數(shù)據(jù)庫系統(tǒng)。

      圖1 爬蟲的功能架構(gòu)

      (二)技術(shù)架構(gòu)

      爬蟲在爬取網(wǎng)站(http://zyyxzy.moe.edu.cn)的頁面數(shù)據(jù)后,用XPath表達式[6]從網(wǎng)頁中提取到專業(yè)點和專業(yè)名錄數(shù)據(jù),填充到數(shù)據(jù)項SpecialitiesItem和數(shù)據(jù)項SpecialitiyDictItem中,這兩個數(shù)據(jù)項分別表示專業(yè)點和專業(yè)名錄。再通過項目管道SpecialityDataPipeline將數(shù)據(jù)項中的數(shù)據(jù)存儲到數(shù)據(jù)庫的表中。

      從技術(shù)架構(gòu)來看,Scrapy核心引擎、調(diào)度器、下載器、爬蟲的爬行功能在技術(shù)上不需要再行開發(fā)[7],利用Scrapy框架中已有的功能模塊即可。結(jié)合爬蟲的功能架構(gòu)和技術(shù)架構(gòu),還應(yīng)在技術(shù)上實現(xiàn)以下技術(shù)模塊(見圖2):

      圖2 爬蟲的技術(shù)框架

      1.高職專業(yè)數(shù)據(jù)庫

      設(shè)計Specialities表、SpecialitiyDict表等的ER(Entity Relation)關(guān)系,并用SQL(Structed Query Language)語句完成表創(chuàng)建、記錄插入、記錄修改、記錄刪除等操作。數(shù)據(jù)庫采用了SQL Server 2017。

      2.項目管道

      項目管道(SpecialityData Pipline)用于封裝對數(shù)據(jù)庫的操作,在其中要設(shè)計并實現(xiàn)設(shè)置數(shù)據(jù)庫的連接參數(shù)、用連接池獲得數(shù)據(jù)連接、釋放數(shù)據(jù)庫連接、執(zhí)行SQL語句等功能[8]。

      3.數(shù)據(jù)項

      數(shù)據(jù)項(SpecialitiesItem和SpecialityDictItem)用于封裝由爬取到的數(shù)據(jù)構(gòu)成的數(shù)據(jù)結(jié)構(gòu),常用一個數(shù)據(jù)項來對應(yīng)數(shù)據(jù)庫中的一個表。

      4.網(wǎng)站爬蟲

      通過設(shè)定爬蟲(CrawlPages Spider)的爬取方向,可分別爬取專業(yè)設(shè)置點和專業(yè)名錄數(shù)據(jù)。

      5.異常處理中間件

      中間件(ExceptMiddeware)對Scrapy框架捕獲到的各種異常進行處理[9]。

      6.偽裝中間件

      中間件(AgentMiddeware)將爬蟲偽裝成各種瀏覽器爬取數(shù)據(jù)。

      7.Scrapy配置

      對Scrapy框架進行配置,主要配置項包括數(shù)據(jù)庫連接參數(shù)、異常處理中間件的類等[10]。

      二、數(shù)據(jù)庫設(shè)計與實現(xiàn)

      從前述分析來看,關(guān)鍵的兩個數(shù)據(jù)表是專業(yè)點設(shè)置表、專業(yè)名錄表,再看這些表中哪些數(shù)據(jù)可以作分類或用數(shù)值代替字符串,以降低存儲并提升數(shù)據(jù)的范式。為此,設(shè)計ER圖如圖3所示。

      (一)ER圖

      從圖3可以看出,數(shù)據(jù)庫中設(shè)計了6個表,表與表之間存在依賴關(guān)系。專業(yè)點表中記錄了編號、專業(yè)點設(shè)置的省份代碼,以及設(shè)置專業(yè)點的學校的代碼、專業(yè)代碼、專業(yè)學習年限、專業(yè)點備案年份等字段。專業(yè)點表通過專業(yè)代碼與專業(yè)名錄表關(guān)聯(lián),通過設(shè)置專業(yè)點的省份代碼與省份表關(guān)聯(lián),通過設(shè)置專業(yè)點的學校的代碼與學校表關(guān)聯(lián)。

      圖3 ER圖

      專業(yè)名錄表中的專業(yè)代碼可以拆分成大類、二級類和二級類中的專業(yè)編號,該表中還有專業(yè)名稱和開設(shè)年份字段。因此通過專業(yè)代碼可以關(guān)聯(lián)專業(yè)大類表、專業(yè)二級類表,一個專業(yè)二級類又屬于某一個專業(yè)大類。

      (二)表及其字段

      根據(jù)圖3所示的設(shè)計思路,可設(shè)計出SQL Server 2017中的表,如表1所示。

      表1 SQL Server 2017中表的實現(xiàn)

      續(xù)表

      三、爬蟲的設(shè)計與實現(xiàn)

      根據(jù)前述技術(shù)架構(gòu)的設(shè)計,爬蟲還需要設(shè)計與實現(xiàn)項目管道、數(shù)據(jù)項、網(wǎng)站爬蟲、異常處理中間件、偽裝中間件,并對這些技術(shù)模塊作出配置。

      (一)項目管道

      在項目管理中可使用twisted.enterprise的adbapi模塊[11]來作數(shù)據(jù)庫的建立連接、關(guān)閉連接操作,以及執(zhí)行SQL語句(包括插入、增加、刪除、修改)操作。

      應(yīng)在啟動爬蟲時建立數(shù)據(jù)庫連接池,代碼如下:

      應(yīng)在關(guān)閉爬蟲時關(guān)閉數(shù)據(jù)庫連接池,代碼如下:

      應(yīng)在項目管道收到數(shù)據(jù)項后,即可調(diào)用執(zhí)行插入數(shù)據(jù)庫數(shù)據(jù)的代碼:

      (二)數(shù)據(jù)項

      數(shù)據(jù)項封裝了從網(wǎng)頁中爬取的數(shù)據(jù),并可用于通過項目管道操作數(shù)據(jù)庫中的數(shù)據(jù)[13]。為簡化起見,只需要設(shè)計實現(xiàn)2個數(shù)據(jù)項即可,即數(shù)據(jù)項SpecialitiesItem和數(shù)據(jù)項SpecialitiyDictItem。這兩個數(shù)據(jù)項的代碼如下:

      (三)網(wǎng)站爬蟲

      為了爬取網(wǎng)站中的數(shù)據(jù),需要專門設(shè)計一個爬蟲類。這個爬蟲類中的代碼相對其他技術(shù)模塊的代碼較為復雜。

      要爬取專業(yè)點的設(shè)置數(shù)據(jù),可分析其網(wǎng)址(http://zyyxzy.moe.edu.cn/mspMajorRegisterActi on.fo?method=index&startcount=100),如圖4所示。

      圖4 要爬取數(shù)據(jù)的頁面

      在網(wǎng)址中通過startcount參數(shù)表示當前頁的專業(yè)點數(shù)據(jù)的起始號,每頁顯示100條專業(yè)點數(shù)據(jù)。但還有年份參數(shù)是通過表單提交的。因此不僅要在網(wǎng)址中帶入每頁數(shù)據(jù)的起始號,還需要生成一個表單,在表單中設(shè)置專業(yè)備案的年份。

      爬取2016—2020年專業(yè)點數(shù)據(jù)的代碼如下:

      在返回數(shù)據(jù)項后,Scrapy框架會自動通過項目管道向數(shù)據(jù)庫中作數(shù)據(jù)操作。

      要爬取專業(yè)名錄的數(shù)據(jù),相對爬取專業(yè)點的設(shè)置更為簡單。

      在專業(yè)名錄網(wǎng)址(http://zyyxzy.moe.edu.cn/msp MajorGzAction.fo?method=list&startcount=100)中通過startcount參數(shù)表示當前頁的專業(yè)點數(shù)據(jù)的起始號,每頁顯示100條專業(yè)點數(shù)據(jù)。專業(yè)名錄的網(wǎng)頁無需用表單來提交數(shù)據(jù),也不需要傳入年份參數(shù)??紤]相對較為簡單,不再贅述和重復列出爬取專業(yè)名錄數(shù)據(jù)的源代碼。

      (四)異常處理中間件

      爬取處理中間件的作用是及時捕獲異常并報錯,但并不中止爬蟲的運行。要處理的異常如下:

      (五)偽裝中間件

      比較簡單的實現(xiàn)偽裝中間件的做法是用一個集合列出所有準備偽裝的瀏覽器的名稱:

      然后再隨機的選擇其中的一個瀏覽器名稱,放入到請示頁面時的頭部中:

      四、爬取效果

      使用爬蟲爬取到了全國職業(yè)院校專業(yè)設(shè)置管理與公共信息服務(wù)平臺中2016—2020年的專業(yè)點設(shè)置數(shù)據(jù)和專業(yè)名錄數(shù)據(jù),其中專業(yè)點設(shè)置數(shù)據(jù)如圖5所示,總共爬取到275,873條專業(yè)點設(shè)置數(shù)據(jù)和770條專業(yè)名錄數(shù)據(jù)。

      圖5 全國專業(yè)點的數(shù)量和增長率

      以爬取的數(shù)據(jù)為基礎(chǔ),可以進一步開展全國專業(yè)點布局的大數(shù)據(jù)分析。下面給出兩個分析示例。

      (一)全國專業(yè)點布局

      可根據(jù)爬取到的各省設(shè)置專業(yè)點的數(shù)量情況得出布局的一些明顯規(guī)律。其中,2020年全國形成了“三核一X”的形態(tài),即三個專業(yè)點核心圈為四川、廣東、四省(江蘇、安徽、山東、河南),一個“X”形狀的隔離帶把三個核心圈隔離開來。

      (二)專業(yè)點集中度

      經(jīng)大數(shù)據(jù)分析發(fā)現(xiàn)專業(yè)點數(shù)高度集中。排名前50名的專業(yè)的專業(yè)點數(shù)占所有專業(yè)的專業(yè)點總數(shù)的比例在2020年為50.97%,其中排名前10名的專業(yè)如表2所示。在2020年總共有779個專業(yè),前50名的專業(yè)的專業(yè)點數(shù)就超過了一半,6.42%的專業(yè)的專業(yè)點數(shù)占了所有專業(yè)點總數(shù)的50.97%。

      表2 2020年點數(shù)排名前10名的專業(yè)

      2020年,在779個專業(yè)中,全國有216個專業(yè)的專業(yè)點數(shù)低于或等于5個,這216個專業(yè)中有41個專業(yè)已沒有專業(yè)點,41個專業(yè)的專業(yè)點數(shù)僅1個,33個專業(yè)的專業(yè)點數(shù)僅2個。

      五、結(jié)語

      從全國高職專業(yè)點設(shè)置數(shù)據(jù)爬蟲的設(shè)計與實現(xiàn)來看,使用Scrapy框架研發(fā)的爬蟲系統(tǒng)代碼簡潔,不需要再行開發(fā)下載網(wǎng)頁、下載調(diào)度等方面的功能,可以讓研發(fā)人員有更多的精力專注于業(yè)務(wù)相關(guān)的代碼的研發(fā)。該爬蟲在功能架構(gòu)上有6個功能模塊的需求,在技術(shù)架構(gòu)上實現(xiàn)了7個技術(shù)模塊,在數(shù)據(jù)庫中用6個表來存儲數(shù)據(jù),設(shè)計與實現(xiàn)了項目管道、數(shù)據(jù)項、網(wǎng)站爬蟲、異常處理中間件、偽裝中間件等技術(shù)模塊。該爬蟲總共爬取了275,873條專業(yè)點設(shè)置數(shù)據(jù)和770條專業(yè)名錄數(shù)據(jù),用來作全國專業(yè)點布局的大數(shù)據(jù)分析。

      猜你喜歡
      數(shù)據(jù)項爬蟲中間件
      利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
      基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
      一種多功能抽簽選擇器軟件系統(tǒng)設(shè)計與實現(xiàn)
      甘肅科技(2020年19期)2020-03-11 09:42:42
      非完整數(shù)據(jù)庫Skyline-join查詢*
      基于Python的Asterix Cat 021數(shù)據(jù)格式解析分析與實現(xiàn)
      RFID中間件技術(shù)及其應(yīng)用研究
      電子制作(2018年14期)2018-08-21 01:38:10
      基于VanConnect中間件的設(shè)計與開發(fā)
      電子測試(2018年10期)2018-06-26 05:54:02
      利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      中間件在高速公路領(lǐng)域的應(yīng)用
      九江县| 门源| 洛扎县| 始兴县| 津南区| 阳江市| 民勤县| 广平县| 崇明县| 曲阜市| 新和县| 苗栗县| 繁峙县| 东兰县| 富平县| 陆良县| 雅江县| 西林县| 乐昌市| 牙克石市| 固阳县| 鄂伦春自治旗| 泰兴市| 万全县| 天祝| 大余县| 营口市| 桃园县| 老河口市| 沛县| 于田县| 信丰县| 卓尼县| 汉川市| 霍州市| 加查县| 太原市| 武穴市| 博客| 墨江| 保定市|