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)

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

主站蜘蛛池模板: 丁香亚洲综合五月天婷婷| 欧美亚洲国产一区| 国产美女自慰在线观看| 精品视频一区二区三区在线播| 高清亚洲欧美在线看| 国产精品无码久久久久AV| 国产99欧美精品久久精品久久| 婷婷激情亚洲| 精品少妇人妻一区二区| 国产高清在线观看| 亚洲成在线观看 | 亚洲人成网址| 婷婷五月在线| 51国产偷自视频区视频手机观看| 亚洲免费三区| 色噜噜狠狠色综合网图区| 亚洲日韩精品欧美中文字幕| 午夜国产精品视频黄 | 91精品国产丝袜| 99色亚洲国产精品11p| 日本a∨在线观看| 在线观看网站国产| 在线五月婷婷| 欧美在线国产| 亚洲不卡av中文在线| 亚洲Aⅴ无码专区在线观看q| 国产美女一级毛片| 国产三级视频网站| 超清无码一区二区三区| 国产精品免费电影| 一本色道久久88| 亚洲AV免费一区二区三区| 九九热精品在线视频| 无码AV日韩一二三区| 永久在线精品免费视频观看| 毛片视频网| 午夜性爽视频男人的天堂| 欧美成人影院亚洲综合图| 亚洲手机在线| 久久久波多野结衣av一区二区| 国产欧美网站| 伊人久久影视| 国产手机在线ΑⅤ片无码观看| 人妻丝袜无码视频| 六月婷婷激情综合| 40岁成熟女人牲交片免费| 九月婷婷亚洲综合在线| 天天躁日日躁狠狠躁中文字幕| 国产福利一区二区在线观看| 98超碰在线观看| 欧美午夜一区| 成人精品视频一区二区在线| 亚洲精品中文字幕午夜| 国产凹凸一区在线观看视频| 亚洲人成人无码www| 91人人妻人人做人人爽男同| 2020极品精品国产| 亚洲国产亚洲综合在线尤物| 久久美女精品| 欧美激情,国产精品| 91精品国产91久无码网站| 亚洲小视频网站| 九九久久精品国产av片囯产区| 日本三级欧美三级| 亚洲无码精彩视频在线观看| 伊人中文网| 亚洲精品无码高潮喷水A| 亚洲视屏在线观看| 亚洲综合九九| 色欲色欲久久综合网| 精品久久蜜桃| 欧美一区国产| 国产成人综合在线视频| 国产91小视频| 成人福利在线观看| 一级毛片免费高清视频| 色一情一乱一伦一区二区三区小说| 亚洲成a人片| 国产高清自拍视频| 青青青国产视频手机| 中文字幕人成乱码熟女免费| 久久77777|