999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Scrapy的研招網碩士目錄爬蟲的設計與實現

2022-08-31 22:04:58伍高巍劉杰葛曉龍徐望成
電腦知識與技術 2022年17期

伍高巍 劉杰 葛曉龍 徐望成

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

關鍵詞:網絡爬蟲;Scrapy;Python;反反爬;研招網

中圖分類號:TP311.11? ? ? 文獻標識碼:A

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

1 引言

隨著信息技術與互聯網的發展,人們幾乎在生活中每時每刻都在產生著數據也不斷在獲取數據,但是由于互聯網的網狀結構是數據零零散散地發布在不同的區域,很難實現數據系統化結構化的有效利用。人們繼續采用以往的常規方式去收集數據的話,不僅速度慢而且效率低,由此網絡爬蟲技術就誕生了。網絡爬蟲可以通過分析網頁的基本結構及其特點,通過相關選擇器從而獲取網站的指定信息。

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

2 Scrapy爬蟲設計

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

2.1 爬取對象的分析

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

其中對研招網碩士目錄分析網頁請求結構,通過瀏覽器的檢查工具可知。首先由瀏覽器對https://yz.chsi.com.cn/zsml/queryAction.do發送post請求,并且攜帶的數據如表1所示。

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

2.2 Scrapy概述

Python語言擁有許許多多的第三方爬蟲庫,如Scrapy、pyspider、crawley等[1]。其中Scrapy爬蟲框架應用最為廣泛。Scrapy框架采用Python語言設計而成,擁有twisted的特點,能夠很好地實現異步爬取網頁相關內容,快速而又十分便捷[2]。通過Scrapy爬蟲框架支持自定義中間件結構,從而實現對爬蟲數據的個性化處理。

2.3 Scrapy 基本架構

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

1)引擎主要負責數據在Scrapy中的流動。

2)調度器主要負責處理來自引擎的請求。

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

4)爬蟲主要負責提取符合由開發者編寫的提取規則的字段。

5)管道主要負責對相關字段的處理。

6)下載中間件是位于下載器與引擎之間的結構,主要負責數據在引擎與下載器中間流動過程的處理。

7)爬蟲中間件是位于爬蟲與引擎之間的結構,主要負責數據在引擎流與爬蟲中間流動過程的處理。

2.4 爬蟲總體架構設計

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

網頁信息抓取模塊首先根據定義的URL地址分析網頁element結構,再根據由開發者自定義的XPath提取相關字段。

中間件模塊負責通過User-Agent偽裝,代理IP等技術實現反反爬。

數據處理模塊將對爬蟲爬取的數據進行相關處理,然后在MySQL數據庫中實現持久化存儲。

2.5 數據流控制

Scrapy對研招網碩士目錄數據流的控制如下:

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

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

3)調度器將請求提交給引擎。

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

5)下載器獲得相應的院校頁的響應數據,并提交給引擎處理。

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

7)爬蟲通過相關的提取規則得到招考信息頁的url,并放入調度器中。

8)調度器將請求提交給引擎。

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

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

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

12)爬蟲爬取相關信息。

2.6 爬蟲字段的設計

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

2.7 爬蟲策略的設計

其中Scrapy爬蟲采用深度優先爬蟲策略[5]設計如下:

1)首先用戶自定義相關參數。

2)爬蟲獲取start_url。

3)分析當前頁的網頁結構與特點,根據用戶自定義爬取規則爬取當前目錄頁的相關數據。

4)跳轉至院校頁。

5)分析當前頁的網頁結構與特點,根據用戶自定義爬取規則爬取當前院校頁的相關數據。

6)跳轉至招考信息頁。

7)分析當前頁的網頁結構與特點,根據用戶自定義爬取規則爬取當前招考信息頁的相關數據。

8)將相關數據存入數據庫中。

9)返回院校頁。

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

11)判斷是否存在下一頁,若存在下一頁,則請求翻頁處理,并執行步驟3,直至不存在下一頁;若不存在下一頁,則將數據導出為Excel文件,程序結束。

示意圖如圖2所示。

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

2.8 反反爬策略的設計

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

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

當同一個IP地址連續多次發送請求時,服務器也會認為此請求為爬蟲發出的,也會對其進行封禁處理[8]。為了規避服務器對爬蟲的封禁,采用了代理IP,通過每發送一次網絡請求,變更一次IP地址,從而使服務器認為是由多個來自不同的計算機對其發送的網絡請求。

2.9 持久化存儲

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

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

3 結束語

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

參考文獻:

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

[2] 孫瑜.基于Scrapy框架的網絡爬蟲系統的設計與實現[D].北京:北京交通大學,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框架的網絡爬蟲實現與數據抓取分析[D].長春:吉林大學,2017.

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

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

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

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

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

收稿日期:2022-03-16

基金項目:2020年湖南省大學生實踐創新訓練項目:校園東街微信小程序的設計與開發(項目編號:S202010555141)

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

主站蜘蛛池模板: 欧美成人精品欧美一级乱黄| 亚洲色图欧美视频| 91麻豆精品国产91久久久久| 欧美伦理一区| 精品国产免费观看| 国产成人一区| 国产91视频免费观看| 一级一级特黄女人精品毛片| 欧美日韩国产在线人成app| 久久精品无码专区免费| 国产va欧美va在线观看| 久久婷婷五月综合色一区二区| 久久精品电影| 亚洲精品国偷自产在线91正片 | 成人精品免费视频| 国产成人夜色91| 福利片91| 色噜噜狠狠色综合网图区| 色综合久久久久8天国| 亚洲啪啪网| 色综合网址| 婷婷激情五月网| 国产成人精品免费视频大全五级| 99久久成人国产精品免费| 欧洲熟妇精品视频| 久久黄色视频影| AV无码一区二区三区四区| 国产女人喷水视频| 无遮挡一级毛片呦女视频| 思思热在线视频精品| 天天操精品| 五月婷婷丁香综合| 日韩精品一区二区三区免费在线观看| 欧美高清日韩| 黄片一区二区三区| 久久免费精品琪琪| 国产日韩欧美成人| 福利在线不卡| V一区无码内射国产| 国产美女主播一级成人毛片| 亚洲精品福利视频| 国产成人综合网在线观看| 欧美另类图片视频无弹跳第一页| 日韩成人在线网站| 成人一级免费视频| 99国产精品一区二区| 高清不卡毛片| 国产精品私拍在线爆乳| 老司机精品一区在线视频 | 色综合久久无码网| 亚洲精品免费网站| 欧美激情一区二区三区成人| 国产sm重味一区二区三区| 97se亚洲综合在线| 国产经典三级在线| 日韩黄色在线| 国产高清无码麻豆精品| 国产成年无码AⅤ片在线| 欧美精品v日韩精品v国产精品| 国产精品久久久久婷婷五月| 五月婷婷综合色| 日韩午夜伦| 少妇露出福利视频| 亚洲va视频| 无码网站免费观看| 日韩欧美中文字幕一本| 狠狠干综合| 亚洲制服丝袜第一页| 国产成人调教在线视频| 91久久国产成人免费观看| 日韩中文精品亚洲第三区| 97视频在线精品国自产拍| 久久性妇女精品免费| 日韩无码黄色| 福利姬国产精品一区在线| 99热国产这里只有精品无卡顿"| 最新亚洲人成无码网站欣赏网 | 亚洲欧美成人在线视频| 国产精品yjizz视频网一二区| 婷婷伊人五月| 91精品国产麻豆国产自产在线 | 欧美精品综合视频一区二区|