潘承佳 劉冬冬
摘要:隨著人工智能,大數(shù)據(jù)時(shí)代的來(lái)臨,python語(yǔ)言也因此大熱,python語(yǔ)言在編程語(yǔ)言排行榜中也水漲船高。與python有關(guān)的崗位在lT求職市場(chǎng)中,也越發(fā)顯得旺盛。分析python崗位的具體情況,對(duì)于大學(xué)生求職,以及自己未來(lái)的職業(yè)規(guī)劃都具有深刻的指導(dǎo)意義。該文利用spider技術(shù)爬取了近700頁(yè)的崗位信息,并對(duì)這些粗?jǐn)?shù)據(jù)進(jìn)行數(shù)據(jù)的清洗,分類(lèi)。利用預(yù)處理之后的有效數(shù)據(jù),進(jìn)行數(shù)據(jù)分析,并繪制相關(guān)圖表。此外,還對(duì)招聘要求進(jìn)行分詞、去停用詞后,繪制詞云。通過(guò)一系列的可視化操作,該文對(duì)于python崗位在全國(guó)IT市場(chǎng)的行情,有了更深入的了解。可以得到薪資和學(xué)歷,薪資和工作年限,一線(xiàn)城市崗位的規(guī)模比較以及崗位招聘要求的詞云圖等信息。
關(guān)鍵詞:spider;python;可視化;數(shù)據(jù)分析
中圖分類(lèi)號(hào):TP391.1 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)27-0102-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 背景
目前,IT界對(duì)于python人才的需求已經(jīng)越來(lái)越旺盛,然而python專(zhuān)業(yè)人才相對(duì)其他語(yǔ)言相對(duì)較少,這就使得python相關(guān)崗位數(shù)以及工作薪資待遇顯著提升。本文選擇國(guó)內(nèi)最大的招聘網(wǎng)站51job為平臺(tái),利用爬蟲(chóng)技術(shù)、數(shù)據(jù)可視化技術(shù)對(duì)python崗位進(jìn)行分析,從而從真實(shí)的數(shù)據(jù)層面反映當(dāng)前python人才市場(chǎng)情況。網(wǎng)絡(luò)爬蟲(chóng)具有諸多優(yōu)勢(shì),可根據(jù)用戶(hù)的實(shí)際需求,進(jìn)行爬取,獲取整個(gè)網(wǎng)頁(yè),具備很強(qiáng)的自定義性特點(diǎn)[1]。
2 相關(guān)技術(shù)
2.1 爬蟲(chóng)技術(shù)
網(wǎng)絡(luò)爬蟲(chóng)[2](WebCrawler),是一種按照一定的規(guī)則,自動(dòng)提取Web網(wǎng)頁(yè)的應(yīng)用程序或者腳本,工作原理是基于http協(xié)議中請(qǐng)求與響應(yīng)機(jī)制[3]。網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)點(diǎn)在于,它可以將整個(gè)網(wǎng)頁(yè)完整爬取下來(lái),而且具有高度的自定義性[4]??蛻?hù)端發(fā)送HTTP請(qǐng)求,將url提交給服務(wù)器端。服務(wù)器端根據(jù)ur1l的信息進(jìn)行邏輯處理,并將需要的數(shù)據(jù)返回給客戶(hù)端。由于請(qǐng)求的信息不止在一個(gè)url中,不得不建立一個(gè)url列表通過(guò)持續(xù)的發(fā)送請(qǐng)求進(jìn)而得到全部的信息。返回的信息是HTML( Hypertext MarkupLanguage),通過(guò)BeautifuISoup,XPath,正則表達(dá)式等技術(shù)可以高效地抽取具有固定特征的頁(yè)面信息,準(zhǔn)確率很高。
2.2數(shù)據(jù)可視化
Python為我們提供了用來(lái)制作圖表的庫(kù)函數(shù)如.matplot-lib,pandas等。事實(shí)證明這些方法已經(jīng)十分成功,而本文使用一個(gè)國(guó)產(chǎn)開(kāi)源python庫(kù)pyecharts,它是基于百度開(kāi)源web可視化庫(kù)Echarts,集合python語(yǔ)言自動(dòng)生成Echarts圖表。它不但可以繪制圖表,還可以生成獨(dú)立的HTML網(wǎng)頁(yè)。具有良好的性能,并且使用方便。
3 數(shù)據(jù)獲取
3.1 總體設(shè)計(jì)
首先打開(kāi)Chrome瀏覽器,進(jìn)入前程無(wú)憂(yōu)的網(wǎng)頁(yè),打開(kāi)開(kāi)發(fā)者選項(xiàng),找到其中的network,獲取URL以及請(qǐng)求頭中的head-ers[5]。本文利用request庫(kù)的get方法模擬進(jìn)入5ljob網(wǎng)站,在發(fā)送請(qǐng)求中添加python參數(shù),進(jìn)而可以得到整個(gè)網(wǎng)站關(guān)于python的所有崗位。我們得到的信息包括:公司名稱(chēng)、薪資水平、公司性質(zhì),以及崗位信息等等
3.2 爬蟲(chóng)模塊的設(shè)計(jì)
第一步:我們定義一個(gè)名叫g(shù)et_end_page的函數(shù),在發(fā)送get請(qǐng)求后,得到HTML頁(yè)面,利用XPath技術(shù)獲取最后一頁(yè)的字符串,即獲取到該職位關(guān)鍵詞總共在網(wǎng)站上有多少頁(yè)數(shù),并打印出來(lái)。XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言[6]。這樣也可以對(duì)數(shù)據(jù)量有個(gè)心理預(yù)期。
第二步:由于頁(yè)數(shù)眾多,我們需要執(zhí)行頁(yè)面的跳轉(zhuǎn),這時(shí)候就需要我們知道每一頁(yè)的URL。定義一個(gè)函數(shù)get_url,并將上一步得到的總共的頁(yè)數(shù)傳人函數(shù)參數(shù)。不難發(fā)現(xiàn)每一頁(yè)的URL都是有相同的規(guī)律,通過(guò)這些網(wǎng)頁(yè)鏈接,再繼續(xù)尋找新的網(wǎng)頁(yè)鏈接[7]。我們通過(guò)XPath技術(shù)獲得整頁(yè)的URL列表。部分代碼如下:
Def' get_url(self,count):
num=0#用于判斷是請(qǐng)求響應(yīng)失敗,還是頁(yè)數(shù)到底了
while True:
num+=1
text= response.content.decode(gb18030,)
html= etree.HTML(text)
detail_urls =html.xpath
(”//div[@class=dw_table']/div[@class=el]//p/span/a/@href")
if len(detail_urls)==0:
#防止返回的是空數(shù)據(jù),設(shè)置休眠
time.sleep(2)
continue
else:
break
return detail_urls
#url列表
第三步:有了上一步得到的URL列表,再次利用request庫(kù)的get方法實(shí)現(xiàn)網(wǎng)頁(yè)的抓取,再利用XPath技術(shù)獲取到相應(yīng)崗位的具體信息。我們創(chuàng)建- csv文件并把數(shù)據(jù)保存進(jìn)去,命名為“python招聘職位.csv”。
第四步:為了讓代碼看起來(lái)更加的簡(jiǎn)潔,本文采用封裝的編碼思想。把所有的步驟封裝在一個(gè)類(lèi)中,類(lèi)名為PositionS-pider,爬蟲(chóng)的每個(gè)步驟定義為類(lèi)的實(shí)例方法,類(lèi)的初始化函數(shù)中定義headers,keyword,以及csv文件。這樣可以做到代碼的復(fù)用,符合“python之禪”的要求。
經(jīng)以上數(shù)據(jù)獲取之后,獲得2313行招聘信息,數(shù)據(jù)如下圖所示:
3.3 數(shù)據(jù)處理
由上一步得到的源數(shù)據(jù),稱(chēng)之為“糙數(shù)據(jù)”。由于本文主要做的就是薪資、公司地址,和學(xué)歷這幾個(gè)維度的關(guān)系。所以,必須對(duì)這些數(shù)據(jù)進(jìn)行清洗出來(lái),得到用來(lái)可視化的數(shù)據(jù)集。對(duì)于薪資數(shù)據(jù),源數(shù)據(jù)表現(xiàn)形式為:“**千/月,**萬(wàn)/月,**元/天”,本文采用字符串的findall方法將前面的數(shù)字提取出來(lái),在進(jìn)行換算,得到類(lèi)似于15000這樣的表現(xiàn)形式,還有的薪資是某個(gè)期間范圍內(nèi),如:0.6-1萬(wàn)/月,本文采用的是該區(qū)間平均數(shù)的方式處理。以下是核心代碼:
wages=re.findaⅡ(,([.\d]+)一([.\d]+),a)
wages= [《float(i[0])+ float(iLI]))/2)* 1000
對(duì)于學(xué)歷這個(gè)維度,源數(shù)據(jù)就是:本科,碩士這樣的形式,不需要進(jìn)行處理,可以直接進(jìn)行使用。工作的城市,源數(shù)據(jù)是類(lèi)似于“上海一長(zhǎng)寧區(qū)”,我們直接按照源數(shù)據(jù)的“一”字符分割,拿到前面的城市名。核心代碼如下:
def wish(a):
a=a[0]
a= a.split(一)
return a[0]
4 分析過(guò)程
4.1工作經(jīng)驗(yàn)與工資的分析
通過(guò)折線(xiàn)的變化可以明顯看出,工作5年以后工資水平會(huì)有一個(gè)大的上升。工作3年之內(nèi),薪資漲幅不大?;旧嫌?年工作經(jīng)驗(yàn),可以拿到2萬(wàn)月薪。前三年的工作經(jīng)驗(yàn)很重要,打好前三年的職場(chǎng)基礎(chǔ),在未來(lái)的職場(chǎng)生涯中就可以升職加薪。要求一年經(jīng)驗(yàn)的崗位,平均薪資為:10361元;8-9年經(jīng)驗(yàn)的崗位,平均薪資為:36614元。所有經(jīng)驗(yàn),平均薪資為:19918.43元。
4.2 工資與學(xué)歷的分析
不難發(fā)現(xiàn),學(xué)歷的高低直接影響了工資多少,可以看到本科升到碩士,比專(zhuān)科升到本科工資漲幅更大。市場(chǎng)對(duì)更高級(jí)的人才需求更加旺盛,公司愿意花更大的代價(jià)引進(jìn)人才。作為計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生,提高自己的學(xué)歷也是一件值得考慮的事情。同時(shí),專(zhuān)科及以上學(xué)歷的人員平均工資都達(dá)到了16264元,說(shuō)明IT界整體薪資水平偏高,行業(yè)屬于熱門(mén)一類(lèi)。大家在選專(zhuān)業(yè)以及自己未來(lái)的職業(yè)規(guī)劃方面,選擇python相關(guān)專(zhuān)業(yè),就業(yè)前景還是很好的。
4.3 一線(xiàn)城市公司規(guī)模分析
如圖4所示:上海地區(qū)的公司規(guī)模在四大一線(xiàn)城市中排名第一,行業(yè)大公司在上海分布的較多。對(duì)于求職人群來(lái)說(shuō),未來(lái)可以選擇上海作為最佳求職地是更加明智的。
4.4 崗位信息的詞云分析
本文通過(guò)Python中的Jieba模塊來(lái)實(shí)現(xiàn)分析過(guò)程中對(duì)詞頻和關(guān)鍵詞的統(tǒng)計(jì)[8]。Jieba分詞是一個(gè)Python中文分詞組件,本文采用Jieba分詞技術(shù)[9]的精確模式技術(shù),利用Jieba庫(kù)中進(jìn)20000個(gè)單詞,進(jìn)行前綴樹(shù)掃描,從而達(dá)到快速查找的目的。
Jieba分詞可以在崗位職責(zé)中分析出各種詞出現(xiàn)的頻率,使用Python下的wordcloud模塊繪制這些詞的詞云??梢钥闯?,開(kāi)發(fā)工程師、軟件工程師是市場(chǎng)需求比較大的崗位。同時(shí)要求有經(jīng)驗(yàn)且本科以上學(xué)歷。對(duì)于求職者而言,我們需要掌握的技能包括:Linux、MySQL、機(jī)器學(xué)習(xí)、算法等。詞云圖,可以直觀地看到市場(chǎng)的要求,對(duì)求職者來(lái)說(shuō)是很重要的參考。詞云圖如下:
5 結(jié)束語(yǔ)
本文基于爬蟲(chóng)的request方法,實(shí)現(xiàn)了一個(gè)爬取5ljob網(wǎng)站中招聘信息的爬蟲(chóng)。該爬蟲(chóng)以python相關(guān)的崗位為爬蟲(chóng)目標(biāo),通過(guò)python中的pyecharts數(shù)據(jù)處理和作圖模塊進(jìn)行數(shù)據(jù)可視化展示。本文爬取到的數(shù)據(jù)符合預(yù)期要求,此外還對(duì)薪資與學(xué)歷,工作經(jīng)驗(yàn)的關(guān)系,大公司的分布地區(qū),以及崗位要求進(jìn)行分析,而且可視化展示分析的結(jié)果,對(duì)于求職者未來(lái)的職業(yè)規(guī)劃有一定的指導(dǎo)意義。
參考文獻(xiàn):
[1]劉曉知,基于Python的招聘網(wǎng)站信息爬取與數(shù)據(jù)分析[J].電子測(cè)試,2020(12): 75-76,110.
[2]王大偉.基于Python的Web API自動(dòng)化測(cè)試方法研究[J].電子科學(xué)技術(shù),2015,2(5): 573-581.
[3]馮佳捷,王瑞.中文分詞技術(shù)對(duì)中文搜索引擎的查準(zhǔn)率及查全率的影響[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2013,16(6):184, 259.
[4]王芳.基于Python的招聘網(wǎng)站信息爬取與數(shù)據(jù)分析[J].信息技術(shù)與網(wǎng)絡(luò)安全,2019,38(8): 42-46,57.
[5]姜杉彪,黃凱林,盧昱江,等,基于Python的專(zhuān)業(yè)網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].企業(yè)科技與發(fā)展,2016(8): 17-19.
[6]齊鵬,李隱峰,宋玉偉,基于Python的Web數(shù)據(jù)采集技術(shù)[J].電子科技,2012,25(11): 118-120.
[7] John Coerzen.Python網(wǎng)絡(luò)編程基礎(chǔ)[M].莫遲,譯,北京:電子工業(yè)出版社,2007.
[8]舒德華.基于Scrapy爬取電商平臺(tái)數(shù)據(jù)及自動(dòng)問(wèn)答系統(tǒng)的構(gòu)建[D].武漢:華中師范大學(xué),2016.
[9]柳汨.基于HTML語(yǔ)言的網(wǎng)頁(yè)制作淺卡斤[J].中小企業(yè)管理與科技(_上旬刊),2016(1): 258.
【通聯(lián)編輯:謝媛媛】
作者簡(jiǎn)介:潘承佳(1996-),男,碩士,研究方向?yàn)閿?shù)據(jù)分析;劉冬冬(1977-),男,副教授,研究方向?yàn)閣eb應(yīng)用與安全。