国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Scrapy的招聘信息爬蟲設(shè)計與實現(xiàn)

2019-11-04 00:17魯豐玲
科技資訊 2019年20期
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲

魯豐玲

摘? 要:隨著互聯(lián)網(wǎng)發(fā)布的各種數(shù)據(jù)在急劇增長,人們正常進入網(wǎng)站精確獲取信息的速度較慢而且信息量較小,按照一定的規(guī)則編寫的計算機指令——網(wǎng)絡(luò)爬蟲應(yīng)運而生,它可以在較短的時間內(nèi)從網(wǎng)絡(luò)上自動抓取大量數(shù)據(jù)信息。該文研究的是基于Scrapy框架的一種招聘信息主題網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)。主題網(wǎng)絡(luò)爬蟲只搜索與主題信息有關(guān)的資源數(shù)據(jù),用來服務(wù)于高校畢業(yè)生群體,作為就業(yè)前收集招聘信息的輔助手段。

關(guān)鍵詞:Python? 網(wǎng)絡(luò)爬蟲? 主題網(wǎng)絡(luò)爬蟲? 網(wǎng)頁信息抓取

中圖分類號:TP393.092 ? ?文獻標識碼:A 文章編號:1672-3791(2019)07(b)-0007-04

Abstract: With the rapid growth of various data released by the Internet, people normally enter the website to obtain accurately information is Comparatively slower and the amount of information is less.The computer instructions written according to certain rules——web crawlers came into being, it can be shorter Automatically grab large amounts of data from the network during the time. This paper studies the design and implementation of a recruitment information topic web crawler based on the Scrapy framework. The theme web crawler only searches for resource data related to the topic information, which is used to serve the college graduates as an auxiliary means of collecting recruitment information before employment.

Key Words: Python; Web crawler; Topic web crawler; Web page crawling

隨著網(wǎng)絡(luò)技術(shù)與新媒體技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)產(chǎn)生的數(shù)據(jù)也在快速增長,人們也越來越注重數(shù)據(jù)的意義,重視研究數(shù)據(jù)挖掘的價值。傳統(tǒng)的人工數(shù)據(jù)采集方法,因樣本小、誤差大等因素,已經(jīng)無法滿足高質(zhì)量分析的需求,在信息迅速膨脹的時代,網(wǎng)絡(luò)爬蟲就備受人們追捧,成為當下信息采集數(shù)據(jù)挖掘的主要方式之一。一些學者提出:互聯(lián)網(wǎng)上60%的流量都是由網(wǎng)絡(luò)爬蟲帶來的[1]。

1? 網(wǎng)絡(luò)爬蟲簡介

1.1 網(wǎng)絡(luò)爬蟲

網(wǎng)絡(luò)爬蟲是一種用于抓取Web信息的計算機程序或指令腳本[2],它遵循某些特定的規(guī)則,可以從網(wǎng)絡(luò)上自動獲取所需要的信息,可以理解為網(wǎng)絡(luò)上的“機器人”[3],它有多個名字,如Web信息收集器、Ant、自動索引、蠕蟲等,有時也被稱為網(wǎng)頁蜘蛛。網(wǎng)絡(luò)中的每個網(wǎng)頁都有與其對應(yīng)的唯一URL鏈接地址,網(wǎng)絡(luò)爬蟲從指定的某個URL出發(fā),開始向目標網(wǎng)站發(fā)出請求,服務(wù)器正常響應(yīng)后訪問相關(guān)聯(lián)的所有頁面的URL,從中提取該頁面有價值的數(shù)據(jù),這些數(shù)據(jù)可以是字符串、HTML等類型,并且把符合需求的URL添加到請求隊列中,從而構(gòu)成新的URL請求列表,接著進行下一輪的訪問提取工作,直到爬蟲搜索完整個URL隊列頁面,或者滿足結(jié)束條件時結(jié)束訪問,爬蟲工作的基本流程如圖1所示。

1.2 主題網(wǎng)絡(luò)爬蟲

主題網(wǎng)絡(luò)爬蟲是根據(jù)指定的主題,只搜索抓取與主題相關(guān)的網(wǎng)站頁面,因而大大提高爬取速度,獲取的網(wǎng)頁有針對性,保存數(shù)量減少,可以節(jié)省大量的網(wǎng)絡(luò)資源,完全可以滿足特定人員對某種特定域信息的需求[4]。主題網(wǎng)絡(luò)爬蟲之所以能實現(xiàn)對特定信息的獲取,在于它對網(wǎng)頁目標主題相關(guān)度的計算及篩選[5],這是主題爬蟲的優(yōu)勢所在。網(wǎng)頁主題相關(guān)度的計算方法可以按照計算分析具體內(nèi)容的不同分為3類:基于網(wǎng)頁內(nèi)容的算法、基于鏈接結(jié)構(gòu)的算法、基于綜合價值的算法。

2? Python語言簡介

2.1 Python語言

Python是解釋型、面向?qū)ο蟮挠嬎銠C開源編程語言,語法規(guī)則簡單,有“功能齊全”的標準庫和強大豐富的第三方庫支持,其中如Requests庫、Urllib庫、Scrapy庫等均可以用來編寫爬蟲[6],其中Scrapy庫的使用最普遍。Python具有極好的可擴展性,可以實現(xiàn)動態(tài)編程。它可以與用其他編程語言(如C/C++和Java)生成的各種模塊很容易地接口,擁有強大的HTML語言解析器和網(wǎng)絡(luò)支持庫,運用Requests網(wǎng)絡(luò)支持庫通過少量代碼的編寫就可以下載網(wǎng)頁,運用Beautiful Soup網(wǎng)頁解析庫可以輕松從HTML或XML網(wǎng)頁中解析各個標簽,并快速提取頁面內(nèi)容。在實際應(yīng)用中,利用Python語言構(gòu)建的程序原型,甚至包括原型的用戶界面,如果有一些要實現(xiàn)特別的功能需求,還可以改用另外的計算機語言去編寫,因此,它常被稱為膠水語言[7]。Python語言很容易學習使用,可移植的性能使它對開發(fā)平臺沒有很高的要求。

2.2 Scrapy框架

Scrapy框架是Python開發(fā)的、用來爬取網(wǎng)頁信息的框架,它是基于Python爬蟲開發(fā)中使用最廣泛的框架,可以應(yīng)用于數(shù)據(jù)挖掘、數(shù)據(jù)監(jiān)測以及信息處理等方面。Scrapy框架主要由以下組件構(gòu)成:引擎(Scrapy Engine)、調(diào)度器(Scheduler)、爬蟲(Spiders)[8]、下載器(Downloader)、項目管道(Item Pipeline)、Spider中間件(Spider Middlewares)、下載器中間件(Downloader Middlewares)[8]。

2.3 Scrapy框架的工作流程

在Scrapy框架中引擎處于框架的中心位置,控制各組件間的數(shù)據(jù)流向,它爬取的工作流程簡要如下。

(1)確定要抓取的目標網(wǎng)站之后,由爬蟲發(fā)出要處理的第一個URL信息請求,請求被發(fā)送到引擎。

(2)引擎接收到請求信號,通知調(diào)度器把與爬取主題相關(guān)的頁面請求送入隊列。

(3)調(diào)度器收到來自引擎的請求信號,按照某種方式將請求信息整理后放入URL隊列,待到有需要時再重新交還給引擎,與此同時,調(diào)度器將下一個待爬取的URL傳送給引擎,引擎將URL通過下載中間件轉(zhuǎn)發(fā)給下載器。

(4)下載器獲得Requests請求后根據(jù)指令從頁面上獲取數(shù)據(jù),抓取的響應(yīng)交還給引擎。

(5)引擎從下載器中接收到響應(yīng)信號,通過Spider中間件轉(zhuǎn)交給爬蟲去處理。

(6)爬蟲分析獲取的響應(yīng)信息,把item字段所需要的數(shù)據(jù)信息提取出來,交給項目管道去下載,并返回爬取到的項目內(nèi)容及需跟進新的URL請求給引擎。

(7)引擎通知項目管道處理獲取到的數(shù)據(jù),項目管道接收到爬蟲傳遞的數(shù)據(jù),并對這些數(shù)據(jù)進行清理、驗證及存取等處理。

(8)引擎通知調(diào)度器跟進新的URL,調(diào)度器獲取到URL,重復以上操作,直至調(diào)度器里URL隊列為空時,結(jié)束爬蟲運行[9]。

3? 基于Python的招聘信息主題爬蟲的分析、設(shè)計與實現(xiàn)

3.1 招聘信息主題爬蟲的分析

該文的招聘信息主題爬蟲劃為分類模塊、爬蟲模塊、提取模塊3個部分。其中分類模塊用來分析提取URL信息,該模塊側(cè)重于參照網(wǎng)頁參數(shù)判斷招聘主題的相關(guān)性,使用正則表達式和值來判斷招聘主題的相關(guān)性,評估分析網(wǎng)頁URL的信息提取價值,并且給出與之相應(yīng)的搜索次序[10];爬蟲模塊功能在于實施招聘主題信息網(wǎng)頁的抓取,在滿足爬取規(guī)則的范圍內(nèi)抓取符合招聘主題信息的網(wǎng)頁數(shù)據(jù),將抓取的網(wǎng)頁數(shù)據(jù)存入到數(shù)據(jù)庫中并為它們建立索引,根據(jù)用戶輸入的關(guān)鍵字,從數(shù)據(jù)庫中查詢符合用戶需求的數(shù)據(jù)頁面并把它們?nèi)〕?提取模塊指出抓取頁面的順序,提取招聘主題網(wǎng)頁的內(nèi)容,下載頁面源代碼,該模塊中主要涉及主體內(nèi)容和網(wǎng)頁源代碼的提取。

3.2 招聘信息主題爬蟲的設(shè)計

3.2.1 創(chuàng)建Scrapy新項目

編寫網(wǎng)絡(luò)爬蟲,第一步建立一個Scrapy項目文件,在CMD窗口中運行更改目錄的命令,把當前位置切換到將要用于保存爬蟲代碼的文件夾中,運行命令“scrapy startproject 自定義爬蟲名稱”,文件夾中會自動創(chuàng)建爬蟲的項目框架。該項目文件夾里的內(nèi)容包括:項目配置文件、python模塊、item文件、pipelines管道文件、設(shè)置文件和爬蟲目錄文件夾等幾個部分。

3.2.2 定義Item容器

為已爬取的網(wǎng)絡(luò)數(shù)據(jù)定義用于保存的容器,與python字典的使用方法相似,而且定義Item容器為消除由于拼寫錯誤帶來的麻煩,增加了額外保護機制。根據(jù)實際需要在item.py文件中對提取的數(shù)據(jù)定義相應(yīng)的字段,比如網(wǎng)站的標題、網(wǎng)站的描述、網(wǎng)站的鏈接等。

3.2.3 編寫爬蟲

爬蟲程序用于爬取網(wǎng)站信息,它的實現(xiàn)內(nèi)容包含有初始下載的鏈接地址即URL列表、后續(xù)跟進網(wǎng)頁的URL鏈接、判斷網(wǎng)頁內(nèi)容是否與主題相關(guān)、采用何種算法、提取數(shù)據(jù)生成item的方法,具體程序內(nèi)容是用戶自己編寫的類。

編寫爬蟲時首先要觀察網(wǎng)頁明確需求,該文選用招聘信息主題網(wǎng)站前程無憂51job網(wǎng)站的職位搜索列表頁面,開發(fā)前先進行數(shù)據(jù)分析:分析招聘主題信息爬蟲要爬取的數(shù)據(jù)信息包括職位名、公司名、工作地點、薪資、發(fā)布時間等;觀察51job頁面的源代碼和頁面結(jié)構(gòu)。通過觀察51job頁面的源代碼和頁面結(jié)構(gòu),發(fā)現(xiàn)頁面主題部分有用的信息數(shù)據(jù)都由div區(qū)分,因此提取數(shù)據(jù)時使用XPath方法解析相對方便。

用戶在創(chuàng)建自定義爬蟲時,必須繼承scrapy.Spider類的屬性與方法,它還應(yīng)該定義3個屬性:name屬性(不同的spider必須設(shè)置不同的名稱以區(qū)別其他爬蟲)、start_urls屬性(包括爬蟲開始時的URL列表)和parse()回調(diào)函數(shù)。其中回調(diào)函數(shù),在下載器返回響應(yīng)對象Response時就會被調(diào)用,當下載完初始URL后,生成的響應(yīng)對象Response被作為參數(shù)發(fā)送回parse()函數(shù)。此屬性用來解析返回的數(shù)據(jù)、提取數(shù)據(jù)、對需要進一步訪問提取數(shù)據(jù)的URL鏈接生成的請求對象Request。在這里選用的是,在51job網(wǎng)站進行職位搜索“平面設(shè)計師”及工作地點定位于“河南”地區(qū)的列表頁面URL作為起始start_urls。

3.3 招聘信息主題爬蟲的運行

3.3.1 運行爬蟲爬取數(shù)據(jù)

通過“cd 自定義爬蟲名稱”命令進入到爬蟲項目文件夾根目錄中,運行啟動爬蟲的命令“scrapy crawl 自定義爬蟲名稱”,Scrapy為爬蟲的start_urls屬性中的每個URL鏈接創(chuàng)建對應(yīng)的響應(yīng)對象Response,為創(chuàng)建的響應(yīng)對象指定回調(diào)函數(shù)prase(),接著調(diào)度響應(yīng)對象、執(zhí)行下載器程序,執(zhí)行完成后生成響應(yīng)對象,最后把響應(yīng)對象反饋到Spider類。在主題爬蟲的運行過程中,首先收集與主題相關(guān)的頁面并將其稱為URL種子集,然后從種子頁面開始,將與主題相關(guān)度大的URL鏈接放入等待隊列,減少無關(guān)網(wǎng)頁的下載帶來的消耗,確定每個鏈接的優(yōu)先級。運行過程中的界面如圖2所示。

3.3.2 存儲內(nèi)容

由于該文選用的是前程無憂51job網(wǎng)站,將爬取篩選后的數(shù)據(jù)存放到item中,運用Scrapy框架里包含的Feed exports命令可以很方便地導出文件,保存爬取到的信息。但是該文提取招聘信息的目的是為了方便服務(wù)學生,因而最終希望將爬取的信息數(shù)據(jù)導出到Excel文件中。Python豐富強大的庫中有專門處理Excel文件的庫,如xlrd、xlwt、xlutils、openpyxl等庫。其中xlrd庫用來讀取Excel格式文件;xlwt庫是針對Excel格式文件的創(chuàng)建、格式的設(shè)置、數(shù)據(jù)的寫入、文件的保存等操作進行處理;xlutils庫對Excel格式的文件既可以讀取,又可以寫入、修改。這里選用的是openpyxl庫,這是一個比較簡單的第三庫,它可以用來處理xlsx格式的Excel文件,只需要先實例化一個Workbook對象,然后用save()方法保存即可,運行結(jié)果如圖3所示。

3.3.3 結(jié)果分析

從以上運行的結(jié)果可以看出,Excel文件中爬取的內(nèi)容都是近期發(fā)布的、想要搜索的“河南區(qū)域”范圍內(nèi)的“平面設(shè)計師”招聘信息,搜集的數(shù)據(jù)基本符合所要查詢職位的相關(guān)信息,但也出現(xiàn)了個別數(shù)據(jù)不確切的情況,基本可以滿足學生就業(yè)查詢的需求,整體來看影響不大。在今后的實際運行過程中可以更換起始頁面的URL信息,來爬取其他就業(yè)崗位的相關(guān)招聘信息,以服務(wù)更多不同專業(yè)需求的學生。因此,招聘信息主題爬蟲技術(shù)可以作為服務(wù)于畢業(yè)生的技術(shù)手段,幫助其以快速獲取相關(guān)專業(yè)的各類招聘信息。

4? 結(jié)語

網(wǎng)絡(luò)信息資源充盈的今天,網(wǎng)絡(luò)信息的獲取工作十分重要,該文主要從網(wǎng)絡(luò)爬蟲、Python語言與Scrapy框架幾個方面進行闡述,簡單介紹了招聘信息主題網(wǎng)絡(luò)爬蟲的工作流程、開發(fā)與實現(xiàn),希望所抓取的數(shù)據(jù)信息能夠服務(wù)于院校畢業(yè)生的就業(yè)工作。與一般的爬蟲技術(shù)相比,主題網(wǎng)絡(luò)爬蟲有明顯的精確性特征,可以精準地搜索與主題相關(guān)的網(wǎng)頁信息,增強了網(wǎng)絡(luò)搜索的實效性。但是,由于主題爬蟲要根據(jù)主題信息進行相關(guān)度數(shù)據(jù)分析,會產(chǎn)生諸多等待時間,因此主題網(wǎng)絡(luò)爬蟲的搜索技術(shù)仍有很大的改善空間,比如采用多進程、多線程等主題爬蟲來提高爬取信息的效率。在今后的研究工作中,繼續(xù)改進招聘信息主題爬蟲的設(shè)計,完善有關(guān)功能,提升爬取數(shù)據(jù)的效率,經(jīng)常關(guān)注招聘信息網(wǎng)站的更新,以期更好地為學生就業(yè)工作提供更多的幫助。

參考文獻

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

[2] 洪芳.基于Selenium2的Web UI自動化測試框架的設(shè)計與實現(xiàn)[D].西南交通大學,2017.

[3] 劉杰,葛曉玢,聞順杰.基于Python的網(wǎng)絡(luò)爬蟲系統(tǒng)的設(shè)計與實現(xiàn)[J].信息與電腦:理論版,2019(12):92-93,96.

[4] 孫立偉,何國輝,吳禮發(fā).網(wǎng)絡(luò)爬蟲技術(shù)的研究[J].電腦知識與技術(shù),2010(15):4112-4115.

[5] 薛麗敏,吳琦,李駿.面向?qū)S眯畔@取的用戶定制主題網(wǎng)絡(luò)爬蟲技術(shù)研究[J].信息網(wǎng)絡(luò)安全,2017(2):12-21.

[6] 魏冬梅,何忠秀,唐建梅.基于Python的Web信息獲取方法研究[J].軟件導刊,2018,17(1):41-43.

[7] 郭麗蓉.基于Python的網(wǎng)絡(luò)爬蟲程序設(shè)計[J].電子技術(shù)與軟件工程,2017(23):248-249.

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

[9] Qingzhao Tan,Prasenjit Mitra.Clustering-based incremental web crawling[J].ACM Transactionson Information Systems(TOIS),2010,28(4):85-89.

[10] 方星星,魯磊紀,徐洋.網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)中主題網(wǎng)絡(luò)爬蟲的研究與實現(xiàn)[J].艦船電子工程,2014,34(9):104-107.

猜你喜歡
網(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ò)爬蟲流量
網(wǎng)絡(luò)爬蟲針對“反爬”網(wǎng)站的爬取策略研究
南木林县| 乌拉特后旗| 兴安县| 陵川县| 昌吉市| 西乡县| 团风县| 乌兰浩特市| 个旧市| 大安市| 米易县| 建水县| 呼图壁县| 灵璧县| 若尔盖县| 岚皋县| 娄烦县| 元江| 贞丰县| 洛浦县| 项城市| 新巴尔虎右旗| 逊克县| 鲜城| 大邑县| 广丰县| 柳林县| 广河县| 佛山市| 北川| 昌乐县| 庆阳市| 浦江县| 剑川县| 阜平县| 海门市| 连平县| 西充县| 贵州省| 武汉市| 鄢陵县|