潘承佳 劉冬冬



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