• 
    

    
    

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

      基于Scrapy的研招網(wǎng)碩士目錄爬蟲的設(shè)計與實現(xiàn)

      2022-08-31 22:04:58伍高巍劉杰葛曉龍徐望成
      電腦知識與技術(shù) 2022年17期
      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲

      伍高巍 劉杰 葛曉龍 徐望成

      摘要:研招網(wǎng)作為中國最大的研究生招考信息公布平臺,資源豐富。目前主流的爬蟲框架有Scrapy、pyspider與crawley,其中Scrapy為目前最流行的爬蟲框架。因此,文中主要研究Python語言開發(fā)的開源爬蟲框架Scrapy所開發(fā)的爬蟲,對研招網(wǎng)碩士目錄進行爬取,舉例說明爬蟲如何應(yīng)對網(wǎng)站的反爬措施。

      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;Scrapy;Python;反反爬;研招網(wǎng)

      中圖分類號:TP311.11? ? ? 文獻標(biāo)識碼:A

      文章編號:1009-3044(2022)17-0053-03

      1 引言

      隨著信息技術(shù)與互聯(lián)網(wǎng)的發(fā)展,人們幾乎在生活中每時每刻都在產(chǎn)生著數(shù)據(jù)也不斷在獲取數(shù)據(jù),但是由于互聯(lián)網(wǎng)的網(wǎng)狀結(jié)構(gòu)是數(shù)據(jù)零零散散地發(fā)布在不同的區(qū)域,很難實現(xiàn)數(shù)據(jù)系統(tǒng)化結(jié)構(gòu)化的有效利用。人們繼續(xù)采用以往的常規(guī)方式去收集數(shù)據(jù)的話,不僅速度慢而且效率低,由此網(wǎng)絡(luò)爬蟲技術(shù)就誕生了。網(wǎng)絡(luò)爬蟲可以通過分析網(wǎng)頁的基本結(jié)構(gòu)及其特點,通過相關(guān)選擇器從而獲取網(wǎng)站的指定信息。

      研招網(wǎng)(yz.chsi.com.cn)是教育部全國碩士研究生招生考試網(wǎng)上報名和網(wǎng)上調(diào)劑指定網(wǎng)站,貫穿研究生招生宣傳、招生咨詢、報名管理、生源調(diào)劑、錄取檢查整個工作流程,實現(xiàn)了研究生招生信息管理一體化。

      2 Scrapy爬蟲設(shè)計

      研招網(wǎng)碩士碩士目錄(https://yz.chsi.com.cn/zsml/zyfx_search.jsp)提供了統(tǒng)一的按照學(xué)校、學(xué)科門類、學(xué)科類別等查詢方式,為廣大考生提供了許多年的優(yōu)質(zhì)服務(wù),但是由于不同院校的考試科目千差萬別,這導(dǎo)致無法按照考試科目進行查找相關(guān)院校成為了一大難題。我國具有招收研究生資格的院校往往都會在研招網(wǎng)上公布其當(dāng)年統(tǒng)考的招生人數(shù)以及考試課程,其中考試課程也分為統(tǒng)考科目與院校自主命題。為了更好地解決研究生考試擇校問題,本文對研招網(wǎng)碩士目錄進行了相關(guān)信息的爬取。

      2.1 爬取對象的分析

      其中研招網(wǎng)碩士目錄主要分為四個頁面,第一個為搜索頁,第二個為目錄頁,第三個為院校頁,第四個為招考信息頁。

      其中對研招網(wǎng)碩士目錄分析網(wǎng)頁請求結(jié)構(gòu),通過瀏覽器的檢查工具可知。首先由瀏覽器對https://yz.chsi.com.cn/zsml/queryAction.do發(fā)送post請求,并且攜帶的數(shù)據(jù)如表1所示。

      mldm與yjxkdm為必須選項,例如請求南華大學(xué)軟件工程全日制學(xué)碩的招考信息則需要向https://yz.chsi.com.cn/zsml/queryAction.do?ssdm=43&dwmc=南華大學(xué)&mldm=08&mlmc=&yjxkdm=0835&xxfs=1&zymc=軟件工程 發(fā)起網(wǎng)絡(luò)請求,其中?后面攜帶的為post請求所需要發(fā)送的參數(shù),通過其參數(shù)即可實現(xiàn)自定義查找。由此可以通過mldm=zyxw&yjxkdm=0854&xxfs=1 即可實現(xiàn)對全國所有招收全日制電子信息專業(yè)碩士的信息的查找。同理可以對下一頁的操作進行分析可以得知只需要攜帶一個pageno參數(shù)即可完成翻頁操作,如pageno=2即表示請求第二頁。

      2.2 Scrapy概述

      Python語言擁有許許多多的第三方爬蟲庫,如Scrapy、pyspider、crawley等[1]。其中Scrapy爬蟲框架應(yīng)用最為廣泛。Scrapy框架采用Python語言設(shè)計而成,擁有twisted的特點,能夠很好地實現(xiàn)異步爬取網(wǎng)頁相關(guān)內(nèi)容,快速而又十分便捷[2]。通過Scrapy爬蟲框架支持自定義中間件結(jié)構(gòu),從而實現(xiàn)對爬蟲數(shù)據(jù)的個性化處理。

      2.3 Scrapy 基本架構(gòu)

      Scarpy由引擎、調(diào)度器、下載器、爬蟲、管道、下載中間件、爬蟲中間件七大部分組成[3]。其中各組件的作用如下:

      1)引擎主要負責(zé)數(shù)據(jù)在Scrapy中的流動。

      2)調(diào)度器主要負責(zé)處理來自引擎的請求。

      3)下載器主要負責(zé)獲取網(wǎng)頁的信息并交給引擎進行處理。

      4)爬蟲主要負責(zé)提取符合由開發(fā)者編寫的提取規(guī)則的字段。

      5)管道主要負責(zé)對相關(guān)字段的處理。

      6)下載中間件是位于下載器與引擎之間的結(jié)構(gòu),主要負責(zé)數(shù)據(jù)在引擎與下載器中間流動過程的處理。

      7)爬蟲中間件是位于爬蟲與引擎之間的結(jié)構(gòu),主要負責(zé)數(shù)據(jù)在引擎流與爬蟲中間流動過程的處理。

      2.4 爬蟲總體架構(gòu)設(shè)計

      本文將爬蟲分為三個模塊即網(wǎng)頁信息抓取模塊、中間件模塊以及數(shù)據(jù)處理模塊[4]。

      網(wǎng)頁信息抓取模塊首先根據(jù)定義的URL地址分析網(wǎng)頁element結(jié)構(gòu),再根據(jù)由開發(fā)者自定義的XPath提取相關(guān)字段。

      中間件模塊負責(zé)通過User-Agent偽裝,代理IP等技術(shù)實現(xiàn)反反爬。

      數(shù)據(jù)處理模塊將對爬蟲爬取的數(shù)據(jù)進行相關(guān)處理,然后在MySQL數(shù)據(jù)庫中實現(xiàn)持久化存儲。

      2.5 數(shù)據(jù)流控制

      Scrapy對研招網(wǎng)碩士目錄數(shù)據(jù)流的控制如下:

      1)引擎從爬蟲中獲得一個初始請求即start_url(目錄頁的url地址)。

      2)爬蟲通過對字段的提取得到院校頁的url,并放入調(diào)度器中。

      3)調(diào)度器將請求提交給引擎。

      4)引擎通過下載中間件把相關(guān)請求提交給下載器處理。

      5)下載器獲得相應(yīng)的院校頁的響應(yīng)數(shù)據(jù),并提交給引擎處理。

      6)引擎將來自下載器的數(shù)據(jù)經(jīng)過爬蟲中間件提交給爬蟲處理。

      7)爬蟲通過相關(guān)的提取規(guī)則得到招考信息頁的url,并放入調(diào)度器中。

      8)調(diào)度器將請求提交給引擎。

      9)引擎通過下載中間件把相關(guān)請求提交給下載器處理。

      10)下載器獲得相應(yīng)的招考信息頁的響應(yīng)數(shù)據(jù),并提交給引擎處理。

      11)引擎將來自下載器的數(shù)據(jù)經(jīng)過爬蟲中間件提交給爬蟲處理。

      12)爬蟲爬取相關(guān)信息。

      2.6 爬蟲字段的設(shè)計

      設(shè)計爬取碩士目錄的學(xué)校名稱、學(xué)校所在地、招生院系、招生人數(shù)、考試科目、研究方向、指導(dǎo)老師、學(xué)科門類、學(xué)科類別、學(xué)習(xí)方式、招生專業(yè)、是否自劃線、是否擁有研究生院、是否擁有博士點。并采用Scrapy.Item的屬性定義在Items.py文件中。

      2.7 爬蟲策略的設(shè)計

      其中Scrapy爬蟲采用深度優(yōu)先爬蟲策略[5]設(shè)計如下:

      1)首先用戶自定義相關(guān)參數(shù)。

      2)爬蟲獲取start_url。

      3)分析當(dāng)前頁的網(wǎng)頁結(jié)構(gòu)與特點,根據(jù)用戶自定義爬取規(guī)則爬取當(dāng)前目錄頁的相關(guān)數(shù)據(jù)。

      4)跳轉(zhuǎn)至院校頁。

      5)分析當(dāng)前頁的網(wǎng)頁結(jié)構(gòu)與特點,根據(jù)用戶自定義爬取規(guī)則爬取當(dāng)前院校頁的相關(guān)數(shù)據(jù)。

      6)跳轉(zhuǎn)至招考信息頁。

      7)分析當(dāng)前頁的網(wǎng)頁結(jié)構(gòu)與特點,根據(jù)用戶自定義爬取規(guī)則爬取當(dāng)前招考信息頁的相關(guān)數(shù)據(jù)。

      8)將相關(guān)數(shù)據(jù)存入數(shù)據(jù)庫中。

      9)返回院校頁。

      10)判斷是否存在下一頁,若存在下一頁,則請求翻頁處理,并執(zhí)行步驟5,直至不存在下一頁;若不存在下一頁,則返回目錄頁。

      11)判斷是否存在下一頁,若存在下一頁,則請求翻頁處理,并執(zhí)行步驟3,直至不存在下一頁;若不存在下一頁,則將數(shù)據(jù)導(dǎo)出為Excel文件,程序結(jié)束。

      示意圖如圖2所示。

      其中為了實現(xiàn)對網(wǎng)頁中相關(guān)信息的提取,文章選用了XPath作為選擇器,XPath是一個輕量級的小型查詢語言[6]。如需獲得院校頁的url地址,可通過使用response.xpath(‘//tbody/tr//a/@href)來對具體學(xué)校的URL地址進行提取。

      2.8 反反爬策略的設(shè)計

      由于研招網(wǎng)具有一定的反反爬能力,為了實現(xiàn)對網(wǎng)站的正常訪問采用隨機User-Agent偽裝以及IP代理的方式來規(guī)避服務(wù)器對爬蟲對封禁。

      其中Scrapy默認(rèn)攜帶的請求頭為爬蟲的請求頭,服務(wù)器可以對其識別,并進行封禁處理[7]。本文設(shè)計了一個User-Agent池,User-Agent池中含有大量的User-Agent請求頭,并且通過random模塊中的choice方法與自定義中間件UserAgentProxyMiddlerware來實現(xiàn)對爬蟲User-Agent的隨機偽裝,從而實現(xiàn)使服務(wù)器認(rèn)為是瀏覽器發(fā)送的正常請求。

      當(dāng)同一個IP地址連續(xù)多次發(fā)送請求時,服務(wù)器也會認(rèn)為此請求為爬蟲發(fā)出的,也會對其進行封禁處理[8]。為了規(guī)避服務(wù)器對爬蟲的封禁,采用了代理IP,通過每發(fā)送一次網(wǎng)絡(luò)請求,變更一次IP地址,從而使服務(wù)器認(rèn)為是由多個來自不同的計算機對其發(fā)送的網(wǎng)絡(luò)請求。

      2.9 持久化存儲

      當(dāng)完成一次數(shù)據(jù)提取后,為了對數(shù)據(jù)進行持久化存儲,由此選用了關(guān)系型數(shù)據(jù)庫MySQL,并采用pymysql模塊作為程序與數(shù)據(jù)庫連接的中間橋梁,通過編寫SQL語句進行對數(shù)據(jù)庫的操作。并通過DownloadMiddleWare中的open_spider方法與close_spider方法實現(xiàn)對數(shù)據(jù)庫的連接與斷開[9]。其中open_spider方法與close_spider方法在同一個爬蟲程序中有且僅執(zhí)行一次。通過process_items方法將items存入MySQL數(shù)據(jù)庫中。

      同時可以采用編寫SQL語句的方式完成對數(shù)據(jù)庫中信息進行相關(guān)查詢工作,或者通過利用pandas模塊,將數(shù)據(jù)庫內(nèi)容導(dǎo)出為Excel文件進行查找或篩選。

      3 結(jié)束語

      本文通過設(shè)計了一個Scrapy爬蟲對研招網(wǎng)碩士目錄進行了相關(guān)信息的爬取,并進行了持久化存儲,支持使用SQL語句或者Excel來進行相關(guān)數(shù)據(jù)的查詢與篩選??梢允谷藗兺ㄟ^考試專業(yè)課對院校進行選擇。打破了研招網(wǎng)按學(xué)校查詢的思想,為考生提供了新的選擇。

      參考文獻:

      [1] 劉宇,鄭成煥.基于Scrapy的深層網(wǎng)絡(luò)爬蟲研究[J].軟件,2017,38(7):111-114.

      [2] 孫瑜.基于Scrapy框架的網(wǎng)絡(luò)爬蟲系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京交通大學(xué),2019.

      [3] Xie D X,Xia W F.Design and implementation of the topic-focused crawler based on scrapy[J].Advanced Materials Research,2013,850/851:487-490.

      [4] 安子建.基于Scrapy框架的網(wǎng)絡(luò)爬蟲實現(xiàn)與數(shù)據(jù)抓取分析[D].長春:吉林大學(xué),2017.

      [5] 劉世濤.簡析搜索引擎中網(wǎng)絡(luò)爬蟲的搜索策略[J].阜陽師范學(xué)院學(xué)報(自然科學(xué)版),2006,23(3):59-62.

      [6] 袁宇麗.基于HTML網(wǎng)頁的Web信息提取研究[D].成都:電子科技大學(xué),2006.

      [7] 陳輝.基于SCRAPY框架的網(wǎng)絡(luò)爬蟲封鎖技術(shù)破解研究[J].科技視界,2020(6):224-225.

      [8] 韓貝,馬明棟,王得玉.基于Scrapy框架的爬蟲和反爬蟲研究[J].計算機技術(shù)與發(fā)展,2019,29(2):139-142.

      [9] 鄭嵐.Python訪問MySQL數(shù)據(jù)庫[J].電腦編程技巧與維護,2010(6):59-61.

      收稿日期:2022-03-16

      基金項目:2020年湖南省大學(xué)生實踐創(chuàng)新訓(xùn)練項目:校園東街微信小程序的設(shè)計與開發(fā)(項目編號:S202010555141)

      作者簡介:伍高?。?000—),男,湖南婁底人,本科在讀,主要研究方向為軟件工程、計算機視覺等;劉杰(1974—),男,湖南衡陽人,副教授,博士,研究方向為軟件工程、可信軟件等;葛曉龍(2000—),男,河南濮陽人,本科在讀,研究方向為軟件工程等;徐望成(2000—),男,湖南衡陽人,本科在讀,研究方向為軟件工程等。

      猜你喜歡
      網(wǎng)絡(luò)爬蟲
      煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設(shè)計與實現(xiàn)
      基于社會網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁挖掘研究
      主題搜索引擎中網(wǎng)絡(luò)爬蟲的實現(xiàn)研究
      淺析如何應(yīng)對網(wǎng)絡(luò)爬蟲流量
      中國市場(2016年23期)2016-07-05 04:35:08
      網(wǎng)絡(luò)爬蟲針對“反爬”網(wǎng)站的爬取策略研究
      连州市| 南雄市| 莒南县| 荣昌县| 凉城县| 林周县| 湖北省| 龙川县| 原阳县| 扬中市| 宁德市| 大名县| 唐河县| 沁水县| 兴海县| 横峰县| 武汉市| 福州市| 潜江市| 牙克石市| 合水县| 信阳市| 山阴县| 辽宁省| 阿拉善左旗| 调兵山市| 贵溪市| 广东省| 许昌县| 宜城市| 宜兰县| 无锡市| 屯留县| 马山县| 乌兰县| 灵川县| 黄梅县| 宝丰县| 江永县| 阳春市| 米易县|