楊眾
摘要:隨著近些年來(lái)Python語(yǔ)言在各個(gè)行業(yè)廣泛應(yīng)用,各大公司對(duì)Python技術(shù)人員的招聘數(shù)量日益增多。利用Python語(yǔ)言的Scrapy框架技術(shù)從國(guó)內(nèi)招聘網(wǎng)站上采集了15 000條招聘數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行了處理和存儲(chǔ),將招聘信息中的行業(yè)情況、經(jīng)驗(yàn)要求、工資情況、學(xué)歷要求、公司規(guī)模和招聘地區(qū)等進(jìn)行了展現(xiàn)和分析。對(duì)Python語(yǔ)言框架技術(shù)、實(shí)現(xiàn)方式方法和必要代碼進(jìn)行詳細(xì)講解,對(duì)目前國(guó)內(nèi)招聘崗位的需求特點(diǎn)進(jìn)行了大數(shù)據(jù)分析,為正在學(xué)習(xí)Python技術(shù)或有意向從事該行業(yè)的技術(shù)人員提供了參考和借鑒。
關(guān)鍵詞:Pyhton;Scrapy;網(wǎng)絡(luò)爬蟲;可視化;數(shù)據(jù)分析
中圖分類號(hào):TP393文獻(xiàn)標(biāo)志碼:A文章編號(hào):1008-1739(2020)02-61-4
0引言
根據(jù)IEEE2019年對(duì)編程語(yǔ)言的排名,Python語(yǔ)言高居榜首,并且連續(xù)3年奪冠,已經(jīng)超越Java和C語(yǔ)言,被稱為當(dāng)今最流行的編程語(yǔ)言。目前,國(guó)內(nèi)對(duì)Python人才的缺口已經(jīng)高達(dá)50萬(wàn),使得相關(guān)職位的薪資和待遇逐年攀升,部分高精尖職位如人工智能和大數(shù)據(jù)開發(fā)等人才更是稀缺,不少公司開出30萬(wàn)元的年薪都招不到人。IT領(lǐng)域人才招聘的渠道主要集中在互聯(lián)網(wǎng)招聘和熟人推薦,文章利用Python語(yǔ)言的爬蟲、數(shù)據(jù)存儲(chǔ)、處理和展現(xiàn)分析技術(shù)對(duì)當(dāng)前主流的招聘網(wǎng)站進(jìn)行分析,從數(shù)據(jù)層面反映了當(dāng)前IT領(lǐng)域?qū)ython技術(shù)人員的需求情況。
1相關(guān)技術(shù)
1.1 Python語(yǔ)言背景
Python語(yǔ)言是一種開放源代碼、免費(fèi)的跨平臺(tái)高級(jí)語(yǔ)言,由Guido van Rossum于1989年發(fā)明。Python語(yǔ)言被稱為“膠水語(yǔ)言”,它可以非常容易地把Java和C++等主流語(yǔ)言粘在一起,實(shí)現(xiàn)程序之間的聯(lián)動(dòng)。此外,Python語(yǔ)言還具有入門快、簡(jiǎn)單高效、運(yùn)行可靠、可擴(kuò)展和數(shù)據(jù)處理能力強(qiáng)等特點(diǎn)[1 ]。Python語(yǔ)言擁有大量的第三方開源庫(kù),使其在互聯(lián)網(wǎng)、數(shù)據(jù)分析、云計(jì)算、網(wǎng)絡(luò)爬蟲、自動(dòng)化運(yùn)維、Web開發(fā)和人工智能領(lǐng)域得到了廣泛的支持和應(yīng)用。
1.2 Scrapy爬蟲框架
網(wǎng)絡(luò)爬蟲是Python應(yīng)用中的一個(gè)分支,又稱為全網(wǎng)爬蟲,爬行對(duì)象可以從一些種子擴(kuò)充到整個(gè)Web,主要為門戶站點(diǎn)、搜索引擎和大型的Web服務(wù)商提供采集數(shù)據(jù)[2]。Scrapy框架是Python中最著名、最受歡迎的爬蟲框架,完全通過Python語(yǔ)言進(jìn)行編寫,基于Twisted的異步處理框架,架構(gòu)清晰、成熟,模塊之間的耦合度低、可擴(kuò)展性強(qiáng),可以應(yīng)用在數(shù)據(jù)挖掘、信息處理和存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。
1.3 Echars可視化庫(kù)
Echarts是由百度公司開發(fā)的一款基于JavaScript技術(shù)來(lái)實(shí)現(xiàn)的開源Web可視化庫(kù),稱為商業(yè)級(jí)數(shù)據(jù)圖表。Echars底層依賴輕量級(jí)的canvas類庫(kù)ZRender,提供直觀、友好、可交互和高度個(gè)性化定制的數(shù)據(jù)可視化圖表,如折線圖、柱狀圖、散點(diǎn)圖、餅圖、K線圖、雷達(dá)圖和位置坐標(biāo)圖等上百個(gè)圖表。
Echars的架構(gòu)分為ZRender層和Echars層兩部分,其中ZRender層對(duì)圖形動(dòng)畫、渲染引擎和一些基本的用戶交互方法進(jìn)行了封裝;Echars層包含了具體的調(diào)用接口、視圖和一些交互組件。目前,Echars已經(jīng)成為國(guó)內(nèi)互聯(lián)網(wǎng)行業(yè)最熱門的可視化工具,被百度、阿里、騰訊、華為和京東等公司所使用。
2數(shù)據(jù)獲取
本文數(shù)據(jù)主要通過某大型互聯(lián)網(wǎng)招聘網(wǎng)站進(jìn)行爬取,整個(gè)過程通過Python語(yǔ)言進(jìn)行編寫。在數(shù)據(jù)爬取過程中,采用了模擬請(qǐng)求登錄、動(dòng)態(tài)網(wǎng)頁(yè)抓取代理IP和多線程等技術(shù)手段。數(shù)據(jù)爬取后進(jìn)行采集分析,對(duì)數(shù)據(jù)進(jìn)行了清洗和轉(zhuǎn)換處理,并存儲(chǔ)到MySql數(shù)據(jù)庫(kù),最后通過Echars可視化庫(kù)對(duì)數(shù)據(jù)進(jìn)行展現(xiàn)和分析。
2.1框架搭建
通過比較流行的Scrapy爬蟲框架進(jìn)行編程獲取,對(duì)網(wǎng)站中的崗位名稱、工作年限、學(xué)歷、崗位性質(zhì)、公司性質(zhì)、公司規(guī)模、公司全稱、業(yè)務(wù)方向、所在城市、福利待遇、工資標(biāo)準(zhǔn)和發(fā)布日期等12條信息進(jìn)行抓取。
2.2數(shù)據(jù)定義
2.4數(shù)據(jù)處理與存儲(chǔ)
本設(shè)計(jì)采用MongoDB數(shù)據(jù)庫(kù)作為數(shù)據(jù)源存儲(chǔ),MongoDB作為非關(guān)系型數(shù)據(jù)庫(kù),基于Key-Value形式保存數(shù)據(jù),這點(diǎn)與Python字典非常相似[3]。該語(yǔ)言可輕松橫向拓展、分片和集群,能夠輕松應(yīng)對(duì)爬蟲字段變化等情況,非常適合存儲(chǔ)大規(guī)模爬蟲數(shù)據(jù)。
在Python中使用MongoDB,需要安裝驅(qū)動(dòng),并且導(dǎo)入驅(qū)動(dòng)包。創(chuàng)建并進(jìn)行訪問數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)創(chuàng)建代碼為Client = MongoClient(‘localhost,27017)[4]。數(shù)據(jù)庫(kù)創(chuàng)建后需要實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理方法,程序pipelines.py實(shí)現(xiàn)了Item pipelines項(xiàng)目管道的具體實(shí)現(xiàn),包括編寫數(shù)據(jù)清理、去重等方法,以及實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。根據(jù)對(duì)招聘網(wǎng)站的解析,在工作年限字段,有部分內(nèi)容為“不限”或“迎接畢業(yè)生”,為了便于統(tǒng)計(jì)和分析,將這2類信息的工作年限設(shè)置為0[5]。有部分含有“實(shí)習(xí)”的工作崗位,由于本分析僅限于全職崗位,故將實(shí)習(xí)崗位刪除。最后,將處理好的數(shù)據(jù)存入MongoDB數(shù)據(jù)庫(kù),并且在settings.py中定義好數(shù)據(jù)庫(kù)的鏈接信息,在pipelines.py中實(shí)現(xiàn)MongoPipeline方法,部分代碼如下:
3.2行業(yè)情況分析
通過對(duì)15 000條招聘數(shù)據(jù)進(jìn)行可視化實(shí)現(xiàn),對(duì)行業(yè)及職位數(shù)量進(jìn)行分析,找出了Python招聘崗位應(yīng)用前6名行業(yè),它們的排名和數(shù)量分別為移動(dòng)互聯(lián)網(wǎng)招聘數(shù)據(jù)有4 893條信息、數(shù)據(jù)服務(wù)有2 981條、金融行業(yè)有2 211條、電商行業(yè)有2 107條、信息安全有1 423條、游戲行業(yè)有1 001條、其他行業(yè)有376條信息??梢钥闯?,隨著采用Python技術(shù)的互聯(lián)網(wǎng)網(wǎng)站及應(yīng)用越來(lái)越多,對(duì)Python工程師的需求也最大。
3.3工作經(jīng)驗(yàn)要求
在Echars程序的series部分,通過設(shè)置markPoint{data:[最大值,最小值]}可以設(shè)置數(shù)值曲線的最大值和最小值[6]。從工作經(jīng)驗(yàn)要求曲線中可以看出1/3的崗位均要求3~5年的工作經(jīng)驗(yàn),共有5 700條招聘信息,應(yīng)屆畢業(yè)生和超過10年工作經(jīng)驗(yàn)的人需求最少,僅剩600條招聘信息。
3.4工資情況
在Echars程序中markLine屬性設(shè)置data: {type: average, name: 平均值}可以計(jì)算出曲線平均值[6],如圖2所示。從工資曲線中,可以看到,Python崗位的平均工資為每月19 134元,其中招聘的應(yīng)屆畢業(yè)生的工資最低,平均僅為8 030元,招聘3~10年以上工作經(jīng)驗(yàn)工資最高,達(dá)到27 380元。
從曲線趨勢(shì)中可以發(fā)現(xiàn),經(jīng)驗(yàn)在3~5年左右的程序員工資會(huì)有一個(gè)較大提升,超過行業(yè)內(nèi)平均工資,結(jié)合上面工作經(jīng)驗(yàn)曲線可以發(fā)現(xiàn),這些技術(shù)人員的需求量也最大,所以相應(yīng)的工資給的也比較多。經(jīng)驗(yàn)在5~10年內(nèi)工資將會(huì)達(dá)到一個(gè)比較高的水平,但是招聘需求量有所遞減。經(jīng)驗(yàn)要求超過10年的變化不大甚至還有些回落的趨勢(shì),分析10年以上的程序員雖然經(jīng)驗(yàn)豐富,但是年齡也偏大,工資變動(dòng)不大。
3.5學(xué)歷要求
通過學(xué)歷要求餅狀圖可以發(fā)現(xiàn)大部分Python崗位對(duì)學(xué)歷要求不高,崗位需求普遍集中在本科生和??粕究粕灿? 512條,占50%;??粕灿? 249條,占35%;碩士研究生有1 510條,占10%;博士生有148條,僅占1%;不限學(xué)歷的招聘信息有613條,占4%。
3.6公司規(guī)模情況
通過對(duì)公司上市情況和公司人員規(guī)模情況進(jìn)行分析,發(fā)現(xiàn)Python崗位招聘的公司規(guī)模大部分以中小型企業(yè)為主。沒有經(jīng)歷過融資的公司為1 493家占47%,上市公司為655家占19%。在公司規(guī)模上,以150人以下的小公司居多為1 495家占44%,2 000人以上的大型公司為701家占20%。
3.7地區(qū)城市
在參數(shù)geoCoordMap中定義城市坐標(biāo)位置,并且通過Convert Data將坐標(biāo)數(shù)據(jù)值進(jìn)行拼接,最后通過setOption函數(shù)對(duì)地圖進(jìn)行展現(xiàn),形成坐標(biāo)地圖。通過對(duì)崗位地圖坐標(biāo)圖進(jìn)行分析,Python崗位數(shù)量城市分布由多到少分別為:北京、廣州、深圳、上海、成都、杭州、西安、南京、武漢和蘇州等10個(gè)城市??梢园l(fā)現(xiàn),Python語(yǔ)言技術(shù)需求比較大的幾個(gè)城市仍然是互聯(lián)網(wǎng)比較發(fā)達(dá)的北上廣深等一線城市,Python技術(shù)從業(yè)者在一線城市有比較大的發(fā)展。
4結(jié)束語(yǔ)
本文利用比較流行的Python語(yǔ)言Scrapy框架對(duì)互聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行采集和分析,并通過Echars可視化圖表將分析出來(lái)的數(shù)據(jù)進(jìn)行多元展現(xiàn),采用的方法為在互聯(lián)網(wǎng)下的大數(shù)據(jù)分析和決策支持提供了思路。通過對(duì)互聯(lián)網(wǎng)Python崗位的招聘信息進(jìn)行分析可以發(fā)現(xiàn),在一線城市中從事互聯(lián)網(wǎng)行業(yè)、具備3~5年工作經(jīng)驗(yàn)的本科生最為搶手,工資待遇也比較不錯(cuò),為IT行業(yè)的求職者提供了方向。
參考文獻(xiàn)
[1]王芳.基于Python的招聘網(wǎng)站信息爬取與數(shù)據(jù)分析[J].信息技術(shù)與網(wǎng)絡(luò)安全,2019,38(8):42-46.
[2]李文龍.基于Docker集群的分布式爬蟲研究與設(shè)計(jì)[D].杭州:浙江理工大學(xué),2017.
[3]賈檸瑜.基于python爬蟲的崗位數(shù)據(jù)分析———以拉勾網(wǎng)為例[J].信息技術(shù)與信息化,2019(4):64-66.
[4]李璋.基于Hadoop的互聯(lián)網(wǎng)數(shù)據(jù)營(yíng)銷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:中國(guó)科學(xué)院大學(xué),2017.
[5]林長(zhǎng)謀,黃瑋.基于Python的就業(yè)崗位數(shù)據(jù)獲取與預(yù)處理[J].電腦知識(shí)與技術(shù),2019,15(12):6-7.
[6]趙海國(guó).Ajax技術(shù)支持下的ECharts動(dòng)態(tài)數(shù)據(jù)實(shí)時(shí)刷新技術(shù)的實(shí)現(xiàn)[J].電子技術(shù),2018,47(3):25-27.