蔡文樂,秦立靜
(甘肅農(nóng)業(yè)大學(xué) 信息科學(xué)技術(shù)學(xué)院,甘肅 蘭州 730070)
近年來各個高校畢業(yè)人數(shù)增多,面對各類網(wǎng)絡(luò)招聘網(wǎng)站繁雜紛呈的招聘信息,畢業(yè)生常常要花費大量的時間和精力篩選,如果畢業(yè)生可以根據(jù)自身需求,直觀地了解到各個行業(yè)的崗位特征和變化趨勢,將有利于求職者快速做出選擇[1]。本文實現(xiàn)的招聘網(wǎng)數(shù)據(jù)可視化分析系統(tǒng)主要利用基于Python語言開發(fā)的高級Web 框架Django,整個系統(tǒng)架構(gòu)可以分為數(shù)據(jù)的爬取、數(shù)據(jù)的預(yù)處理、數(shù)據(jù)的存儲、數(shù)據(jù)的可視化分析。
本文設(shè)計的系統(tǒng)功能模塊如圖1 所示。首先,通過Python 的爬蟲框架,利用爬蟲技術(shù)實現(xiàn)對目標(biāo)網(wǎng)頁的爬??;對網(wǎng)站的URL 發(fā)出請求,在URL 接收到請求并返回結(jié)果后進行分析,通過Python 的BeautifulSoup 解析庫對系統(tǒng)所需要的數(shù)據(jù)信息進行解析;然后以CSV 文件的形式保存,主要提取返回結(jié)果中的薪資水平、工作經(jīng)驗、學(xué)歷程度、公司規(guī)模、公司名稱等相關(guān)信息;其次,對數(shù)據(jù)進行處理,將導(dǎo)入到系統(tǒng)的數(shù)據(jù)文件進行讀入,連接MySQL 數(shù)據(jù)庫,再對數(shù)據(jù)進行增刪改查。在目標(biāo)網(wǎng)頁上爬取相應(yīng)的數(shù)據(jù)信息過程中,爬取到的數(shù)據(jù)信息中必然會存在一些重復(fù)冗雜的數(shù)據(jù),是因為在運行爬蟲程序的過程中會出現(xiàn)反爬蟲機制,因此要實現(xiàn)數(shù)據(jù)去重、刪除文件空值行數(shù)據(jù)等操作;最后,數(shù)據(jù)分析是整個流程中最重要的階段,主要是將上一階段經(jīng)過清洗處理的數(shù)據(jù)按照一定的規(guī)則方法進行分析處理,為之后的可視化展示提供數(shù)據(jù)支撐[2]。以可視化的形式去展現(xiàn)對所得數(shù)據(jù)信息分析的結(jié)果,主要采用Python 開發(fā)語言去實現(xiàn)結(jié)果的表達,讀入獲取的數(shù)據(jù)文件并進行統(tǒng)計分析,將分析的結(jié)果進行保存;連接相應(yīng)的數(shù)據(jù)庫,HTML 頁面接收到相應(yīng)的數(shù)據(jù)信息,并在HTML 頁面中使用相應(yīng)的語法程序?qū)⒔Y(jié)果數(shù)據(jù)動態(tài)添加到相應(yīng)的柱狀圖、餅圖等圖表中。
圖1 系統(tǒng)功能模塊
網(wǎng)絡(luò)爬蟲技術(shù)是通過編寫計算機爬蟲程序,按照一定的規(guī)則,爬取目標(biāo)網(wǎng)頁的數(shù)據(jù)信息。采集有價值的數(shù)據(jù),過濾掉無效的數(shù)據(jù),得到充足的數(shù)據(jù)資源,用于進行一系列相關(guān)項目的研究和分析。爬取目標(biāo)網(wǎng)站的招聘信息,對網(wǎng)站的URL 發(fā)出請求,得到URL 的返回結(jié)果并進行分析,部分代碼如下:
關(guān)系型數(shù)據(jù)庫管理系統(tǒng)MySQL,是Oracle 旗下的產(chǎn)品,開發(fā)公司為MySQL AB,在當(dāng)前盛行的數(shù)據(jù)庫中占據(jù)一席之地,在Web 應(yīng)用方面是最好的RDBMS 應(yīng)用軟件之一。關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)并不是放置在一個大的數(shù)據(jù)倉庫,而是放在不同的表中,因此這樣的方式加快了處理速度并提高了靈活性。
Django 的程序編寫由Python 來實現(xiàn),是一個開放源代碼的Web 應(yīng)用框架,也是Python 編程語言驅(qū)動的主要來源。Django 架構(gòu)能夠快速方便地創(chuàng)建出高品質(zhì)、易維護、數(shù)據(jù)驅(qū)動的應(yīng)用程序。除此之外,Django 還具有強大的可擴展性,這是因為它具有功能強大的第三方插件。Django 框架的設(shè)計模式與MVC 的設(shè)計模式異曲同工,稱為MTV。MTV 就是Model、Template 和View 三個單詞的簡寫,分別表示模型、模版和視圖[3-4]。由于在Django 里面更加關(guān)注模型(Model)、模板(Template)和視圖(Views),因此使用Django 框架會大大提高工作效率。
Web 程序的測試主要采用Selenium 在瀏覽器中進行。首先啟動瀏覽器后,Webdriver 會將瀏覽器綁定到特定端口作為Remote Server;創(chuàng)建Sessionld 是由客戶端借助ComandExecutor來實現(xiàn)的,同時發(fā)送請求給Remote Server;Remote Server 在收到請求后,調(diào)用Webdriver 進行操作,并將響應(yīng)的結(jié)果返回給客戶端。
為了能夠快速獲取到目標(biāo)網(wǎng)頁的數(shù)據(jù)信息,實現(xiàn)數(shù)據(jù)信息的分析和可視化,所以在數(shù)據(jù)采集模塊主要采取的是網(wǎng)絡(luò)爬蟲技術(shù)。本文系統(tǒng)需要的數(shù)據(jù)量大,一般的爬取技術(shù)爬取數(shù)據(jù)信息的效率低下,而且容易遭受反爬蟲機制。因此,本文系統(tǒng)的實現(xiàn)主要采取Scrapy 分布式爬蟲框架。Scrapy 框架是基于Python 實現(xiàn)爬取Web 站點、提取結(jié)構(gòu)化數(shù)據(jù)的應(yīng)用框架,可用于數(shù)據(jù)挖掘、數(shù)據(jù)監(jiān)測、自動化測試等,具有結(jié)構(gòu)簡單、靈活性強、高效迅速的特點[5-6]。本文選用BOSS直聘網(wǎng)站進行相關(guān)數(shù)據(jù)的獲取。數(shù)據(jù)爬蟲的基本流程主要為發(fā)起請求、解析內(nèi)容、獲取響應(yīng)的內(nèi)容以及數(shù)據(jù)保存。數(shù)據(jù)的采集過程就相當(dāng)于用戶在網(wǎng)頁上對自己所需要的數(shù)據(jù)進行搜集。
(1)確定爬取對象
本文主要實現(xiàn)對BOSS 直聘網(wǎng)站的相關(guān)數(shù)據(jù)進行爬取,爬取數(shù)據(jù)信息的主要內(nèi)容包括薪資、工作經(jīng)驗、學(xué)歷要求、公司名稱、所在行業(yè)、崗位要求、公司地址等,將爬取的數(shù)據(jù)進行預(yù)處理,最后實現(xiàn)數(shù)據(jù)分析。
(2)分析網(wǎng)頁結(jié)構(gòu)
網(wǎng)絡(luò)爬蟲并不會對所需網(wǎng)頁的界面進行一系列的操作,只需要模擬人工去訪問所需的網(wǎng)頁。因此,爬蟲之前對所需網(wǎng)頁結(jié)構(gòu)的了解是必不可少的一個步驟。利用瀏覽器自帶的開發(fā)者工具對爬取網(wǎng)頁進行深入挖掘和分析,了解各個信息元素之間的異同點。最后實現(xiàn)網(wǎng)絡(luò)爬蟲程序的編寫,需要查看網(wǎng)頁HTML 的代碼,對所需數(shù)據(jù)信息進行核查。
(3)編寫Scrapy 爬蟲程序
發(fā)起請求、解析信息、獲取響應(yīng)內(nèi)容和存儲數(shù)據(jù)是爬蟲框架的基本流程。首先,HTTP 向目標(biāo)站點發(fā)起Request 請求后等待服務(wù)器的響應(yīng),如果服務(wù)器的響應(yīng)是正常的,則會得到一個Response,這個Response 中包含了獲取到網(wǎng)頁的數(shù)據(jù)信息,這些數(shù)據(jù)信息的類型可能有HTML、JSON 字符串、二進制數(shù)據(jù)等多種類型,并且保存的方式多樣化,可以是純文本形式,也可以保存至數(shù)據(jù)庫。
基于Scrapy 爬蟲框架的招聘數(shù)據(jù)信息可視化系統(tǒng),主要由配置文件settings.py、主程序文件spiderMain.py等文件組成。其中,對抓取到的目標(biāo)網(wǎng)頁數(shù)據(jù)信息和數(shù)據(jù)結(jié)構(gòu)的分析主要通過數(shù)據(jù)字段的文件來實現(xiàn),并且相應(yīng)的數(shù)據(jù)字段是通過scrapy.Field()方法建立的。如圖2 所示是爬取到的部分信息。獲取到所需的部分崗位信息后進行存儲,如WorkExperience 存儲工作經(jīng)驗、Salary 存儲工作薪資等,部分代碼如下:
圖2 爬取數(shù)據(jù)
通過網(wǎng)絡(luò)爬蟲技術(shù)能夠采集到多樣化的網(wǎng)頁數(shù)據(jù),但同時也存在各種各樣的問題,如數(shù)據(jù)缺失、冗余、重復(fù)、不一致﹑數(shù)據(jù)結(jié)構(gòu)錯亂等。如果對原始數(shù)據(jù)沒有進行處理而是直接進行分析,不僅會使數(shù)據(jù)決策的效率受到影響,甚至?xí)霈F(xiàn)直接決策的錯誤。因此,在系統(tǒng)的實現(xiàn)過程中,對原始數(shù)據(jù)的處理成為了至關(guān)重要的問題,原始數(shù)據(jù)中可能會存在數(shù)據(jù)的缺失、重復(fù)等問題,需要對獲取到的數(shù)據(jù)信息進行相關(guān)的預(yù)處理操作,最后提供給Hive 進行統(tǒng)計和分析。
在本文系統(tǒng)的搭建過程中,將數(shù)據(jù)導(dǎo)入使用Python 編寫的Pandas 庫的DataFrames 中,從而對數(shù)據(jù)進行數(shù)據(jù)清理,將重復(fù)無用的信息排查出去,并且對數(shù)據(jù)進行分類整理、聚類分析[7-8],如圖3 所示。將所獲取到的每一條崗位信息,按照一定的規(guī)則處理完成之后,存儲在MySQL 數(shù)據(jù)庫中,包括工資、學(xué)歷、工作經(jīng)驗等。最后將處理得到的數(shù)據(jù)保存為CSV文件,同時篩選出有價值的數(shù)據(jù)信息以可視化的方式展現(xiàn)。
圖3 數(shù)據(jù)庫分類
數(shù)據(jù)可視化是一個比較抽象的概念,它的范圍在不斷地擴大,主要是從數(shù)據(jù)中抽象出信息,以一種清晰且簡單明了的方式展現(xiàn)出來。同時也是信息溝通的最有效手段。數(shù)據(jù)可視化分析主要就是將預(yù)處理后的原始數(shù)據(jù)使用一些比較有特色的技術(shù)方法,如圖形圖像處理、計算機視覺以及用戶界面,通過一定的表達、建模以及對表面、立體、屬性和動畫的顯示,以更加清晰的可視化方式呈現(xiàn)。數(shù)據(jù)可視化的主要目的在于:使用簡單的圖形圖像,更加清晰有效地傳達和溝通所獲取的數(shù)據(jù)信息。
此系統(tǒng)主要采用Python 的Django 框架對前端頁面進行設(shè)計,可視化圖表展示部分的實現(xiàn)采用EChart。EChart 是一個具備強大功能和強兼容性的可視化庫,會通過散點圖、餅圖、折線圖和不同頻次的詞云圖等可視化方式為求職人員清晰地展現(xiàn)招聘信息,使求職過程變得更快速高效。以下的可視化結(jié)果分析均以分析C 語言工程師崗位為例。
3.3.1 薪資情況
如圖4 所示,從薪資分布可以看出,計算機類行業(yè)的薪資待遇在高薪資職業(yè)中占據(jù)一定的地位,此類行業(yè)普遍薪資水平較高。薪資在0 ~1 萬元和4 萬元以上的人數(shù)所占比例較少,大多數(shù)求職者的薪資維持在1 ~2 萬元、2 ~3 萬元和3 ~4 萬元之間,趨于一個穩(wěn)定的狀態(tài)。薪資的高低與求職者自身所具備的能力水平直接相關(guān),也與該公司的價值有關(guān),因此薪資是求職者所看重的一個非常重要的方面。
圖4 薪資分布
3.3.2 崗位需求
互聯(lián)網(wǎng)時代,我們被各種各樣的數(shù)據(jù)所包圍著,為了更快地將有價值的數(shù)據(jù)提取出來,并且很好地去利用這些數(shù)據(jù),因此必須先通過計算機相關(guān)技術(shù)去處理這些冗雜的數(shù)據(jù)。隨著互聯(lián)網(wǎng)、大數(shù)據(jù)等公司越來越多,計算機行業(yè)的崗位在大學(xué)生求職中也越來越熱門化。以C 語言工程師崗位為例,如圖5 所示為行業(yè)求職崗位數(shù)量圖,可以看出計算機軟件行業(yè)所占的比例高于其他行業(yè),當(dāng)前計算機行業(yè)處于一種競爭激烈的狀態(tài)。
圖5 行業(yè)求職崗位分布
以C 語言工程師崗位為例,如圖6 所示,互聯(lián)網(wǎng)類的公司人數(shù)處于兩個邊緣,1 000 人以下的小型公司一般為大學(xué)畢業(yè)者創(chuàng)業(yè)的小型公司或者其他初創(chuàng)公司等,這些公司中100 人以下的公司所占比例較大;1 000 人以上的大型成熟穩(wěn)步發(fā)展的公司中,10 000 人以上的公司所占比例最大。每一個公司的成員構(gòu)成也體現(xiàn)出公司規(guī)模的大小、工作效率高低以及內(nèi)核的成熟度等。因此公司規(guī)模的大小也是求職者尋找目標(biāo)公司時所重點關(guān)注的一個方面。
圖6 公司人數(shù)分布
3.3.3 城市分布
如圖7 所示,C 語言工程師人數(shù)主要分布在比較發(fā)達的一線城市,如北京、深圳等。原因在于這些城市的互聯(lián)網(wǎng)行業(yè)發(fā)展較好,求職者選擇這些城市會有較好的發(fā)展。
圖7 C 語言工程師地域分布
3.3.4 福利水平
以C 語言工程師崗位為例,如圖8 所示,可以看出在求職者所關(guān)注的眾多福利待遇之中,節(jié)日福利、年終獎、五險一金出現(xiàn)的頻次較高,這些對求職者來說都是最基本的保障;同時,帶薪年假、員工旅游和定期體檢等也是人們求職過程中所關(guān)心的。求職者在求職的過程中非常關(guān)注目標(biāo)公司給員工創(chuàng)造的基本福利保障,同時各種福利保障也是激勵就業(yè)者創(chuàng)造工作業(yè)績、促進公司提升的重要手段[9-10]。
圖8 求職者關(guān)注的公司福利
3.3.5 公司名稱
如圖9 所示,隨著互聯(lián)網(wǎng)、大數(shù)據(jù)的熱度越來越高,互聯(lián)網(wǎng)公司越來越多,很多公司名稱中都會出現(xiàn)“科技”“信息”“軟件”等詞匯,并且出現(xiàn)頻次很高??梢钥闯觯陙硇畔⒖萍脊疽呀?jīng)逐漸發(fā)展起來,尤其是在上海、北京等一線城市分布得更為廣泛。
圖9 公司名稱
隨著網(wǎng)絡(luò)科技的高速發(fā)展,傳統(tǒng)的招聘方式已經(jīng)不再適合企業(yè)和人才的需求。本文設(shè)計開發(fā)出一種基于網(wǎng)絡(luò)爬蟲的招聘信息數(shù)據(jù)可視化分析系統(tǒng),通過此系統(tǒng)能夠篩選出有價值的招聘信息,使得求職者在求職的過程中對自己的崗位有清晰的認(rèn)知和定位。本文所實現(xiàn)的招聘數(shù)據(jù)可視化分析系統(tǒng),主要利用Python 爬蟲框架實現(xiàn)所需網(wǎng)頁數(shù)據(jù)信息的獲取,對采集到的原始數(shù)據(jù)進行預(yù)處理操作;然后采用Hive 針對薪資分布、行業(yè)數(shù)量、公司人數(shù)、城市分布,以及公司福利和名稱出現(xiàn)頻次進行統(tǒng)計及分析;最后通過ECharts 將采集到的信息以各類圖表和詞云圖的方式進行可視化展現(xiàn),讓求職者更加直觀地看到各類分析結(jié)果,清楚地了解求職現(xiàn)狀,為求職者提供了一個更好的求職分析平臺,幫助求職者在求職的過程中找準(zhǔn)自身定位,及時調(diào)整求職策略。